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따라서 스크립트에서 사용자 이름을 반복하여 각 사용자(예: 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

정확히 어떤 항목이 변경되었는지 확인하려면 의 출력을 저장 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

관련 정보