etc_security_lastlog 的可视化

etc_security_lastlog 的可视化

我正在寻找一种简单的方法来可视化 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用户文档。捕获用户名(行)后,我从用户名中删除尾部冒号。

相关内容