systemd服务沙盒和安全强化101

systemd使服务能够与整体硬化,并从Linux内核的沙盒功能的套件上运行。以下是如何让你的系统,以及如何去强化他们的安全上运行的服务的快速安全审查。

Linux内核可以过滤和限制访问文件系统,网络设备,核心能力和系统调用(系统调用),等等。在这篇文章中,我将重点放在沙盒访问文件系统作为一个简单的介绍systemd服务安全强化。

systemd在240版本中添加服务安全审查工具(在发布)。你需要为运行或更高版本沿着按照本文。yabo亚博体育下载

安全概述systemd服务

跑过systemd,分析安全命令来获取所有的安全审计您systemd服务。它会列出每个服务单位,让他们从0-10安全风险分数等级。较低的分数更安全。

单位曝光谓词atd.service 9.6不安全crond.service 9.6不安全httpd.service 9.2不安全mariadb.service 8.8 EXPOSED sshd.service 9.6不安全

曝光得分完全是基于安全的服务的使用由提供的功能systemd。它没有考虑安全功能内置到程序或类似安全增强型Linux(SELinux)的或AppArmor的访问控制策略实施。也不以任何方式得分评估程序或者其配置的风险因素。

在上面的例子中,你会发现,任务调度守护像ATDcrond的和远程终端访问守护sshd的被认为是不安全的。这是因为这些服务被设计为允许任意命令的执行不受限制准确的评估。你可能想,除非你需要他们完全禁用这些服务。

你也可以看到,的httpd(Apache HTTP服务器)服务有一个稍微较低的分数。这是因为Fedora Linux系统,这是我分配使用,其船舶的httpd有一些服务单位systemd安全指令默认情况下启用。让我们看看接下来该怎么复习服务的安全指令。

分析服务的安全指令

你应该通过分析暴露于公共互联网或处理不可信/用户提供的数据任何服务启动。这些服务将有利于系统的安全性是最被沙盒。我们期待在Apache Web服务器前面,让我们坚持这个例子。

跑过systemd-分析安全httpd.service命令来生成应用到安全指令的报告httpd.service

由于233版本中,有77次测试的安全审查。下面,我已经包括测试结果,重点放在文件系统访问的一小部分。

名称描述曝光PrivateDevices服务可能访问硬件设备0.2✓PrivateTmp服务有其他软件的临时文件无法访问ProtectControlGroups服务可能修改,与对照组的文件系统0.2ProtectHome服务已全面进入主目录0.2ProtectKernelTunables服务可能会改变内核可调0.2ProtectSystem服务已全面进入操作系统文件层次0.2RestrictSUIDSGID服务可能会产生SUID / SGID文件0.2RootDirectory服务主机的根目录0.1中运行...→总曝光度为httpd.service:9.2不安全

我们可以看到,Apache HTTP服务器被限制在自己的沙盒temp目录,它不具有对系统的访问/ tmp目录目录。这是一个默认策略的httpd在Fedora Linux操作系统。你可能会在你选择的Linux发行版不同的结果。

测试结果表明我们,我们的Web服务器可以明确地被配置为更安全。有很多改进的空间,这取决于你的Apache HTTP Server配置。您的Web服务器可能不需要写访问到你的文件层次大多数位置。可能它甚至不需要读访问。

让我们继续紧缩的安全举措httpd.service

服务单位安全加固

跑过systemctl编辑httpd.service命令来进行更改的httpd服务单位。这将打开一个文本编辑器,你做的任何更改将覆盖服务的默认指令。(在指定的它会使用默认的文本编辑器编辑环境变量。)

以下是一yabo亚博体育下载个示例服务单元重写地址一些在上述安全审查中发现的点。请参阅systemd.exec手册页对于每个指令的文档。

[服务] PrivateDevices =真ProtectControlGroups =真ProtectHome =真ProtectKernelTunables =真ProtectSystem =全RestrictSUIDSGID =真

这个保存到覆盖文件,运行systemctl守护重装指挥使systemd认识的变化,最后systemctl重启httpd.service以使更改生效。你应该看到约2分的改善,如果你重新运行该服务的安全指令测试。

现在,你需要做大量的测试,以确保一切仍在正常工作。你已经到位的限制,该计划从未被设计来运行。它或程序你在它上面运行在这些条件下可能无法正常运作。您可能需要授予其访问特定文件或目录。让我们看看你如何做到这一点。

如果东西坏了上述的配置,它可能会建议你负责你的Web服务器做一些潜在的风险。

进一步锁定下访问

ProtectSystem =满指令使/启动/等等在/ usr目录是只读的。这将防止被攻破的程序从系统配置的干扰。然而,受损的程序仍然可以读取和复制敏感数据,如从你让我们的加密证书在/ etc / letsencrypt目录。

你可以将它们添加到阻止访问特定目录InaccessiblePaths = - 的/ etc / letsencrypt指示。您可以指定由空格字符分隔多个路径。在文件层次该路径下的任何文件或目录将不可访问。在路径前面的负讲述systemd不如果路径在运行时不存在引发错误。

InaccessiblePaths指令与从上面的例子中的那些组合可以用来有效地防止在彼此的数据得到不同的过程。您可能不希望维护每个服务白名单。但是,你至少应该建立敏感位置的块列表和使它们无法访问所有其他服务。

你可以把它一步,手动指定ReadWritePathsReadOnlyPathsInaccessiblePaths。一种实用工具象strace的-e跟踪=%文件程序可以帮助您识别一个程序需要什么样的路径。需求会随着时间的推移所以像这样的设置,需要持续监控变化。

你可以更进一步,并与改变根目录根目录指示。这类似于传统的chroot环境命令允许您设置一个模拟的文件系统,并启动里面的服务。

结论

systemd可以提供通过您的Linux分发附带为您定制服务额外的保护以及服务。你的Linux发行版可能出货很少或根本没有保护服务。安全需求从安装到不同的安装,所以它的系统管理员启用安全保护。

您可以通过部署一些标准的沙盒指令的迅速增强您的系统安全。它可能只是从具有妥协的服务转成安全噩梦节省您的组织的事。

请仔细阅读,第二部分的教程更先进systemd安全指令

来源

  • systemd-分析版本244,,手册页,systemd项目,FreeDesktop.org
  • systemd.exec版本244,,手册页,systemd项目,FreeDesktop.org
  • systemd 240发布兹比格涅夫·Jędrzejewski-Szmek,systemd-devel邮件列表,FreeDesktop.org