我正在为 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 功能。”