红帽企业Linux(RHEL)9中OpenSSH最重要的安全性变化之一是将弃用SCP协议。 将有如下改变: 默认情况下,scp命令行工具使用SFTP协议进行文件传输。可以使用新添加的O选项恢复SCP协议的使用。可以在系统上完全禁用SCP协议的使用。如果文件etcsshdisablescp存在,任何使用scp协议的尝试都将失败。 做出这样的改变,是因为SCP协议已有几十年的历史,并且带有多种安全风险和问题,没有直接的解决方案。经常出现新问题(CVE202015778是本文撰写时最新的一个问题,但我们不能确定它是否会是最后一个),而且很难正确修复所有问题,因为经过身份验证的会话的协议本质上是可信任的。 因此,一些RHEL客户希望在其系统中完全禁用SCP协议。同时,我们有SFTP,这是一个定义良好的协议,涵盖了SCP的大多数用例,切换到这个协议是有意义的。 补丁开发和采用 实现该开关的最初补丁是由JakubJelen编写的,他是一名红帽人,多年来一直维护OpenSSH包,对工具包的内部结构非常了解。在2021年,Jelen的补丁被上游接受了,并进行了轻微的调整。从那时起,它已经经历了几个兼容性调整,以更好地匹配SCP行为,正确处理了迄今为止发现的罕见案例。 虽然上游在默认情况下延迟了切换到SFTP协议,但我们决定在RHEL9中完全切换。在主要版本中引入这种性质的变更是一个适当的时机,因为那些迁移到新的主要版本的人对可能出现的不兼容性,已有心理预期。 SCP和SFTP协议之间的差异 我们知道SCP和SFTP协议的行为存在一些差异。例如,复制文件时,SCP实用程序遵循符号链接symlinks,而SFTP不遵循。这一点已在上游得到修复,这些更改已纳入我们的产品中。在glob模式的扩展中也存在差异,但这些不兼容性目前仍将存在。 协议之间的另一个区别在于基于的路径处理的扩展。OpenSSH8。7及更高版本支持一个特殊的SFTP扩展来处理这样的扩展。不过,早期版本不支持此扩展,因此如果使用路径处理,将文件夹从RHEL的新版本复制到旧版本将失败。这种情况下,建议的修复方法是提供绝对路径。 如果此更改影响您的系统,该怎么办 如果此更改影响您的系统,您有几个选项。理想情况下,将遗留系统升级到RHEL的最新版本。如果做不到,可以在必要时使用SCP协议需要使用O选项。 但是如果把这个选项添加到你的脚本中,应该考虑到: SCP协议的安全性低于SFTP协议,并且存在一定的安全风险(CVE202015778就是个例子)。SCP协议将在红帽企业Linux即将发布的主要版本之一中被淘汰。如果目标系统已完全禁用SCP协议,它将不起作用。 使用rsync代替scp实用程序也是可能和可行的。Rsync使用自己的协议进行文件传输,ssh用于传输保护。 如果您想了解更多关于RHEL安全的信息,请点击阅读原文访问红帽产品安全中心。 本文作者:DmitryBelyavskiy,红帽资深软件工程师