因此,我正在深入研究 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,并且你可能需要非常透彻地了解它,并且熟练掌握多级安全性政策。