「useradd」結果をログファイルに出力しようとしていますが、残念ながら詳細なオプションはありません。たとえば、「useradd 友達」は、ユーザーがすでに存在しない限り、出力はありません。
次のことをしたいと思います:useradd -v友達> $ logfile
0がユーザーのUIDとGIDを照会してログファイルに書き込むと、結果コードを確認できると思いました。たとえば、次のようになります。
log=logfile
un=dude
if useradd ${un} &>> $log; then
uu=$(getent passwd ${un} | cut -d: -f3)
ug=$(getent passwd ${un} | cut -d: -f4)
uh=$(getent passwd ${un} | cut -d: -f6)
echo "User ${un} UID:${uu} GID:${ug} ${uh} successfully added." >> $log
fi
# cat logfile
User dude UID:1000 GID:1000 /home/dude successfully added.
useradd: user 'dude' already exists
しかし、より簡単なオプションがあるかどうか疑問に思います。
オペレーティングシステム:RHEL 7.7
/var/log/secureを解析することも別のアイデアかもしれません。
un=dude
useradd ${un} 2>&- &
bpid=$!
wait $bpid
ret=$?
sync
(grep "useradd\[${bpid}\]" /var/log/secure | tail -n 2) >> logfile
if [[ ${ret} -eq 0 ]]; then
echo do whatever you need to do
else
echo error
exit 1
fi
# ./abc
do whatever you need to do
# ./abc
error
# cat logfile
Aug 24 03:48:07 vm7031 useradd[4929]: new group: name=dude, GID=1000
Aug 24 03:48:07 vm7031 useradd[4929]: new user: name=dude, UID=1000, GID=1000, home=/home/dude, shell=/bin/bash
Aug 24 03:48:09 vm7031 useradd[4940]: failed adding user 'dude', exit code: 9
しかし、同期が必要なようです。それ以外の場合、grepは機能しません。わかりません。やや過剰なようです。
答え1
オプション1(RHEL、DEBIAN)
inotify-toolsに基づいてRHELに使用できる2つの追加オプションがあります(私が知っている限り、このオプションはデフォルトではインストールされません)。パイプ/dev/null
は、-qqが説明されているほど静かではないため、端末への標準出力を防ぐためのものです。
~のためDebian流通、変化 /var/log/secure
到着/var/log/auth.log
当然sudo
ながら、実際にログインしてroot
このタイプのシステム全体の監視を設定することは、実際には適切な用途の1つですroot
。
1./var/log/secure
背景変更モニタリング:
while inotifywait -qq -e modify /var/log/secure;
do
if tail -n1 /var/log/secure | grep useradd > /dev/null;
then
tail -n1 /var/log/secure | grep useradd >> ~/useradd.log;
echo "Here you can also add conditional action if user already exists";
fi;
done &
auth.log
この特定のオプションを使用すると、ログ(useradd、pamなど)のさまざまな部分を別々にsecure
監視されているサブログに分割できるので、本当に気に入ります。
2.useradd
コマンド自体の使用法をモニターします。
while inotifywait -qq /usr/sbin/useradd;
do
if tail -n1 /var/log/secure | grep useradd > /dev/null;
then tail -n1 /var/log/secure | grep useradd >> ~/useradd.log ;
fi;
done &
スクリプトでパッケージ化され実行されるすべてのオプションは、nohup [script] > /dev/null
端末が閉じられていてもバックグラウンドで継続的に監視されます。
オプション2(Debian)
あるいは、あなたにとってより良いオプションは、コマンドが完了した後に実行されるものを使用しadduser
て生成することです。/usr/local/sbin/adduser.local
adduser
次のように作成するとadduser.local
:
#!/bin/bash
# arguments passed in the following order: username uid gid home-directory
#adjust log path accordingly
echo "ADDUSER: $1 $2 $3 $4 $5" >> ~/adduser.log
新しいユーザーが作成されるたびにログファイルを追加する必要があります。
オプション3(すべて)
はい、実際の出力がuseradd
次に追加されます。/var/log/auth.log
例としてテスト済み(明らかにコマンドの前にsudoがあります)
$useradd dude
$cat /var/log/auth.log | tail -2
Aug 23 19:01:25 useradd[32230]: new group: name=dude, GID=1012
Aug 23 19:01:25 useradd[32230]: new user: name=dude, UID=1011, GID=1012, home=/home/dude, shell=/bin/sh
$useradd dude
$cat /var/log/auth.log | tail -1
Aug 23 19:04:16 useradd[32328]: failed adding user 'dude', data deleted
全体的に、私はあなたが探しているものが次のようになると思います:
$ sudo grep -a "useradd" /var/log/auth.log
これにより、ユーザーがシステムに追加した名前と時刻を含むすべてのログエントリが提供されます。
答え2
useradd または adduser オプションは、他のディストリビューションよりも RHEL 7 で制限されているようです。私は以下を行うことにしました。
useradd ${un} 2>&- &
pid=$!; wait $pid; sync
{ grep "useradd\[${pid}\]" ${authlog} | tail -n 2; } >> ${logfile}
Then I simply verify whether the user exists and continue accordingly.
これにより、$!はその特定のプロセスのPIDを表示するために必要なuseraddをバックグラウンドで実行します。その後、/var/log/secure プロセス ID を逆順に取得し、出力をマイログファイルに書き込みます。同期または一時停止(睡眠3)が必要ですが、パフォーマンスが低下してはいけません。