如何禁用在Linux中已停用90天的帐户?
问题描述:
使用脚本禁用90天内不活动的帐户。无法真正找到研究我的问题了几天后一个答案,但我做了一个论坛,发现这个命令:如何禁用在Linux中已停用90天的帐户?
lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2
此命令输出处于非活动状态90天的用户。我认为,解决我的问题将是:
筛选该命令将显示所以只有在用户名的输出(在列表中,每行1名)。
取出此输出并将其写入文本文件。
为文件中的每一行运行一个for循环,该行的内容(应该只是一个用户名)存储在名为“inactiveUser”的变量中。然后执行命令usermod -L -L inactiveUser。
我的建议解决方案是否可行?如果是这样,那怎么能实现呢?是否有更简单的方法来锁定我不知道的非活动帐户?
答
你可以简化这个:
lastlog -b 90
直接列出谁没有在过去90天内曾登录的用户。
但是,它也有一个标题行,并列出大量系统用户。
使用tail
跳过标题行:
lastlog -b 90 | tail -n+2
那么你可以使用grep
过滤掉系统用户:
lastlog -b 90 | tail -n+2 | grep -v 'Never log'
虽然也许有找到真正的,非一个更安全的方式系统用户,例如:
cd /home; find * -maxdepth 0 -type d
除了问题,你可以得到只是用户名不与awk
:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}'
那么无论输出列表保存到文件,或者直接通过while read
环或xargs
运行usermod
:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' |
xargs -I{} usermod -L {}
或许你也应该登录你做了什么:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print $1}' |
tee -a ~/usermod-L.log | xargs -I{} usermod -L {}
答
虽然其他答案的作品,它可以使得更清洁通过使用awk
代替tail | grep | awk
lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print $1}' | xargs -I{} usermod -L {}
对于不具有表情纹的awk
命令checkes在它(!/Never log/
)“从不记录”。
NR > 1
模拟tail -n +2
。
print $1
打印的第一列。
这很好用!将输出重定向到文本文件并运行while循环以禁用所有用户。谢谢! – Gabbo
不客气:) – webb