如何通过使用 inotifywait 观察文件来获取更改

如何通过使用 inotifywait 观察文件来获取更改

每次在 /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

我怎样才能轻松地做到这一点?

答案1

要显示您上次更改的密码,请使用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

相关内容