![如何关闭 OpenSSH 的 sftp-server 子系统中的只读模式](https://linux22.com/image/717013/%E5%A6%82%E4%BD%95%E5%85%B3%E9%97%AD%20OpenSSH%20%E7%9A%84%20sftp-server%20%E5%AD%90%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E5%8F%AA%E8%AF%BB%E6%A8%A1%E5%BC%8F.png)
我们的 PCI 兼容 CentOS 7 系统最近被 Trustwave 标记为 FAILED,原因是存在标记为 CVE-2017-15906 的 OpenSSH 漏洞,并被告知“OpenSSH sftp-server 允许在只读模式下创建零长度文件”。Trustwave 还表示,升级到至少 OpenSSH 7.6 将解决该问题。
我们正在使用 SFTP,并且配置是默认配置,子系统具有以下值:
Subsystem sftp /usr/libexec/openssh/sftp-server
由于 CentOS 7 尚未有官方更新来将 OpenSSH 7.4 升级到 7.6,因此我尝试参考本指南自行更新软件包:在 CentOS 6 或 7 上升级 OpenSSH。我在这方面是成功的,但是,它有一个很大的问题。我被锁定在 SSH 之外,即使 ssh -vvv 表示密钥被接受,我们的所有密钥都不再起作用。我们在登录后立即被踢出。Google Cloud Support(我们正在使用 Google Cloud CE 实例)认为 7.6 与 CentOS 7 不兼容,并且 RedHat 和 CentOS 尚未推出更新,可能仍在测试和修复错误:
后台支持团队确实回答了我。
他们通过启动自己的 CentOS 7 机器 [并升级 OpenSSH] 重现了这个问题。在将 OpenSSH 升级到 7.6 版后,他们也无法通过 SSH 进入实例。
根据您之前的消息,您是对的。他们也认为问题是由对 PAM 所做的配置更改引起的。事实上,PAM 模块未正确更新。后台技术人员在进行更改之前备份了 /etc/pam.d/sshd,然后他注意到升级后缺少了很多行。他比较了这两个文件。较新版本的 /etc/pam.d/sshd 只有 6 行,而原始文件至少有 19 行。
我想补充一点,OpenSSH 版本 7.6 并不是 RedHat/CentOS 已将其纳入主流稳定版本的更改。这意味着,即使 openSSH 7.6p1 已发布,它尚未在 Redhat(Centos)中处于稳定模式。Redhat 团队仍在努力修复一些错误。
因此目前无法升级到 OpenSSH 7.6。
我还发现,只有当 SFTP 处于只读模式时,才会出现此漏洞。但我不知道如何关闭此模式。我尝试查找不同的资源,但似乎没有具体提到此模式,而只有“他们如何对特定用户启用只读”。由于我使用的是默认 SSH 配置文件,所以我不知道是否默认启用了只读模式。
/etc/ssd/sshd_config
我尝试再次改变子系统部分:
Subsystem sftp internal-sftp
PCI 扫描仍然失败。
我在它下面添加了另一个配置:
Match Group psacln
ChrootDirectory /var/www/vhosts
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
我认为这违背了初衷,因为现在我正在 chrooting 到主 vhosts 文件夹,而不是分配了 vhosts 下文件夹的用户(似乎我只能将 ChrootDirectory 分配给 root 用户拥有的文件夹)。我在这次更改后请求了 PCI 合规性扫描,并在撰写本文时等待结果。
如果有人能告诉我如何有效地禁用 OpenSSH 的 sftp 服务器或 internal-sftp 中的只读模式,我将不胜感激,因为我相信这是我唯一能做的事情来弥补这个漏洞。
谢谢。
答案1
您无法采取任何措施来避免扫描失败。这是因为 Trustwave 只是检查您的 OpenSSH 版本号并报告漏洞,就好像它确实存在一样,而不管您的实际系统配置如何。
对于这一点,您需要对调查结果提出异议,并解释您已采取的缓解措施。