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

Контексты SELinux

Я настраиваю Apache \ PHP и заметил, что Apache жалуется на разрешения с общим объектом php.

Starting httpd: 
httpd: Syntax error on line 206 of /etc/httpd/conf/httpd.conf: 
Cannot load /usr/lib/httpd/modules/libphp5.so into server: 
/usr/lib/httpd/modules/libphp5.so: cannot restore segment prot after reloc: 
Permission denied

Я посмотрел на контекст (все нормально началось с отключением принудительного исполнения) и обнаружил:

# ls --context /usr/lib/httpd/modules/libphp5.so
-rwxr-xr-x root root root:object_r:httpd_modules_t /usr/lib/httpd/modules/libphp5.so

Разве httpd (apache) не должен иметь доступ к файлам в контексте httpd_modules_t? Я исправил это, применив

chcon -t textrel_shlib_t '/usr/lib/httpd/modules/libphp5.so'

Но я думаю, что версия httpd будет работать раньше этой. Может кто-то объяснить это мне?

В SELinux у каждого элемента должен быть контекст. Перенос текста можно описать как ошибку. Изменение контекста создает исключение, побуждающее SELinux разрешить ему загрузку, даже если по сути это b0rken. Лучшее объяснение перемещения текста: http://www.akkadia.org/drepper/textrelocs.html. Кстати, используя chcon не является постоянным: изменение метки приведет к сбросу контекста. Использовать

# semanage fcontext -a -t textrel_shlib_t /usr/lib/httpd/modules/libphp5.so

чтобы он приклеился (см. /etc/selinux/targeted/contexts/files/file_contexts.local).

HTH