AmbientCapabilities 和 CapabilityBoundingSet 有什么区别?

AIc*_*wED 5 webserver systemd services capabilities

我正在尝试为必须绑定到端口 80 和 443 的 Web 服务器进程创建一个 systemd 服务。我发现了一些设置AmbientCapabilities=CAP_NET_BIND_SERVICE和设置AmbientCapabilities和 的示例CapabilityBoundingSet。从文档中,尚不清楚。Systemd 文档:链接。Linux 手册:链接

我应该同时设置还是只设置 AmbientCapabilities?

use*_*686 5

它们是完全相反的:

AmbientCapabilities 授予流程通常不会开始的功能。

CapabilityBoundingSet 限制了允许进程获得的能力。它不授予任何。

对于您的任务,设置 AmbientCapabilities 来授予权限就足够了——默认情况下边界集已经允许一切,因此无需更改它。

相反,后者旨在成为一种安全强化功能。即使该服务实际上以 root (uid 0) 身份运行——或者调用像“su”或“sudo”这样的 setuid-root 程序——它也永远无法获得任何不在其边界集中的特权。

但是,如果您确定您的服务不会直接运行任何需要更高权限的东西,您可以(或许应该)同时设置两者。