Когда SELinx в permissive
веб-приложение Django работает нормально без предупреждений. Приведенная ниже ошибка появляется в журнале ошибок Apache после того, как SELinux настроен на принудительное применение, но никакие предупреждения не регистрируются в audit.log
.
[wsgi:error] import psycopg2 as Database
[wsgi:error] File "/mnt/data/venv/app/lib/python3.4/site-packages/psycopg2/__init__.py", line 50, in <module>
[wsgi:error] from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
[wsgi:error] ImportError: /venv/app/lib/python3.4/site-packages/psycopg2/_psycopg.cpython-34m.so: failed to map segment from shared object: Permission denied
В системе работают CentOS 7, Apache httpd 2.4 2.4.6 (установлен rpm), Python 3.4.2 (установлен исходный код) и установлен pip: mod_wsgi 4.4.5, virtualenv 12.0.5, psycopg2 2.5.4 и Django 1.7. 2.
Django ничего не регистрирует.
Текущий тип файлового контекста каталога virtualenv: httpd_sys_content_t
.
httpd_sys_script_exec_t
кажется лучшим типом контекста файла для использования, и его нужно применять только к задействованному общему объектному файлу.
<virtualenv/path/>lib/python3.4/site-packages/psycopg2/_psycopg.cpython-34m.so.
Как root или суперпользователь:
semanage fcontext -a -t httpd_sys_script_exec_t </full-path-to-file/_psycopg.cpython-34m.so>
restorecon -v </full-path-to-file/_psycopg.cpython-34m.so>
Изменение контекста сохранится после перезагрузки и переименования файловой системы.
На основе этого неправильно расположенного вопроса о переполнении стека.