Wie erhalte ich die Änderung durch Beobachten der Datei mit inotifywait?

Wie erhalte ich die Änderung durch Beobachten der Datei mit inotifywait?

Ich möchte den Benutzernamen jedes Mal erhalten, wenn sein Passwort in /etc/shadow geändert wird. Hier ist mein Skript:

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

Wie kann ich das einfach machen?

Antwort1

Um Ihre letzte Passwortänderung anzuzeigen, verwenden Siepasswd

passwd -S | awk '{print $3}'

oder für einen anderen Benutzernamen

sudo passwd -S user_name | awk '{print $3}'

Daher können Sie /etc/passwdin Ihrem Skript eine Schleife über die Benutzernamen ausführen und die Zeitstempel für jeden Benutzer anzeigen, beispielsweise für Benutzer mit einer 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

Um festzustellen, welche Elemente sich genau geändert haben, muss man die Ausgabe speichern awk …und beim nächsten Start vergleichen.


Beispiel

% 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

oder für ein konkretes Benutzerkonto

% sudo passwd -S root | awk '{print $3}'
05/29/2015

oder für alle Benutzer

% 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

verwandte Informationen