我正在寻找一种简单的方法来可视化 etc_security_lastlog 中的数据,以查看非活动用户 ID。 “非活动”用户将根据其 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用户文档。捕获用户名(行)后,我从用户名中删除尾部冒号。