Mr *_*unz 35
如果您拥有服务器的 root 访问权限并且可以为您的用户重新生成 ssh 密钥,以防他们丢失它们
和
你确定一个用户(作为一个人)不会有多个用户帐户,他们需要在 SSH 会话中切换这些帐户(好吧,如果需要,他们也可以打开多个SSH 会话)
和
他们永远不需要“物理”(通过键盘+显示器或通过虚拟机的远程控制台)访问服务器
和
没有用户具有密码门控sudo
访问权限(即他们根本没有 sudo 访问权限,或者具有 sudo 访问权限NOPASSWD
)
我想你会很好的。
我们有许多这样配置的服务器(只有一些帐户需要通过 vmware 远程控制台访问 VM,其他帐户仅通过 SSH 与公钥身份验证连接)。
tel*_*coM 29
这个问题最初提到passwd --delete <username>
哪个是不安全的:这样,加密的密码字段/etc/shadow
将完全为空。
username::...
Run Code Online (Sandbox Code Playgroud)
如果您已将自己配置sshd
为拒绝密码身份验证,那么使用 SSH 是安全的...但是如果您系统上的任何其他服务使用密码身份验证并且未配置为拒绝空密码,那么这将允许无需密码即可访问!你不想要这个。
adduser --disabled-passwd
将生成一个/etc/shadow
条目,其中加密的密码字段只是一个星号,即
username:*:...
Run Code Online (Sandbox Code Playgroud)
这是“永远无法成功输入的加密密码”,即这意味着该帐户有效且技术上允许登录,但它使通过密码进行身份验证不可能成功。因此,如果您的服务器上有任何其他基于密码身份验证的服务,则此用户将被阻止使用。
对于使用此系统中的系统密码文件的任何服务,只有使用标准帐户密码(例如 SSH 密钥)以外的其他内容的身份验证方法才适用于此用户。当您需要一个只能使用 SSH 密钥登录的用户时,这就是您想要的。
如果您需要将现有帐户设置为此状态,可以使用以下命令:
echo 'username:*' | chpasswd -e
Run Code Online (Sandbox Code Playgroud)
加密密码字段有第三个特殊值:adduser --disabled-login
,那么该字段将只包含一个感叹号。
username:!:...
Run Code Online (Sandbox Code Playgroud)
与星号一样,这使得密码验证不可能成功,但它还有一个额外的含义:它为某些管理工具将密码标记为“已锁定”。passwd -l
通过在现有密码散列前面加上感叹号,具有相同的效果,这再次使密码身份验证无法使用。
但这里有一个粗心大意的陷阱: 在 2008 年,passwd
来自旧shadow
包的命令版本被更改为passwd -l
从“锁定帐户”重新定义为“锁定密码”。所述原因是“为了与其他 passwd 版本兼容”。
如果您(像我一样)很久以前就知道了这一点,那可能会令人感到意外。adduser(8)
显然还没有意识到这种区别的事情也无济于事。
为所有身份验证方法禁用帐户的部分实际上是为帐户设置到期日期值 1:usermod --expiredate 1 <username>
。在 2008 年之前,passwd -l
这源自shadow
用于执行此操作的源工具包,除了在密码前加上感叹号前缀 - 但不再这样做。
Debian 软件包更新日志说:
- debian/patches/494_passwd_lock-no_account_lock:恢复之前的 passwd -l 行为(在#389183 中有所改变):只锁定用户密码,不锁定用户帐户。还明确记录差异。这恢复了以前版本的 passwd 和其他实现的常见行为。关闭:#492307
Debian 错误 492307和错误 389183的错误历史记录可能有助于理解这背后的想法。