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/passwd
su 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