web-dev-qa-db-fra.com

Comment obtenir la modification en observant le fichier avec inotifywait

Je veux obtenir le nom d'utilisateur à chaque fois que son mot de passe est changé dans/etc/shadow. Voici mon script:

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

Comment puis-je le faire facilement?

2
Fatima Zohra

Pour afficher votre dernier changement de mot de passe, utilisez passwd

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

ou pour un nom d'utilisateur différent

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

Par conséquent, vous pouvez parcourir les noms d'utilisateur en /etc/passwd dans votre script et affichez les horodatages pour chaque utilisateur, peut-être pour les utilisateurs avec un 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

Pour déterminer quels éléments ont changé exactement, vous devez enregistrer la sortie de awk … et comparer avec le prochain démarrage.


Exemple

% 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

ou pour un compte utilisateur concret

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

ou pour tous les utilisateurs

% 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
2
A.B.