如何在Linux中禁用已停用90天的帐户?

时间:2016-10-22 03:36:53

标签: linux bash scripting command user-accounts

处理禁用已停用90天的帐户的脚本。在研究了我的问题几天之后无法找到答案,但我确实在论坛上找到了这个命令:

    lastlog -t 10000 > temp1; lastlog -t 90 > temp2; diff temp1 temp2; rm temp1; rm temp2

此命令输出已处于非活动状态90天的用户。我认为我的问题的解决方案是:

  1. 过滤此命令的输出,以便仅显示用户名(在列表中,每行1个用户名)。

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

  3. 运行for循环,对于文件中的每一行,行的内容(应该只是一个用户名)存储在名为" inactiveUser"的变量中。然后将执行命令 usermod -L $ inactiveUser

  4. 我建议的解决方案是否有效?如果是这样,怎么可能实现呢?是否有更容易的方法来锁定我不知道的非活动帐户?

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式简化:

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}'

然后将列表输出到文件,或者通过usermod循环或while read直接运行xargs

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 {}

答案 1 :(得分:0)

虽然另一个答案有效,但使用awk代替tail | grep | awk

可以更清晰
lastlog -b 90 | awk '!/Never log/ {if (NR > 1) print $1}' |  xargs -I{} usermod -L {}

awk命令会检查没有表达式的行' Never log'在其中(!/Never log/)。

NR > 1模仿tail -n +2

print $1打印第一列。