Как мне получить изменение, наблюдая за файлом с помощью inotifywait?

Как мне получить изменение, наблюдая за файлом с помощью inotifywait?

Я хочу получать имя пользователя каждый раз, когда его пароль меняется в /etc/shadow. Вот мой скрипт:

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

Как мне это легко сделать?

решение1

Чтобы увидеть последнее изменение пароля, используйтеpasswd

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

или для другого имени пользователя

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

Поэтому вы можете перебрать имена пользователей в /etc/passwdсвоем скрипте и показать временные метки для каждого пользователя, возможно, для пользователей с идентификатором >= 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

Чтобы определить, какие именно элементы изменились, необходимо сохранить вывод awk …и сравнить его со следующим запуском.


Пример

% 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

или для конкретной учетной записи пользователя

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

или для всех пользователей

% 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

Связанный контент