Red Hat Training
A Red Hat training course is available for RHEL 8
1.6. 使 OpenSSH 更安全
以下提示可帮助您在使用 OpenSSH 时提高安全性。请注意,/etc/ssh/sshd_config
OpenSSH 配置文件的更改需要重新载入 sshd
守护进程才能生效:
# systemctl reload sshd
大多数安全强化配置更改会降低与不支持最新算法或密码套件的客户端的兼容性。
禁用不安全的连接协议
- 要使 SSH 生效,防止使用由 OpenSSH 套件替代的不安全连接协议。否则,用户的密码可能只会在一个会话中被 SSH 保护,可能会在以后使用 Telnet 登录时被捕获。因此,请考虑禁用不安全的协议,如 telnet、rsh、rlogin 和 ftp。
启用基于密钥的身份验证并禁用基于密码的身份验证
禁用密码验证并只允许密钥对可减少安全攻击面,还可节省用户的时间。在客户端中,使用
ssh-keygen
工具生成密钥对,并使用ssh-copy-id
工具从 OpenSSH 服务器的客户端复制公钥。要在 OpenSSH 服务器中禁用基于密码的验证,请编辑/etc/ssh/sshd_config
,并将PasswordAuthentication
选项改为no
:PasswordAuthentication no
密钥类型
虽然
ssh-keygen
命令会默认生成一组 RSA 密钥,但您可以使用-t
选项指定它生成 ECDSA 或者 Ed25519 密钥。ECDSA(Elliptic Curve Digital Signature Algorithm)能够在同等的对称密钥强度下,提供比 RSA 更好的性能。它还会生成较短的密钥。Ed25519 公钥算法是 一种变形的 Edwards 曲线的实现,其比 RSA、DSA 和 ECDSA 更安全,也更快。如果没有这些密钥,OpenSSH 会自动创建 RSA、ECDSA 和 Ed25519 服务器主机密钥。要在 RHEL 中配置主机密钥创建,请使用
sshd-keygen@.service
实例化服务。例如,禁用自动创建 RSA 密钥类型:# systemctl mask sshd-keygen@rsa.service
注意在启用了
cloud-init
的镜像中,ssh-keygen
单元会自动禁用。这是因为ssh-keygen 模板
服务可能会干扰cloud-init
工具,并导致主机密钥生成问题。要防止这些问题etc/systemd/system/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf
drop-in 配置文件禁用ssh-keygen
单元(如果cloud-init
正在运行)。要排除 SSH 连接的特定密钥类型,注释
/etc/ssh/sshd_config
中的相关行,并重新载入sshd
服务。例如,只允许 Ed25519 主机密钥:# HostKey /etc/ssh/ssh_host_rsa_key # HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
非默认端口
默认情况下,
sshd
守护进程侦听 TCP 端口 22。更改端口可降低系统因自动网络扫描而受到攻击的风险,从而提高安全性。您可以使用/etc/ssh/sshd_config
配置文件中的Port
指令指定端口。您还必须更新默认 SELinux 策略以允许使用非默认端口。要做到这一点,使用
policycoreutils-python-utils
软件包中的semanage
工具:# semanage port -a -t ssh_port_t -p tcp port_number
另外,更新
firewalld
配置:# firewall-cmd --add-port port_number/tcp # firewall-cmd --runtime-to-permanent
在前面的命令中,将 port_number 替换为使用
Port
指令指定的新端口号。
没有 root 登录
如果您的特定用例不需要作为 root 用户登录,应该考虑在
/etc/ssh/sshd_config
文件中将PermitRootLogin
配置指令设置为no
。通过禁止以 root 用户身份登录,管理员可以审核哪些用户在以普通用户身份登录后运行了哪些特权命令,然后获得了 root 权限。或者,将
PermitRootLogin
设置为prohibit-password
:PermitRootLogin prohibit-password
这强制使用基于密钥的身份验证,而不是使用密码以 root 身份登录,并通过防止暴力攻击来降低风险。
使用 X 安全性扩展
Red Hat Enterprise Linux 客户端中的 X 服务器不提供 X 安全性扩展。因此,当连接到带有 X11 转发的不可信 SSH 服务器时,客户端无法请求另一个安全层。大多数应用程序都无法在启用此扩展时运行。
默认情况下,
/etc/ssh/ssh_config.d/05-redhat.conf
文件中的ForwardX 11Trusted
选项被设置为yes
,且ssh -X remote_machine
(不信任主机)和ssh -Y remote_machine
(可信主机)命令之间没有区别。如果您的场景根本不需要 X11 转发功能,请将
/etc/ssh/sshd_config
配置文件中的X11Forwarding
指令设置为no
。
限制对特定用户、组群或者域的访问
/etc/ssh/sshd_config
配置文件服务器中的AllowUsers
和AllowGroups
指令可让您只允许某些用户、域或组连接到您的 OpenSSH 服务器。您可以组合AllowUsers
和Allow Groups
来更准确地限制访问,例如:AllowUsers *@192.168.1.*,*@10.0.0.*,!*@192.168.1.2 AllowGroups example-group
以上配置行接受来自 192.168.1.* 和 10.0.0.* 子网中所有用户的连接,但 192.168.1.2 地址的系统除外。所有用户都必须在
example-group
组中。OpenSSH 服务器拒绝所有其他连接。请注意,使用允许列表(以 Allow 开头的指令)比使用阻止列表(以 Deny 开始的选项)更安全,因为允许列表也会阻止新的未授权的用户或组。
更改系统范围的加密策略
OpenSSH 使用 RHEL 系统范围的加密策略,默认的系统范围的加密策略级别为当前威胁模型提供了安全设置。要使您的加密设置更严格,请更改当前的策略级别:
# update-crypto-policies --set FUTURE Setting system policy to FUTURE
-
要为您的 OpenSSH 服务器选择不使用系统范围内的加密策略,请对
/etc/sysconfig/sshd
文件中的CRYPTO_POLICY=
变量这一行取消注释。更改后,您在/etc/ssh/sshd_config
文件中的Ciphers
、MAC
、KexAlgoritms
和GSSAPIKexAlgorithms
部分指定的值不会被覆盖。请注意,此任务需要在配置加密选项方面具有深厚的专业知识。 - 如需更多信息,请参阅安全强化中的使用系统范围的加密策略。
其他资源
-
sshd_config(5)
、ssh-keygen(1)
、crypto-policies(7)
和update-crypto-policies(8)
手册页。