Red Hat Enterprise Linuxで詳細ユーザーを追加する

Red Hat Enterprise Linuxで詳細ユーザーを追加する

「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.localadduser

次のように作成すると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

これにより、ユーザーがシステムに追加した名前と時刻を含むすべてのログエントリが提供されます。

おすすめ記事