Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Сервер Apache: редактирование файла httpd.conf (отказано в доступе)

Автор вопроса: ZhousterОтветов: 3

Итак, я только недавно загрузил сервер Apache со всеми его файлами (httpd, apr, apr-util, pcre), следуя инструкциям, приведенным здесь: http://httpd.apache.org/docs/2.4/install.html

Однако после настройки, когда я попытался запустить свой сервер Apache, который находится в моем каталоге usr/local/bin/, мне было предложено следующее сообщение:

[allen@allen-lnx ~]$ /usr/local/bin/apachectl start
(13)Permission denied: AH00091: httpd: could not open error log file /usr/local/logs/error_log.
AH00015: Unable to open logs

После некоторых исследований я обнаружил, что мне нужно отредактировать файл httpd.conf, который я сделал ранее, чтобы разрешить правильные параметры ServerName и Listen. Однако я не уверен, как отредактировать мой файл conf, чтобы разрешить доступ к каталогу "журналы".

Примечательно, что команда будет запускаться, когда я использую команду "sudo", но я бы предпочел не использовать ее всегда, поскольку это похоже на обходной путь.

Любая помощь будет оценена. Спасибо!

Редактировать: я действительно заметил, что у меня может быть два файла httpd.conf, что доставляет некоторые неудобства. Другой находится в моем корневом каталоге /etc/ (etc/httpd/conf/httpd.conf). Я думаю, что мой модифицированный вопрос сейчас таков: какой из них я должен сохранить? Является ли версия /etc/ встроенной, как указано в комментарии faff ниже?

Текущее решение: я решил, что просто приму тот факт, что мне нужно использовать sudo при редактировании этого файла, так как мне нужно быть пользователем root. Возможно, я изменю его позже, чтобы всегда работать от имени пользователя root, но сейчас будет достаточно sudo.

  • Какой это дистрибутив линукса? Обычно намного проще установить apache через менеджер пакетов для вашей ОС. Он будет держать вас в курсе обновлений безопасности и будет должным образом интегрирован с остальной частью системы, чтобы гарантировать, что он правильно настроен для вашей установки. faffaffaff 16.06.2013
  • Я использую Oracle Linux 6.4. Это помогает? Zhouster 16.06.2013
  • Почему вы не можете использовать apache, поставляемый Oracle Linux? Глядя на public-yum.oracle.com/repo/OracleLinux /OL6/4/base/x86_64 кажется, что есть сборки Apache HTTPD 2.2.15, доступные в httpd-2.2.15-26.0.1.el6.x86_64.rpm и т. д. faffaffaff 17.06.2013
  • Я использовал команду sudo yum install httpd, и она говорит, что все обновлено. :ИКС Zhouster 18.06.2013

loggingpermissionsconfigapache

Ответы

Ответ 1 · рейтинг 5 · Esenti

Это похоже на проблему с правами доступа к файловой системе. Убедитесь, что каталог /usr/local/logs/ существует и доступен для записи пользователю, от имени которого вы запускаете Apache.

Если вы не хотите, чтобы ваш каталог logs был доступен для записи обычным пользователем, вы можете создать файл журнала:

sudo touch /usr/local/logs/error_log

А затем измените владельца файла на правильного пользователя:

sudo chown allen /usr/local/logs/error_log

Предположим, вы хотите запустить Apache от имени пользователя allen.

Если вы хотите изменить расположение файла журнала Apache, найдите директиву ErrorLog в файле httpd.conf (вам придется добавить ее, если ее там нет):

ErrorLog path/to/logfile

Ответ 2 · рейтинг 3 · Matthew Sprankle

Для всех, кто использует SELinux, если вы удалили папку или столкнулись с похожими проблемами, вам может потребоваться сделать несколько вещей.

Повторно свяжите папку с помощью ln -s /var/log/httpd /etc/httpd/logs. По умолчанию журналы хранятся в папке var, но ссылки на них находятся в папке /etc/httpd/logs.

Примените разрешения безопасности SELinux с помощью chcon system_u:object_r:httpd_config_t:s0 /etc/httpd/logs

И, конечно же, запускать все от имени администратора.

Ответ 3 · Lukasz Dynowski

Изменение политики безопасности SELinux на permissive устранило мою проблему.

До исправления мой SELinux работал в принудительном режиме:

$ sestatus -v
sestatus -v
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      30

Я изменил политику безопасности в конфигурационном файле SELinux и в системе.

#/etc/selinux/config
SELINUX=permissive

# In terminal set SELinux to run in permissive mode.
$ setenforce 0

После исправления мой SELinux работал в принудительном режиме:

$ sestatus -v
SELinux status:                 enabled
Current mode:                   permissive
Mode from config file:          permissive
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      30

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы