![AIX 7 - 检查从未使用的用户帐户是否被锁定的命令](https://linux22.com/image/15141/AIX%207%20-%20%E6%A3%80%E6%9F%A5%E4%BB%8E%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%E7%94%A8%E6%88%B7%E5%B8%90%E6%88%B7%E6%98%AF%E5%90%A6%E8%A2%AB%E9%94%81%E5%AE%9A%E7%9A%84%E5%91%BD%E4%BB%A4.png)
在 AIX 7 上,我试图编写一个命令来检查系统上从未登录过的用户帐户并检查它们是否被锁定。如果存在从未登录过的用户帐户且不处于锁定状态,则输出该信息。
另外,我尝试只查询 UID 大于 100 的用户帐户。
我已经成功编写了一个命令来检查 UID 大于 100 的用户列表,但我现在正在努力编写一个命令来检查上次登录/锁定状态:
cat /etc/passwd | awk -F: '$3 > 100 { print $1 }'
我尝试使用“lsuser -a account_locked”和“lsuser -a time_last_login”命令进行实验,但这并不成功。
有人可以帮我吗?
答案1
我会改编一个以前的解决方案进入:
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100'
这将为您提供以下形式的冒号分隔的输出:
#name:account_locked:time_last_login:id
abcdef:false:1517991441:1594
ghijkl:false:1466418488:3430
mnopqr:false:1437508829:1081
stuvwx:false::2393
yz:false::2616
空字段表示没有值(例如最后两个字段中的“account_locked”字段)。我留下了标题行,以便可以看到与数据的相关性,但如果您想跳过它,请调整脚本awk
以跳过第一行:
lsuser -C -a account_locked time_last_login id ALL | awk -F: 'NR > 1 && $4 > 100'
如果您不想在报告中显示 UID,请调整语句awk
以仅打印前三个字段:
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 { print $1":"$2":"$3 }'
最后回答一下哪些账户没有被锁定并且从未登录过的问题:
lsuser -C -a account_locked time_last_login id ALL | awk -F: '$4 > 100 && $2 == "false" && $3 == "" { print $1 }'
如果您确实想从现有命令开始,您可以使用它来生成用户名作为参数lsuser
,然后使用awk
与上面相同的过滤器:
for username in $(awk -F: '$3 > 100 { print $1 }' < /etc/passwd)
do
lsuser -C -a account_locked time_last_login "$username" | awk -F: '$2 == "false" && $3 == "" { print $1 }'
done
AIX 用户名不能包含空格、制表符或换行符,因此只要您的 IFS 变量设置合理,就不会有意外分裂的风险。
答案2
您可以使用此命令获取所有锁定帐户的列表:
lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }'
使用此命令,您可以查看所有用户的最后一次登录并过滤那些从未登录过的用户
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1,"never"; else print $1,$3;}'
对于仅打印从未登录的用户,您可以简化命令:
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'
要获取未记录和锁定的列表,您应该重定向命令和 exec 的结果:
comm -13 file.locked file.notlogged
所以脚本应该是这样的:
lsuser -a account_locked ALL | grep '=true$' | awk '{ print $1 }' >file.locked
lsuser -a time_last_login ALL|awk -F"[= ]" '{ if(int($3)==0) print $1}'>file.notlogged
comm -13 file.locked file.notlogged