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

virtualenv Не удалось сопоставить сегмент из общего объекта: отказано в разрешении

Когда 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‌>

Изменение контекста сохранится после перезагрузки и переименования файловой системы.

На основе этого неправильно расположенного вопроса о переполнении стека.