如何完全禁用帐户?

50 users account-restrictions

如何完全禁用帐户?passwd -l不允许任何人使用密码登录帐户,但您仍然可以通过私钥/公钥登录。我将如何完全禁用该帐户?作为快速修复,我将文件重命名为authorized_keys_lockme. 还有其他方法吗?

Chr*_*urm 62

正确的方法usermod(8)是:

usermod --lock --expiredate 1970-01-02 <username>
Run Code Online (Sandbox Code Playgroud)

(实际上, to 的参数--expiredate可以是格式中当前日期之前的任何日期YYYY-MM-DD。)


解释:

  • --lock锁定用户的密码。但是,仍然可以通过其他方法(例如公钥)登录。

  • --expiredate YYYY-MM-DD在指定日期禁用帐户。根据man shadow 51970-01-01 是一个不明确的值,不应使用。

我已经在我的机器上测试过了。执行此命令后,既不能用密码登录,也不能用公钥登录。


要在以后重新启用该帐户,您可以运行:

usermod --unlock --expiredate '' <username>
Run Code Online (Sandbox Code Playgroud)

  • 不要使用 1970-01-01,因为它会将 /etc/shadow 过期字段设置为 0。 shadow(5) 不应使用值 0,因为它被解释为没有过期的帐户,或过期1970 年 1 月 1 日。请使用: usermod --lock --expiredate 1970-02-02 &lt;username&gt; (7认同)
  • 如果您还可以提供反转此操作的方法,那就太好了。看起来像`usermod --unlock --expiredate '' username` 可以做到。 (5认同)
  • 添加@MarcusMaxwell 所写的内容:`usermod` 的手册页说:`注意:如果您希望锁定帐户(不仅使用密码访问),您还应该将 EXPIRE_DATE 设置为 1。` (3认同)
  • 为什么`--expiredate 1` 本身还不够? (2认同)

mat*_*tdm 10

锁定密码并将外壳更改为/bin/nologin.

sudo usermod --lock --shell /bin/nologin username
Run Code Online (Sandbox Code Playgroud)

(或者更简洁地说,sudo usermod -L -s /bin/nologin username。)

  • @mattdm 这不是一个完整的解决方案,因为用户仍然可以指定要执行的命令。例如,`ssh username@hostname /bin/bash` 将给用户一个 bash 提示,而不管默认的 shell。 (6认同)
  • @phunehehe——你试过了吗?您将在日志中看到“不允许用户 [用户名],因为 shell /bin/nologin 不存在”。 (4认同)
  • 据我所知,实际上没有记录无效外壳行为。另一方面,手册页说,如果密码有前导 !! 在 Linux 上,该帐户将被视为已锁定,这实际上不起作用。所以,你知道,无论如何,文档和现实只是近似匹配。:) (2认同)
  • `sudo chsh -s /bin/nologin` 比手动编辑 `/etc/passwd` 更好。此外,在某些系统上,它是`/sbin/nologin`。 (2认同)

小智 9

这是另一种简单的方法。您可以设置用户帐户过期。这将防止在兼顾基于密码和基于SSH密钥的登录,但并没有触及密码。

要锁定帐户:

# chage -E 0 username
Run Code Online (Sandbox Code Playgroud)

用户帐户“用户名”将在系统上被锁定。要重新启用用户帐户,请执行以下操作。

要解锁帐户:

# chage -E -1 username
Run Code Online (Sandbox Code Playgroud)

用户帐户“username”将在您的系统上使用与以前相同的密码重新启用。“chage”二进制文件是Red Hat Linux 上的shadow-utils包或Debian Linux 上的passwd包的一部分。