我们假设如下。 我们有一台可以通过SSH访问的服务器。 /etc/passwd中有一个用户有一个有效的loginshell(例如/bin/bash ,而不是像/bin/false这样的无效的)。
此用户在/etc/shadow的第二个(密码)字段中有一个星号( * )。 如果他的~/.ssh/文件夹中没有ssh密钥,那么这个用户可以通过SSHlogin吗?
或者,稍微改写一下这个问题:当/etc/shadow的密码字段中有*时,许多在线指南推荐禁用loginshell的原因是什么?
在/etc/shadow散列密码的位置处的*会有效地禁用所有基于密码的login,因为没有用户input会导致散列值为* 。 但用户仍然可以用他/她的ssh密钥login。
使用*而不是使用感叹号的区别! 是后者在PAM中表示一个locking的帐户 ,这取决于你的sshdconfiguration,也将禁用基于密码的login。
设置无效shell的原因只是为了防止交互式login会话(无论是否设置了帐户密码),并阻止sudo su - user和类似的工作。