Apache Error AH00015: Unable to open logs (Permission denied) — Решение
Служба веб-сервера Apache (httpd / apache2) не может запуститься или перезапуститься при перезагрузке ОС. В системном журнале systemctl status apache2 или journalctl -xeu httpd регистрируется критический отказ: (13)Permission denied: AH00015: Unable to open logs или AH00015: Unable to open logs: ErrorLog: could not open file /var/log/apache2/error.log.
| Компонент | Текущее состояние | Требуемое значение |
|---|---|---|
| Директория логов | /var/log/apache2/ или /var/log/httpd/ | Должна принадлежать пользователю root или группе веб-сервера |
| Права на директорию | drwxr-x--- (750) / владелец другой пользователь | drwxr-xr-x (755) или корректная группа adm / www-data |
| Контекст SELinux | var_log_t отсутствует | httpd_log_t |
- Apache немедленно аварийно завершает мастер-процесс на этапе парсинга директив
ErrorLogиCustomLog. - Команда
apache2ctl configtestилиhttpd -tвозвращает:Action 'configtest' failed. AH00015: Unable to open logs.
- Проверьте права доступа и владельца целевой директории с логами:
ls -ld /var/log/apache2 # Для RHEL / CentOS: ls -ld /var/log/httpd - Установите стандартные права и владельца (в Ubuntu/Debian мастер-процесс запускается от
root, а воркеры отwww-data):sudo chown -R root:adm /var/log/apache2 sudo chmod -R 750 /var/log/apache2 # Либо для CentOS/RHEL: sudo chown -R root:root /var/log/httpd sudo chmod 755 /var/log/httpd - Если в файле виртуального хоста путь к логам ведет в кастомный каталог (например,
/home/user/logs/), убедитесь, что родительские каталоги имеют флаг исполнения (+x) для чтения структуры папок. - Если на сервере активен SELinux (CentOS, RHEL, Fedora, AlmaLinux, Rocky):
# Восстановите стандартный контекст безопасности для каталога логов веб-сервера: sudo semanage fcontext -a -t httpd_log_t "/var/log/httpd(/.*)?" sudo restorecon -Rv /var/log/httpd # Если логи вынесены в нестандартную папку: sudo semanage fcontext -a -t httpd_log_t "/var/www/my-site/logs(/.*)?" sudo restorecon -Rv /var/www/my-site/logs - Проверьте конфигурацию и запустите сервис:
sudo apache2ctl configtest # или sudo httpd -t sudo systemctl restart apache2 # или sudo systemctl restart httpd
/var/log/apache2 непривилегированному пользователю www-data. Если процесс веб-сервера будет скомпрометирован через уязвимость в скрипте, злоумышленник сможет затереть логи или использовать уязвимость симлинков для перезаписи системных файлов от имени root при ротации логов.Частые вопросы (FAQ)
Почему мастер-процесс Apache не может открыть логи, если он запускается от root?
Мастер-процесс действительно стартует от root, но при наличии директив piped logs (логирование через пайп в стороннюю утилиту rotatelogs/cronolog) дочерний процесс запускается от непривилегированного пользователя, вызывая Permission Denied.
Как проверить, блокирует ли SELinux запись логов?
Выполните команду sudo ausearch -m avc -ts recent | grep httpd или проверьте аудит-лог /var/log/audit/audit.log на наличие запретов типа 'denied { write }'.
Что делать, если файл лога был удален вручную при работающем Apache?
Создайте пустой файл заново командой touch /var/log/apache2/error.log, выставьте права и выполните sudo systemctl restart apache2 (или apache2ctl graceful).
Как перенаправить логи Apache в системный журнал systemd/journald?
Укажите в конфигурации директиву: ErrorLog "journald:apache2" или ErrorLog "syslog:local7".