Назад | Перейти на главную страницу

Использование sudo /etc/init.d/httpd start жалуется на права файла журнала

Я создал собственный каталог журналов с учетной записью 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)