SELinux, сокращение от Security Enhanced Linux, - это модуль безопасности Linux, который входит в состав многих серверных дистрибутивов Linux. Хотя SELinux повышает безопасность сервера (несмотря на то, что он был создан АНБ), он часто приводит к неожиданным ошибкам доступа/отказа в разрешении.
Если вы получаете одну из таких ошибок на сервере с включенным SELinux, и при этом нет очевидных проблем с правами доступа к файлам, вам следует проверить, не вызвана ли эта проблема SELinux.
Чтобы проверить состояние SELinux, выполните команду:
1 | sestatus |
Вы должны получить что-то вроде этого:
" Current mode: enforcing" указывает на то, что SELinux запущен.
Чтобы временно отключить SELinux, выполните:
1 | setenforce 0 |
Если это решит проблему, и вы больше не будете получать ошибки "permission denied", это означает, что проблема была вызвана SELinux. Вновь включите его с помощью setenforce 1 и попытайтесь найти первопричину.
Чтобы помочь в устранении неполадок, вы можете проверить файлы журнала SELinux, расположенные в /var/log/audit/audit.log.
Очень часто проблема вызвана неправильным контекстом безопасности (также называемым меткой безопасности), назначенным затронутым файлам или папкам. Чтобы просмотреть контекст безопасности, который SELinux применил к файлам или папкам, выполните одну из следующих команд (они все отображают контекст безопасности, просто в разных форматах):
1 2 3 | ls -Z или ls --context ls --lcontext ls --scontext |
Чтобы изменить контекст безопасности, вы можете использовать команду chcon, т.е:
1 | chcon -R -t httpd_sys_content_t /www/sites |
- httpd_sys_content_t - доступ Apache только на чтение
- httpd_sys_rw_content_t - доступ Apache на чтение/запись
- httpd_log_t - файлы журналов Apache
- httpd_cache_t - кэширование Apache
или использовать "справочную" директорию:
1 | chcon -R --reference=/var/www/html /www/sites |