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

Итак, я только недавно загрузил сервер 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.


person Zhouster    schedule 15.06.2013    source источник
comment
Какой это дистрибутив линукса? Обычно намного проще установить apache через менеджер пакетов для вашей ОС. Он будет держать вас в курсе обновлений безопасности и будет должным образом интегрирован с остальной частью системы, чтобы гарантировать, что он правильно настроен для вашей установки.   -  person faffaffaff    schedule 16.06.2013
comment
Я использую Oracle Linux 6.4. Это помогает?   -  person Zhouster    schedule 16.06.2013
comment
Почему вы не можете использовать 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 и т. д.   -  person faffaffaff    schedule 17.06.2013
comment
Я использовал команду sudo yum install httpd, и она говорит, что все обновлено. :ИКС   -  person Zhouster    schedule 18.06.2013


Ответы (3)


Это похоже на проблему с правами доступа к файловой системе. Убедитесь, что каталог /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
person Esenti    schedule 15.06.2013
comment
Нет ли способа сделать это в файле httpd.conf? Или это должно быть более ручное средство? Потому что я чувствую, что если я когда-нибудь создам новые файлы, мне может понадобиться снова изменить разрешения, тогда как исправление файла конфигурации решит эту проблему напрямую. Если я не ошибаюсь... - person Zhouster; 16.06.2013
comment
Кроме того, когда я попробовал вышеописанное, он работает без ошибок, но я проверил, и на самом деле он не запускает сервер. Я знаю это, потому что, когда я пытаюсь остановить его, он говорит, что httpd (нет pid-файла) не запущен. Вызов sudo - это мое решение всего этого, но мне интересно, не упустил ли я что-то... - person Zhouster; 16.06.2013
comment
@Zhouster - когда вы запускали сервер, было ли что-нибудь записано в файл журнала? Глядя на него, вы должны увидеть, что именно пошло не так. Кроме того, я добавил в свой ответ инструкции по изменению местоположения логила по умолчанию. - person Esenti; 16.06.2013
comment
На самом деле в моем error_log много. В нем говорится, что не удалось создать /usr/local/logs/httpd.pid и не удалось зарегистрировать pid в файле /usr/local/logs/httpd.pid. Когда я запускаю sudo для своих операций, я могу запустить сервер и посетить свой домашний веб-сайт, но когда я запускаю команду состояния, она говорит, что не может найти запрошенный URL-адрес. Мне интересно, если я что-то пропустил. Я запускаю апачектл. Должен ли я запускать что-то еще? - person Zhouster; 17.06.2013
comment
Похоже, проблема с правами доступа к файлам осталась. Вы можете попробовать создать файл /usr/local/logs/httpd.pid вручную или изменить его местоположение с помощью директивы PidFile в вашем httpd.conf. - person Esenti; 17.06.2013
comment
Я изменил расположение директивы PidFile, но прямо сейчас файл index.html в моем htdcos не отображается, когда я пытаюсь посмотреть IP-адрес, который я слушаю. Итак, у меня для ServerName установлено значение 127.0.0.1:8000, и я слушаю то же значение. Возможные ошибки? - person Zhouster; 18.06.2013
comment
Спасибо, Эссенти. Я добавил в ваше предложение ErrorLog, и другие ваши комментарии помогли мне лучше понять Apache. :) - person Zhouster; 20.06.2013

Для всех, кто использует 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

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

person Matthew Sprankle    schedule 12.03.2015
comment
Спасибо! Мое разрешение было правильным, но оно не сработало. Я потратил больше часа, прежде чем прочитал ваш ответ, находя решения. Это (SELinux) было именно моей проблемой. Этот chcon мне не помог. Я так и сделал, установил принудительно 0. - person M-D; 11.07.2015
comment
Хотел бы подтвердить, что SELinux мешал моему серверу httpd работать в Fedora 22. Это все еще актуальное решение для систем, использующих SELinux. - person JWF; 24.07.2015

Изменение политики безопасности 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
person Lukasz Dynowski    schedule 19.12.2016