在设置虚拟服务器实例期间,我需要使用 构建一些应用程序make
。安装后是否存在任何安全风险make
?或者我应该在部署实例之前清理它吗?
我还在gcc
服务器上安装了编译器,用于在部署之前构建应用程序。
答案1
有些人会认为,生产机器上安装开发工具会让攻击者更容易得手。然而,这对攻击者来说只是一个小小的障碍,任何其他支持或反对安装开发工具的论据都更有说服力。
如果攻击者能够渗透到系统,以至于他们可以调用服务器上存在的任何工具,那么您已经面临严重的安全漏洞。如果没有开发工具,还有许多其他方法可以将二进制数据写入文件,然后在该文件上运行 chmod。此时想要在系统上使用自定义构建可执行文件的攻击者也可以在自己的机器上构建该文件并将其传输到服务器。
还有其他更重要的事情需要注意。如果已安装的软件包含安全漏洞,则有几种方式可能将其暴露给攻击者:
- 该软件包可能包含 suid 或 sgid 可执行文件。
- 该软件包可以启动系统上的服务。
- 该软件包可以安装在特定情况下自动调用的脚本(包括 cron 作业,但脚本也可以由其他事件调用,例如当网络接口的状态发生变化或用户登录时)。
- 该软件包可以安装设备 inode。
我不会期望开发工具能够与上述任何一个相匹配,因此不是一个高风险的软件包。
如果您的工作流程中需要使用开发工具,那么您首先必须确定这些工作流程是否合理,如果是,您就应该安装开发工具。
如果您发现服务器上确实不需要这些工具,则应该避免安装它们,原因如下:
- 节省服务器和备份的磁盘空间。
- 安装的软件越少,跟踪依赖关系就越容易。
- 如果您不需要该软件包,那么安装它所带来的额外安全风险是没有意义的,即使这种安全风险很小。
如果您出于安全原因决定不允许非特权用户将自己的可执行文件放在服务器上,那么您应该避免的不是开发工具,而是那些用户可写入的目录(这些目录位于具有执行权限的文件系统上)。即使在这些情况下,开发工具可能仍然有用,但可能性不大。
答案2
make
是一个与 有不同语法的 shell bash
。
像 这样的编译器gcc
功能强大,awk
配置了一组标准awk
不支持的替换。它不符合 POSIX 标准sort
,或者cat
在输出中注入垃圾。它是一个交互式文本编辑器(想想vi
),配置为在启动时进行一些编辑,然后在显示用户界面之前退出。
它们本身并没有什么不安全之处,它们不会使您的机器比具有 bash++ cat
shell 重定向的机器更不安全。
答案3
make
本身就很好。make
仅仅是一个依赖项跟踪和自动化框架。但它通常与编译器一起使用,最好不要在生产系统上使用编译器,因为它们完全没有必要。所有不需要的包也是如此,无论是共享库、解释器等。安装在生产系统上的软件应该受到严格控制,只应存在应用程序所需的包。
您应该在构建服务器上构建您的应用程序,打包它,然后将二进制包部署到您的生产系统。
注意:本机打包工具吮吸。甚至不必费心去理解它们。相反,看看 Jordan Sissel 的fpm
.它使包装成为一种绝对的乐趣。
答案4
您问的是是否make
应该安装在生产服务器上,但我真正的问题是:谁有权访问该生产服务器以及您采取了哪些安全措施来应对入侵?如果make
没有安装但有人获得root
访问权限,猜猜会发生什么?他们可以手动安装make
任何他们想要的东西。
计算机安全的严酷现实是,尽管您想阻止不必要的访问,但痴迷于阻止访问并不像以下因素那么重要:
- 谁有权访问服务器?
- 遭遇入侵后你能做什么来恢复?
这完全取决于你从事什么类型的工作。我主要在网络服务器领域工作,我的态度基本上是,任何从我这里获得生产服务器访问权限的人都需要证明自己的技能、知识和成熟度。就是这样。有时需要几天时间。有时需要几个月。但基本上,生产服务器的最佳安全防线是控制访问权限,以及我们为强化服务器所做的其他各种事情。