¿Cómo obtengo el cambio observando el archivo con inotifywait?

¿Cómo obtengo el cambio observando el archivo con inotifywait?

Quiero obtener el nombre de usuario cada vez que se cambia su contraseña en /etc/shadow. Aquí está mi guión:

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

¿Cómo puedo hacer eso fácilmente?

Respuesta1

Para mostrar su último cambio de contraseña utilicepasswd

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

o para un nombre de usuario diferente

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

Por lo tanto, puede recorrer los nombres de usuario en /etc/passwdsu secuencia de comandos y mostrar las marcas de tiempo para cada usuario, tal vez para usuarios con una identificación >= 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

Para determinar qué elementos han cambiado exactamente, debe guardar el resultado awk …y compararlo con el siguiente inicio.


Ejemplo

% 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

o para una cuenta de usuario concreta

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

o para todos los usuarios

% 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

información relacionada