设置SSH的公钥身份验证后,是否应该删除用户的密码?


19

最好将公用密钥用于SSH。所以我sshd_configPasswordAuthentication no

有些用户从未登录过,例如,带shell的sftp用户/usr/sbin/nologin。或系统帐户。

因此,我可以使用创建没有密码的用户adduser gary --shell /usr/sbin/nologin --disabled-password

这是个好主意吗?我没有考虑过后果吗?


3
只要这些不是真实用户的帐户,或者他们不需要密码即可sudo访问(由于完全没有sudo权限,或者通过拥有sudo权限NOPASSWD),因此选择的答案应该合适。我已对该答案进行了编辑,以包含sudo的问题,但同时我想在此将其告知您。
Doktor J

Answers:


35

如果您具有对服务器的超级用户访问权限,并且可以为用户重新生成ssh密钥,以防用户丢失它们

您确定一个用户(作为一个人)将没有多个用户帐户,并且需要在SSH会话的用户帐户之间进行切换(嗯,如果需要,他们还可以打开多个 SSH会话)

他们将永远不需要“物理”访问(通过键盘+监视器或通过VM的远程控制台)访问服务器

没有用户具有密码控制的sudo访问权限(即,他们根本没有sudo访问权限,或者具有的sudo访问权限NOPASSWD

我想你会很好。

我们有许多这样配置的服务器在工作(只有一些帐户需要通过vmware远程控制台访问虚拟机,其他帐户仅需要通过带有pubkey auth的SSH连接)。


9
我还要添加“您知道用户将永远不必从缺少其私有SSH密钥的远程系统访问系统”。而且,“您愿意与遇到您未想到的情况的用户打交道。”
安德鲁·亨利

7
第一个条件是不需要IMO。您的用户应该自己创建密钥。您只需授权他们的公共密钥即可。如果他们松开一个密钥,它们将只生成另一个密钥,而您将替换服务器上的旧密钥。
Christophe Drevet-Droguet '18

1
@AndrewHenle很好,但是,如果sshd有 PasswordAuthentication no问题,那就是另一个问题(用户无论如何都无法登录)。
lonix

1
“从不”是如此长的时间。如果需要,管理员可以轻松地添加密码验证。
海德

2
好吧,这个问题显然与绝对不(并且可能不应该)登录的帐户有关,例如特定服务或仅sftp用户使用的系统帐户。该问题还指出,用户没有登录外壳。对于这些类型的用户,我建议明智地通过密码禁用登录。
Christian Gawron

27

最初提到的这个问题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年,passwdshadow软件包中的命令版本更改为重新定义,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的错误历史记录可能有助于理解其背后的想法。


感谢您的警告...我将编辑问题,因此没有人会犯该错误!
lonix

您的警告是否也适用于我使用的情况 adduser --disabled-passwd-因此,如果某些其他服务允许密码验证,则用户可以不使用密码登录?
lonix

1
不,adduser --disabled-password特别是使该帐户无法成功进行密码身份验证。
telcoM

因为删除密码似乎很无聊,但却很危险,所以我建议将有关密码的段落改为有关密码的段落*,这是人们首先读到的。
曼队长

1
哇,这真是令人讨厌的等待……而且像往常一样,显然存在兼容性问题。它出现在passwd2008 年的源代码中。当您曾经学过然后依赖的东西变得不再如此时,您是否不喜欢它?
telcoM
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.