目标:
维护前同事的系统,我想锁定所有密码登录以便只允许基于 ssh 密钥的登录。
信息:
CentOS 6.5 系统不提供任何基于网络的身份验证功能(没有 Kerberos、ldap、gssapi 等,
/etc/nsswitch.conf
只知道“文件”)。/etc/passwd
显示我期望的所有非系统用户。
问题:
/etc/shadow
只显示一半。锁定他们的密码passwd -l username
有效。现在我想查看其他用户的条目,并且他们的密码也被锁定了。
审判:
为其中一位“缺失”用户执行了passwd -l username
,系统返回passwd: Success
。但我仍然在阴影中看不到此用户的条目。有什么想法吗?
答案1
测试更多
如果操作系统不知道密码哈希值、有效期等数据,则明确的测试是:
getent shadow thatuser
如果操作系统可以通过任何方式(ldap 或其他方式)获取该数据,则会有一行非空的输出:
getent shadow thatuser
thatuser:x:::::::
如果我使用文本编辑器从中删除一行/etc/shadow
,则没有输出。
锁定密码
无论是否存在影子线,您提议的密码锁定都会有效。不存在影子线意味着用户无法使用密码登录。
重新填充阴影
前任管理员可能通过手动编辑创建了一些用户/etc/passwd
。这看起来很丑陋,但这不是错误;操作系统旨在处理这种情况。重新填充阴影的快速方法是循环遍历所有密码条目这些命令:
chage -m 0 thatuser
这将创建缺失的/etc/shadow
行,如下所示login:x::0:::::
。副作用是所有现有/etc/shadow
行将重置“连续更改密码之间的最短天数”为零。但这不是经常使用的设置,您可能知道是否需要它(公司政策等)。
答案2
我认为您应该能够通过在全局 ssh 配置(通常在 /etc/ssh/sshd_config 中)中设置以下配置参数来禁止所有密码登录并仅允许基于密钥的身份验证:
PubkeyAuthentication yes
PasswordAuthentication no
配置文件发生任何更改后,您都需要重新加载 sshd 服务。