Como faço para obter a alteração observando o arquivo com inotifywait

Como faço para obter a alteração observando o arquivo com inotifywait

Quero obter o nome de usuário sempre que sua senha for alterada em/etc/shadow. Aqui está meu roteiro:

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

Como posso fazer isso facilmente?

Responder1

Para mostrar sua última alteração de senha, usepasswd

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

ou para um nome de usuário diferente

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

Portanto, você pode percorrer os nomes de usuário em /etc/passwdseu script e mostrar os carimbos de data e hora de cada usuário, talvez para usuários com 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

Para determinar quais itens foram alterados exatamente, você deve salvar a saída awk …e compará-la com a próxima inicialização.


Exemplo

% 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 para uma conta de usuário concreta

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

ou para todos os usuários

% 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

informação relacionada