nginx 在其 AppArmor 策略中真的需要 dac_override 吗?

nginx 在其 AppArmor 策略中真的需要 dac_override 吗?

我正在为 Ubuntu 14.04 构建 AppArmor 策略nginx,如果不启用该功能,我就无法使其工作dac_override

是否nginx真的需要启用此功能,或者有其他方法可以解决此问题?覆盖所有自主访问控制看起来有风险,但也许在 AppArmor 约束范围内很常见。

nginx不受限制地运行良好,因此我认为不存在权限问题,但我对 AppArmor 还不熟悉,所以我可能是错的。

答案1

Ubuntu 中 nginx 日志的默认文件权限为rw-r-----。这些文件归 拥有www-admin:adm

nginx以用户身份启动root,默认情况下具有该CAP_DAC_OVERRIDE功能(记住root可以读取和写入系统中的任何文件),但是一旦 AppArmor 限制启动,该进程就会失去该功能,即使它以身份运行root,因此主 nginx 进程无法打开日志文件。

解决方案是更改权限以便也root可以写入这些文件,或者将dac_override功能添加到 AppArmor nginx 配置文件中。

答案2

除了上述回答之外,你也许可以通过使用“受限制的 dac_override“ 政策:

capability dac_override {
    /var/log/nginx* rw,
}

根据文档,还应该注意,即使是不受限制的dac_override策略也不能提供对整个文件系统的不受限制的访问,因此常规的、不受限制的root进程可以享受:

“... 为了能够访问不属于其他人的文件,该任务必须具有 dac_overide 功能,并且配置文件必须包含文件访问规则和 dac_override 功能。”

相关内容