如何禁用 Linux 中 90 天不活动的帐户?
How would I disable accounts that have been inactive for 90 days in Linux?
正在编写一个脚本来禁用已停用 90 天的帐户。在研究了我的问题几天后无法真正找到答案,但我确实在论坛上找到了这个命令:
lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2
此命令输出已处于非活动状态 90 天的用户。我认为我的问题的解决方案是:
过滤此命令的输出,以便仅显示用户名(在列表中,每行 1 个用户名)。
获取此输出并将其写入文本文件。
运行 一个 for 循环,对于文件中的每一行,该行的内容(应该只是一个用户名)存储在一个名为 [=34 的变量中=].然后会执行命令usermod -L $inactiveUser
我提出的解决方案行得通吗?如果是这样,它是如何实现的?有没有更简单的方法来锁定我不知道的非活动帐户?
您可以通过以下方式简化此操作:
lastlog -b 90
直接列出过去 90 天内未登录的用户。
但是,它还有一个 header 行,并列出了很多系统用户。
使用tail
跳过header行:
lastlog -b 90 | tail -n+2
那你可以用grep
过滤掉系统用户:
lastlog -b 90 | tail -n+2 | grep -v 'Never log'
虽然也许有更安全的方法来找到真正的 non-system 用户,例如:
cd /home; find * -maxdepth 0 -type d
撇开这个问题不谈,您可以使用 awk
:
获取用户名
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }'
然后将列表输出到文件,或者通过 while read
循环或 xargs
:
直接 运行 usermod
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }' |
xargs -I{} usermod -L {}
也许您还应该记录您所做的事情:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }' |
tee -a ~/usermod-L.log | xargs -I{} usermod -L {}
虽然其他答案有效,但使用 awk
而不是 tail | grep | awk
可以使其更清晰
lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print }' | xargs -I{} usermod -L {}
awk
命令检查其中没有表达式 'Never log' (!/Never log/
) 的行。
NR > 1
模拟 tail -n +2
.
print
打印第一列。
正在编写一个脚本来禁用已停用 90 天的帐户。在研究了我的问题几天后无法真正找到答案,但我确实在论坛上找到了这个命令:
lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2
此命令输出已处于非活动状态 90 天的用户。我认为我的问题的解决方案是:
过滤此命令的输出,以便仅显示用户名(在列表中,每行 1 个用户名)。
获取此输出并将其写入文本文件。
运行 一个 for 循环,对于文件中的每一行,该行的内容(应该只是一个用户名)存储在一个名为 [=34 的变量中=].然后会执行命令usermod -L $inactiveUser
我提出的解决方案行得通吗?如果是这样,它是如何实现的?有没有更简单的方法来锁定我不知道的非活动帐户?
您可以通过以下方式简化此操作:
lastlog -b 90
直接列出过去 90 天内未登录的用户。
但是,它还有一个 header 行,并列出了很多系统用户。
使用tail
跳过header行:
lastlog -b 90 | tail -n+2
那你可以用grep
过滤掉系统用户:
lastlog -b 90 | tail -n+2 | grep -v 'Never log'
虽然也许有更安全的方法来找到真正的 non-system 用户,例如:
cd /home; find * -maxdepth 0 -type d
撇开这个问题不谈,您可以使用 awk
:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }'
然后将列表输出到文件,或者通过 while read
循环或 xargs
:
usermod
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }' |
xargs -I{} usermod -L {}
也许您还应该记录您所做的事情:
lastlog -b 90 | tail -n+2 | grep -v 'Never log' | awk '{print }' |
tee -a ~/usermod-L.log | xargs -I{} usermod -L {}
虽然其他答案有效,但使用 awk
而不是 tail | grep | awk
lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print }' | xargs -I{} usermod -L {}
awk
命令检查其中没有表达式 'Never log' (!/Never log/
) 的行。
NR > 1
模拟 tail -n +2
.
print
打印第一列。