【问题标题】:How would I disable accounts that have been inactive for 90 days in Linux?如何禁用在 Linux 中 90 天不活动的帐户?
【发布时间】:2017-03-04 10:31:54
【问题描述】:

使用脚本禁用已停用 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

我提出的解决方案会奏效吗?如果是这样,它是如何实现的?有没有更简单的方法来锁定我不知道的非活动帐户?

【问题讨论】:

    标签: linux bash scripting command user-accounts


    【解决方案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}'
    

    然后要么将列表输出到文件,要么直接通过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 {}
    

    【讨论】:

    • 这很好用!将输出重定向到一个文本文件并运行一个while循环来禁用所有用户。谢谢!
    【解决方案2】:

    虽然其他答案有效,但可以通过使用 awk 而不是 tail | grep | awk 使其更简洁

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

    awk 命令检查其中没有表达式“从不登录”的行 (!/Never log/)。

    NR > 1 模拟tail -n +2

    print $1 打印第一列。

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 2018-09-25
      • 2020-07-30
      • 2012-02-11
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多