Я создаю политику AppArmor для nginx
в Ubuntu 14.04, и я не могу заставить его работать, не включив dac_override
возможности.
Делает nginx
действительно нужно это включить или есть способ обойти это? Отмена любого дискреционного контроля доступа выглядит рискованным, но, возможно, это обычное явление в рамках ограничений AppArmor.
nginx
работает нормально без ограничений, поэтому я не думаю, что есть проблема с разрешением, но я новичок в AppArmor, поэтому могу ошибаться.
По умолчанию права доступа к файлам для журналов nginx в Ubuntu: rw-r-----
. Эти файлы принадлежат www-admin:adm
.
nginx
запускается под пользователем root
, у которого есть CAP_DAC_OVERRIDE
возможность по умолчанию (помните, что root
может читать и писать в любой файл в системе), но как только срабатывает ограничение AppArmor, процесс теряет эту возможность, даже если он работает как root
, поэтому главный процесс nginx не может открывать файлы журнала.
Решение заключается в изменении разрешений, чтобы root
также можно записывать в эти файлы или добавлять dac_override
возможность профиля AppArmor nginx.
В дополнение к своему собственному ответу выше, вы, возможно, могли бы смягчить проблему воспринимаемого чрезмерно широкого доступа, используя "ограниченный dac_override"политика:
capability dac_override {
/var/log/nginx* rw,
}
Согласно документам, следует также отметить, что даже неограниченный dac_override
политика не обеспечивает неограниченный доступ ко всей файловой системе, так что обычный, неограниченный, root
процесс понравится:
«... чтобы иметь возможность получить доступ к файлу, который не принадлежит кому-либо еще, задача должна иметь возможность dac_overide, а профиль должен содержать как правило доступа к файлу, так и возможность dac_override».