Я создал собственный каталог журналов с учетной записью root и временно изменил его до 777.
ls -la /var/mylogs/log/
total 16
drwxrwxrwx 2 root root 4096 Jun 24 06:27 .
drwxr-xr-x 5 root root 4096 Jun 24 06:25 ..
Когда я пытаюсь запустить службу от пользователя (скажем, «myuser», который находится в файлах sudoers как myuser ALL = (ALL) ALL), это не удается из-за разрешений:
sudo /etc/init.d/httpd start
Starting httpd: (13)Permission denied: httpd: could not open error log file /var/mylogs/log/httpd_error.log.
Unable to open logs
Однако успешным является следующее:
sudo bash
/etc/init.d/http start
Поэтому я предполагаю, что эти два метода не эквивалентны, хотя для меня выполнение sudo было таким же, как вход в учетную запись root и выполнение команд.
Есть подсказка?
Спасибо !
Система, в которой установлен сервер apache2, - это RedHat 5.6, поэтому SELinux активирован по умолчанию.
Причина проблемы в том, что SELinux добавляет дополнительные права доступа к файлам поверх разрешений ОС (например, chmod, chown), см.:
man httpd_selinux
В руководстве говорится, что явный контекст должен быть установлен для файлов / каталогов, чтобы httpd мог получить к ним доступ.
Следовательно, я использовал следующее:
chcon -R user_u:object_r:httpd_log_t /var/mylogs/logs
Вы можете проверить этого человека, чтобы получить другие токены разрешений (контент, скрипты ...).
Процесс apache2 должен быть владельцем каталога журналов, а не root. Вы можете решить эту проблему, изменив владельца каталога журналов (т.е. www-data или группы, к которой принадлежит apache2)