fragen stichworte

virtualenv Segment konnte nicht von Shared Object zugeordnet werden: Berechtigung verweigert

Wenn sich SELinx in permissive befindet, läuft die Django-Webapp ohne Warnmeldungen. Der folgende Fehler wird im Apache-Fehlerprotokoll angezeigt, sobald SELinux für die Erzwingung festgelegt ist, aber keine Alarme in audit.log protokolliert werden.

[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

Auf dem System werden CentOS 7, Apache httpd 2.4 2.4.6 (rpm installiert), Python 3.4.2 (Quelle installiert) und Pip installiert: mod_wsgi 4.4.5, virtualenv 12.0.5, psycopg2 2.5.4 und Django 1.7.2.

Nichts wird von Django protokolliert.

Der aktuelle Dateikontexttyp des virtualenv-Verzeichnisses lautet httpd_sys_content_t.

antworten

httpd_sys_script_exec_t scheint der beste Dateikontexttyp zu sein, der verwendet werden muss, und muss nur auf die betreffende gemeinsam genutzte Objektdatei angewendet werden.

<virtualenv/path/>lib/python3.4/site-packages/psycopg2/_psycopg.cpython-34m.so‌​.

Als root oder super user:

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

Die Kontextänderung bleibt durch Neustart und Umbenennen des Dateisystems bestehen.

Basierend auf dieser fehlplatzierten Frage zum Stack Overflow.