나는 비활성 사용자 ID를 확인하기 위해 etc_security_lastlog의 데이터를 시각화하는 간단한 방법을 찾고 있습니다. "비활성" 사용자는 time_last_login이 충분히 오래되었는지 여부에 따라 결정됩니다. 어떻게 해야 합니까?
lp:
time_last_unsuccessful_login = 1174162435
tty_last_unsuccessful_login = /dev/pts/7
host_last_unsuccessful_login = 1x.xxx.xxx.x.x
unsuccessful_login_count = 1
smtsftp:
unsuccessful_login_count = 3
time_last_login = 1382043613
tty_last_login = /dev/ssh-16842912
host_last_login = 1x.xxx.xxx.x.x.net.intra
time_last_unsuccessful_login = 1382083294
tty_last_unsuccessful_login = ssh
host_last_unsuccessful_login = 1x.xxx.xxx.x.x.net.intra
svcsinae:
unsuccessful_login_count = 0
privil1:
unsuccessful_login_count = 0
time_last_login = 1567112152
tty_last_login = /dev/pts/1
host_last_login = 11x.xxx.xxx.x.x
time_last_unsuccessful_login = 1507892677
tty_last_unsuccessful_login = ssh
host_last_unsuccessful_login = 1x.xxx.xxx.x.x
답변1
간단한 awk 필터를 사용하여 이 문제를 해결할 수 있습니다. 현재 타임스탬프와 관심 있는 마감일을 전달하면 됩니다. 입력을 구문 분석하여 사용자 이름과 time_last_login 값을 찾습니다. 기한보다 빠른 값을 찾으면 해당 사용자에게 이를 보고합니다.
다음 예에서는 대략적인 1년(31,536,000초)을 사용합니다.
awk -v now=$(date +%s) -v cutoff=31536000 '
/^[^-+@~ ][^:"#,=\\\/?` ]+:$/ {
user=$1
sub(/:$/, "", user)
}
/time_last_login = [[:digit:]]+/ {
if (now - $3 > cutoff) print user " has not logged in within the cutoff"
}
' /etc/security/lastlog
사용자 이름을 검색할 때 사용하는 정규식은 다음에서 유래합니다.MK 사용자 문서. 사용자 이름(행)을 캡처한 후 사용자 이름에서 후행 콜론을 제거합니다.