Answers:
根据的正确方法usermod(8)
是:
usermod --lock --expiredate 1970-01-02 <username>
(实际上,to的参数--expiredate
可以是格式为当前日期之前的任何日期YYYY-MM-DD
。)
说明:
--lock
锁定用户密码。但是,仍然可以通过其他方法(例如,公钥)登录。
--expiredate YYYY-MM-DD
在指定的日期禁用该帐户。根据man shadow 5
1970-01-01是一个不明确的值,不得使用。
我已经在我的机器上测试过了。执行此命令后,无法使用密码登录也不能使用公钥登录。
要在以后重新启用该帐户,您可以运行:
usermod --unlock --expiredate '' <username>
usermod --unlock --expiredate '' username
会做到的。
usermod
说:Note: if you wish to lock the account (not only access with a password), you should also set the EXPIRE_DATE to 1.
--expiredate 1
不够?
sudo su username
似乎可以使用另一个帐户。
锁定密码并将外壳程序更改为/bin/nologin
。
sudo usermod --lock --shell /bin/nologin username
(或更简洁地说,sudo usermod -L -s /bin/nologin username
。)
ssh username@hostname /bin/bash
,无论默认的shell如何,都会向用户显示bash提示。
sudo chsh -s /bin/nologin
比/etc/passwd
手动编辑要好。另外,在某些系统上,它是/sbin/nologin
。
我没有足够的代表对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
因此调度程序可以正常运行,并且授权的最终用户可以根据需要成为目标服务帐户。
谢谢您的解决方案!
要完全删除它,请使用userdel
。
请注意,如果删除帐户,则存在其用户ID仍将在文件系统中某个位置使用的风险,并且如果新用户以相同的用户ID进入,则新用户将继承这些文件的所有权。
您可能想要更改已删除用户拥有的所有文件的所有者。
如果您想稍后再添加该用户,请将其行/etc/passwd
(和在Solaris上/etc/shadow
)保存到诸如的临时文件中/etc/passwd_deleted
。
这样,当您将其添加回去时,您可以使用相同的用户ID和相同的密码(在上述文件之一中加密)
免责声明:我是自己学习UNIX的,因此,如果有更好的方法来临时禁用用户,我不会感到惊讶。实际上,我什至不知道您在谈论什么私钥/公钥。另外,我确定有一个find
命令可用于使用该所有者userid查找文件
有没有人尝试通过ssh_config来做到这一点?也许这可以帮助http://www.techrepublic.com/blog/opensource/set-up-user-accounts-quickly-and-securely/86
另外,还要确保将PasswordAuthentication设置为no,以强制所有登录使用公钥。