当 SELinx 位于permissive
Django 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>
上下文改变将在重启和文件系统重新标记后持续存在。