Answers:
如果您具有对服务器的超级用户访问权限,并且可以为用户重新生成ssh密钥,以防用户丢失它们
和
您确定一个用户(作为一个人)将没有多个用户帐户,并且需要在SSH会话的用户帐户之间进行切换(嗯,如果需要,他们还可以打开多个 SSH会话)
和
他们将永远不需要“物理”访问(通过键盘+监视器或通过VM的远程控制台)访问服务器
和
没有用户具有密码控制的sudo
访问权限(即,他们根本没有sudo访问权限,或者具有的sudo访问权限NOPASSWD
)
我想你会很好。
我们有许多这样配置的服务器在工作(只有一些帐户需要通过vmware远程控制台访问虚拟机,其他帐户仅需要通过带有pubkey auth的SSH连接)。
PasswordAuthentication no
问题,那就是另一个问题(用户无论如何都无法登录)。
最初提到的这个问题passwd --delete <username>
是不安全的:这样,其中的加密密码字段/etc/shadow
将完全为空。
username::...
如果您已配置sshd
为拒绝密码身份验证,那么使用SSH是安全的...但是,如果系统上的任何其他服务都使用密码身份验证,并且未配置为拒绝空密码,则允许无密码访问!你不要这个
adduser --disabled-passwd
将产生一个/etc/shadow
条目,其中加密的密码字段只是一个星号,即
username:*:...
这是“永远无法成功输入的加密密码”,即,这意味着该帐户有效,并且在技术上允许登录,但是这使得通过密码进行的身份验证无法成功。因此,如果服务器上还有任何其他基于密码身份验证的服务,则该用户将无法使用它们。
对于使用此系统中系统密码文件的任何服务,只有使用标准帐户密码(例如SSH密钥)以外的内容的身份验证方法才适用于该用户。当您需要只能使用SSH密钥登录的用户时,这就是您想要的。
如果需要将现有帐户设置为此状态,则可以使用以下命令:
echo 'username:*' | chpasswd -e
加密密码字段有第三个特殊值:adduser --disabled-login
,该字段将仅包含一个感叹号。
username:!:...
像星号一样,这使密码身份验证无法成功进行,但是它还有其他含义:对于某些管理工具,它会将密码标记为“锁定”。passwd -l
通过在现有的密码哈希前面加上一个感叹号,可以达到几乎相同的效果,这又使密码身份验证无法使用。
但是这里有个陷阱: 2008年,passwd
旧shadow
软件包中的命令版本更改为重新定义,passwd -l
从“锁定帐户”改为“锁定密码”。声明的原因是“与其他passwd版本兼容”。
如果您(像我一样)很久以前就知道了这一点,那么它可能会令人讨厌。adduser(8)
显然还没有意识到这一区别的问题也无济于事。
禁用该帐户的所有身份验证方法的部分实际上是为该帐户设置了过期日期值1 usermod --expiredate 1 <username>
。在2008年之前,除了用于在密码前加上感叹号之外,它还passwd -l
来自shadow
用于执行此操作的源工具包-但现在不再这样做。
Debian软件包changelog说:
- debian / patches / 494_passwd_lock-no_account_lock:恢复passwd -l的先前行为(在#389183中更改):仅锁定用户的密码,而不锁定用户的帐户。还应明确记录差异。这将恢复早期版本的passwd和其他实现常见的行为。关闭:#492307
Debian错误492307和错误389183的错误历史记录可能有助于理解其背后的想法。
adduser --disabled-passwd
-因此,如果某些其他服务允许密码验证,则用户可以不使用密码登录?
adduser --disabled-password
特别是使该帐户无法成功进行密码身份验证。
*
,这是人们首先读到的。
passwd
2008 年的源代码中。当您曾经学过然后依赖的东西变得不再如此时,您是否不喜欢它?
sudo
访问(由于完全没有sudo权限,或者通过拥有sudo权限NOPASSWD
),因此选择的答案应该合适。我已对该答案进行了编辑,以包含sudo的问题,但同时我想在此将其告知您。