+
95
-

回答

另外 Systemd 也可以

Systemd 提供了大量安全功能,可用于将服务和应用程序彼此隔离,以及与底层操作系统隔离。在很多情况下,systemd提供对 Linux 内核提供的相同机制的轻松访问,这些机制也用于为 Linux 容器创建隔离。为传统应用程序和服务提供容器式隔离的能力非常强大,因为现在可以轻松提高工作负载的安全性和隔离性,而不会产生容器所需的操作影响。值得注意的是,容器采用引发的运营和组织变革确实是健康且值得的。然而,即使在最精通容器的企业中,也有大量传统 Linux 部署将安全性放在首位。正如我们将看到的,这些系统上的工作负载可以从对相应单元文件的一些调整中受益。

一个例子

从 Red Hat Enterprise Linux 8.1 开始,我们添加了一个命令,以便更轻松地参考和检查这些选项的状态:

systemd-analyze security [unit]

此命令生成系统如何利用systemd沙箱的快速快照,还可以查看每个单元的单个设置。这种设计使识别可用选项以及在粒度级别查看其使用情况变得简单。



https.service 的 systemd 沙盒状态快照。

此输出systemd-analyze security显示名称、方便的描述和暴露评级,它展示了每个服务的可用安全设置的消耗,并根据服务的隔离程度生成加权的暴露分数。值得注意的是,此工具并不旨在为系统上运行的代码或应用程序提供安全性的整体视图或意见。仅仅因为httpd.service作为UNSAFE默认安装返回并不意味着该服务不安全。

现在我们知道如何查询单位并查看正在使用的控件,让我们看看将这些应用到一个简单的 Web 服务器。这个通用示例可作为其他服务和应用程序的简单起点。

打开安全选项

首先,创建一个 systemd 插件来添加安全选项。对于 Red Hat Enterprise Linux 8,运行:
# systemctl edit httpd

或者,如果您愿意,可以手动创建/etc/systemd/system/httpd.service.d/security.conf.

无论您访问文件的方式如何,现在添加:

[Service]
ProtectSystem=strict
ProtectHome=yes
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
SystemCallFilter=@system-service
SystemCallErrorNumber=EPERM
NoNewPrivileges=yes
PrivateTmp=yes
对于 Red Hat Enterprise Linux 7,我们可以使用类似的模板:

[Service]
ProtectSystem=full
ProtectHome=yes
PrivateDevices=yes
NoNewPrivileges=yes
PrivateTmp=yes
保存文件并重新启动服务后,该httpd服务将与操作系统的其余部分显着隔离。如果服务受到损害,则突破和随之而来的损坏的可能性会大大降低。

上面的示例是锁定系统上运行的服务、应用程序和单元的一个很好的起点。当然,在将它们推广到整个车队之前,您应该测试这些以确保它们适合您的用例。例如,如果我们想提供来自用户主目录的内容,我们不会包含ProtectHome=yes,而是使用ProtectHome=read-only。另外值得注意的是,将 RHEL 8 中添加的较新选项包含在 RHEL 7 中运行的单元文件中并没有什么坏处。将发出通知消息并忽略该选项。

我们现在可以通过运行来查看正在使用的选项systemd-analyze httpd:


网友回复

我知道答案,我要回答