/ etc/shadowでパスワードが変更されるたびにユーザー名を取得したい。これが私のスクリプトです:
while inotifywait -e attrib /etc/shadow; do
#edit user
while IFS=: read -r f1 f2
#get username for changed password
done < $file
#end edit user
done
どうすれば簡単にできますか?
最後のパスワード変更を表示するには、passwd
を使用します
passwd -S | awk '{print $3}'
または別のユーザー名用
Sudo passwd -S user_name | awk '{print $3}'
したがって、スクリプトの/etc/passwd
のユーザー名をループして、各ユーザーのタイムスタンプを表示できます。IDが1000以上のユーザーの場合があります。
while inotifywait -e attrib /etc/shadow; do
awk -F: '($3 >= 1000) {print $1}' /etc/passwd | xargs -I{} passwd -S {} | awk '{print $1,$3}'
done
どの項目が正確に変更されたかを判断するには、awk …
の出力を保存し、次の開始と比較する必要があります。
例
% passwd -S | awk '{print $3}'
07/14/2015
% passwd
Changing password for aboettger.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
% passwd -S | awk '{print $3}'
10/01/2015
または具体的なユーザーアカウント用
% Sudo passwd -S root | awk '{print $3}'
05/29/2015
またはすべてのユーザー向け
% awk -F: '($3 >= 1000) {print $1}' /etc/passwd | xargs -I{} passwd -S {} | awk '{print $1,$3}'
passwd: You may not view or modify password information for nobody.
aboettger 10/01/2015