virtualenv 无法从共享对象映射段:权限被拒绝

virtualenv 无法从共享对象映射段:权限被拒绝

当 SELinx 位于permissiveDjango webapp 中时,它运行良好,没有警报。一旦将 SELinux 设置为强制执行,Apache 错误日志中就会出现以下错误,但没有记录任何警报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

答案1

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‌>

上下文改变将在重启和文件系统重新标记后持续存在。

基于 Stack Overflow 上这个错误定位的问题。

相关内容