如果 UNIX 用户通过 SSH 访问服务器,并且我们只想允许 pubkey 登录,是否还有其他我应该关心的项目需要添加到此列表中?
- 允许服务器上的文件
pubkey login
。sshd_config
- 默认密码的注意事项,例如“!”或者“*”
答案1
如果能告诉我们您需要什么 SSH 服务器以及什么(一组)Unix 系统,那就太好了。
!
当您在或(用于读取这些条目)中看到它们时,和*
不是密码。/etc/passwd
/etc/shadow
getent
它们是表示帐户是否有密码以及是否被锁定的标记。
这是一个重要的区别,取决于 PAM 的配置和版本以及发行版,如果你使用的是 Linux。如果锁定,您不太可能被允许登录,但另一方面,它可能在旧系统上开箱即用(至少这是我的经验)。
您可以使用(作为超级用户)passwd -l <name>
锁定帐户 ( !
) 或passwd -d <name>
从中删除密码 ( *
),您也可以将两者结合起来,这将简单地确保删除任何现有密码:passwd -dl <name>
。
你没有说,但假设 OpenSSH /etc/ssh/sshd_config
(路径可能有所不同)中的相关指令是:
HostKey ...
服务器必须有一个主机密钥或者 RSA2 或 DSA(更现代的实现也添加了两个椭圆曲线实现)。 RSA1 早已被所有常见的 SSH 服务器实现所放弃。
然后:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
我还始终建议设置/etc/sudoers
并完全禁止root
通过 SSH 登录 ( PermitRootLogin no
)。但是,当磁盘已满并且您的非特权sudo
成员无法写入磁盘时root
(由于保留空间),这种更安全的设置可能会有一个小缺点。所以YMMV。
还有两条建议
分配一个组来限制 SSH 访问
创建一个组ssh-users
(或您喜欢的任何名称)并在 中设置相应的指令sshd_config
。root
根据您根据上述信息选择的策略,确保该组是否是该组的成员。
AllowGroups ssh-users
分配一个组来限制用户仅有的SFTP访问
接下来sshd_config
将确保用户无法逃脱/home
并且某些功能会被禁用。
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
结论
所以,是的,如果在 Linux 上,则必须添加 PAM 作为考虑因素。
还包括是否允许代理转发或将其留给您的用户。
最后但并非最不重要的一点是是否允许它们转发端口或 X11 连接。尤其是端口可能是不可取的,因为它们允许用户使用您的服务器作为代理。
该Match
指令还允许您限制用户的连接位置(防火墙或 TCP 包装器也可以做到这一点)。
您是否希望允许您的用户管理密钥,还是希望将其抽象化并使authorized_keys
他们无法直接访问?
当然还有更多方面,但它们大多处于更细粒度的细节水平,因此是上述要点的变体。
答案2
无论用户想要什么,都要考虑有关密码复杂性的任何策略。如果唯一的访问是通过 SSH并且PasswordAuthentication
位于no
sshd_config
,那么密码是什么并不重要。另请注意,中的条目shadow
!
是加密密码,因此和的值*
不是密码- 但字符串不是有效的加密值,从而阻止基于密码的登录。
答案3
假设您正在运行类似于 RHEL/CentOS w/ OpenSSH 的系统,这些是我在无密码时通常会执行的操作:
- 配置 sshd_config 仅接受 pubkey 身份验证 (
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - 将所有现有用户设置为无效密码 (
chpasswd -e 'pubkey!!' <username>
) - 删除所有现有用户的密码过期 (
chage -M -1 <username>
) - 如果使用 sudo,请确保所有用户规范都标记为 NOPASSWD(例如
%wheel ALL=(ALL) NOPASSWD: ALL
) - 确保您的用户创建过程将满足这些要求(例如
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
)
在锁定密码访问之前,请双重确保您能够通过 pubkey 成功进行身份验证。确保您的 /home 分区不在网络挂载上(或任何其他可能并不总是可用的分区)。没有什么比因为无法访问您的公钥而无法访问您的服务器更糟糕的了。如果系统是无头系统,请确保您有某种方法可以在紧急情况下快速直接访问控制台(KVM、虚拟控制台、急救车等)。
话虽如此,我会考虑为任何具有完全 sudo 访问权限的人的帐户设置密码,并配置 sudoers 以要求他们提供密码。如果其他一切都按照上面配置,他们仍然无法使用此密码登录服务器,但它会给你一点额外的保护,防止有人坐在命令提示符下做“坏事(tm)” 。
答案4
如果这是 UNIX (HP UX) 计算机而不是 Linux,那么您需要将rcommand
其添加到 sshd 帐户下的 pam.conf 中。
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
否则,当您尝试 ssh 进入计算机时,您将收到密码提示,而该提示将不会出现。