有没有办法用 systemd 控制文件系统访问?

有没有办法用 systemd 控制文件系统访问?

因此,我正在深入研究 systemd 的复杂性以及它使用 cgroup 测量 cpu、io 和内存等资源的能力。

是否还有一种方法可以通过 systemd 控制进程可以访问的目录?例如,/usr/bin通常标记为o+rX,我希望 Web 服务器进程被锁定在该目录之外。有相当多的软件漏洞可以利用,您可以从磁盘读取任意文件,这将增强分层安全方法。

我确信这可以通过一些非常奇特的文件系统权限来实现,但我想知道是否有更好的方法。感谢服务器故障!

答案1

实际上,您有许多选项,可以在服务的单元文件中定义。它们都遵循相同的原理,即在 systemd 为服务设置的命名空间中使用绑定挂载。文件系统的某些部分要么以只读方式挂载,要么通过挂载空目录使其完全不可见/无法访问。

PrivateTmp可以说是最常见的。
启用该选项PrivateTmp将为执行的进程设置一个新的文件系统命名空间,并在其中挂载私有目录/tmp/var/tmp目录,这些目录不会被命名空间之外的进程共享。

ProtectSystem
如果true,将/usr/boot目录挂载为此单元调用的进程的只读状态。
如果设置为full/etc目录也以只读方式挂载。如果设置为“strict”,则整个文件系统层次结构都以只读方式挂载,但 API 文件系统子树 /dev、/proc 和 /sys 除外

ProtectHome
接受布尔参数或“只读”。如果true,则目录/home/root/run/user对该单元调用的进程不可访问且为空。如果设置为“ read-only”,则这三个目录将改为只读

ProtectKernelTunables
如果为真,则通过/proc/sys/sys/proc/sysrq-trigger/proc/latency_stats/proc/acpi/proc/timer_stats和 访问的内核变量将变为只读。/proc/fs/proc/irq

ReadOnlyPaths
列出的路径ReadOnlyPaths=仅供读取,即使通常的文件访问控制允许,写入也会被拒绝。

InaccessiblePaths
InaccessiblePaths=命名空间内的进程将无法访问 列出的路径(以及文件系统层次结构中位于其下方的所有内容)。

但可能还有很多选择。

更分层的访问策略可能需要 SELinux,并且你可能需要非常透彻地了解它,并且熟练掌握多级安全性政策。

相关内容