如何禁用 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. 过滤此命令的输出,以便仅显示用户名(在列表中,每行 1 个用户名)。

  2. 获取此输出并将其写入文本文件。

  3. 运行 一个 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 打印第一列。