如何完全禁用帐户?


48

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


3
您是否打算最终重新启用它?系统锁定?如果没有,我将直接删除该帐户。

Answers:


59

根据的正确方法usermod(8)是:

usermod --lock --expiredate 1970-01-02 <username>

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


说明:

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

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

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


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

usermod --unlock --expiredate '' <username>

7
不要使用1970-01-01,因为它将/ etc / shadow到期字段设置为0。shadow(5)不应使用值0,因为它将被解释为没有到期的帐户,或者被解释为到期的帐户。 1970年1月1日。请使用:usermod --lock --expiredate 1970-02-02 <username>
Marcus Maxwell,

4
如果您还可以提供逆转此操作的方法,那就太好了。看起来usermod --unlock --expiredate '' username会做到的。
鲍勃

3
添加到@MarcusMaxwell写的内容:的手册页中usermod说:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
Zero3,2016年

1
为什么单靠--expiredate 1不够?
托马斯·詹森

sudo su username似乎可以使用另一个帐户。
xuhdev

10

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

sudo usermod --lock --shell /bin/nologin username

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


我如何将shell更改为/ bin / nologin。

5
@mattdm这不是一个完整的解决方案,因为用户仍然可以指定要执行的命令。例如ssh username@hostname /bin/bash,无论默认的shell如何,都会向用户显示bash提示。
phunehehe 2011年

4
@phunehehe-您尝试过吗?在日志中,您将得到“由于shell / bin / nologin不存在,所以不允许用户[username]”。
mattdm 2011年

2
据我所知,invalid-shell行为实际上没有记录。另一方面,手册页说如果密码是前导的!在Linux上,该帐户将被视为已锁定,并且实际上不起作用。所以,无论如何,文档和现实都是近似的匹配。:)
mattdm 2011年

2
sudo chsh -s /bin/nologin/etc/passwd手动编辑要好。另外,在某些系统上,它是/sbin/nologin
Mikel

3

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

锁定帐户:

# chage -E 0 username

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

解锁帐户:

# chage -E -1 username

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


3

我没有足够的代表对Legate的答案发表评论,但我想分享一下此答案对另一个用例的帮助:

1.)有问题的帐户是运行应用程序的本地服务帐户,而不是最终用户帐户。

2.)最终用户以自己的身份登录,并sudo /bin/su <user>由于审核跟踪要求(服务帐户不能具有直接登录功能)而成为用户和管理应用程序。

3.)服务帐户必须具有有效的外壳程序(/bin/bash,而不是/sbin/nologin),因为企业调度平台(代理在本地以root身份运行)必须能够su - <user>且不具有su -s /bin/bash <user>完整外壳程序的功能,并且远程运行作业是必需的。适用于包含多个服务器和数据库的较大批处理操作。


所以...

passwd -l <user>
不满足约束,因为公钥身份验证绕过PAM并仍然允许直接登录。

usermod -s /sbin/nologin <user>
不满足约束条件,因为会破坏企业调度程序

usermod --lock --expiredate 1970-01-01 <user>
这是我们的赢家。远程登录已禁用,但root仍然su <user>可以,其他用户也可以,sudo因此调度程序可以正常运行,并且授权的最终用户可以根据需要成为目标服务帐户。

谢谢您的解决方案!


1

要完全删除它,请使用userdel

请注意,如果删除帐户,则存在其用户ID仍将在文件系统中某个位置使用的风险,并且如果新用户以相同的用户ID进入,则新用户将继承这些文件的所有权。

您可能想要更改已删除用户拥有的所有文件的所有者。

如果您想稍后再添加该用户,请将其行/etc/passwd(和在Solaris上/etc/shadow)保存到诸如的临时文件中/etc/passwd_deleted

这样,当您将其添加回去时,您可以使用相同的用户ID和相同的密码(在上述文件之一中加密)

免责声明:我是自己学习UNIX的,因此,如果有更好的方法来临时禁用用户,我不会感到惊讶。实际上,我什至不知道您在谈论什么私钥/公钥。另外,我确定有一个find命令可用于使用该所有者userid查找文件


1
谷歌authorized_keys或尝试阅读此eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html基本上不用密码,而是将publuc密钥放在该文件中,当您使用ssh连接时,您将自动登录如果一个公共用户与您当前的私钥匹配

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.