我想知道是否要从远程生产服务器中删除编译器工具( gcc
,, ...),主要是为了安全目的。make
背景:
服务器在 Linux 上运行 Web 应用程序。考虑 Apache jailed。否则,只有 OpenSSHd 面向公共网络。当然,jail 内没有编译器,所以这是关于任何 jail 之外的实际操作系统。
以下是我个人目前为止的赞成/反对意见(关于删除):
优点:
- 我一直在阅读一些建议,如果攻击者获得非特权用户权限,则删除编译器工具以抑制从主机内部自定义构建木马等。
缺点:
- 无论如何,我不能没有 Perl/Python 和可以用这样的脚本语言编写的木马/任何东西,所以为什么要费心删除 gcc 等。
- 需要直接在服务器上从源代码构建新的 Linux 内核以及一些安全工具,因为服务器以 64 位模式运行,并且(据我所知)由于缺少另一个 64 位硬件系统,我无法在本地/其他地方(交叉)编译。
好的,我想问您以下问题:
(a)我的正反方评估正确吗?
(b) 您是否知道删除所有编译器工具的其他利弊?它们是否更重要?
(c) 如果给定的 PRO 语句成立,我应该将哪些二进制文件视为危险文件?仅gcc
,还是make
,还是其他?我应该删除它们附带的所有软件包吗?
(d) 当不需要这些二进制文件时,将它们移动到只有 root 可以访问的目录是否可行?或者,如果我每次都“scp 它们”,是否会提高安全性?
谢谢你!
答案1
许多人删除编译器和编译工具,因为从理论上讲它们可以用于漏洞利用。我认为这已经过时了。我最近的经验是,如果他们能进入,他们也能将他们的工具带进去,所以删除编译器、emacs 和类似的垃圾不会给你的整体安全性带来多大帮助。
我会非常小心地在机器上运行哪些服务:任何连接到外部的东西都是潜在的漏洞。否则,我只会删除编译器以保证我的程序员诚实。我认为现在这样做对安全性没有多大帮助。
答案2
“正确行事方式”的常识是将最少的必要组件放在服务器上。如果您不需要编译器,就不要将它们放在服务器上。如果编译器被破解,系统破解者可能会利用它攻击您的系统,并且它会引入更多可能存在漏洞的二进制文件,这些漏洞可能会被利用。
它还释放了服务器上的空间。
话虽如此,我认为有很多小型办公室和小型企业(以及不分析安全性或最佳实践的人)将编译器和额外的工具留在他们的服务器上,并不认为这是什么大问题。
如果您想稳妥行事,请删除它们。安装您预先构建的二进制文件或在另一台机器上自行测试,或者从受信任的存储库安装。它还可以节省一些空间并稍微简化您的备份。
如果它是一台关键的生产服务器,您可能不应该在上面使用未知的测试内核配置。您将在其他硬件上构建它,然后将其迁移过来。我们通常只使用我们所选发行版存储库中适合我们平台的“足够好”的内核,因此在我们的案例中无需重新编译。