如何透過使用 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

相關內容