2014-12-20 16 views
6

Ich verwende das mySQLdb-Modul innerhalb meiner Django-Anwendung, die über WSGI mit Apache verbunden ist. Ich erhalte jedoch Berechtigungsprobleme (siehe unten). Das liegt an SElinux und wenn ich es auf passiv setze, ist alles in Ordnung.Python MySQLdb mit SELinux

ImproperlyConfigured: Fehler beim Laden des MySQLdb Modul: /opt/django/virtenv/django15/lib/python2.7/site-packages/_mysql.so: Segment aus dem gemeinsamen Objekt abzubilden fehlgeschlagen: Zugriff verweigert

Was ist der beste Weg, SELinux zu aktualisieren, um dies zu integrieren, ohne das ganze Ding ausschalten zu müssen. Der Fehler wird unten gezeigt:

ImproperlyConfigured: Fehler beim Laden des MySQLdb Modul: /opt/django/virtenv/django1/lib/python2.7/site-packages/_mysql.so: cfailed Segment zur Karte aus dem gemeinsam genutzten Objekt: Permission

verweigert
+0

Sind Ihre Datenbank-Anmeldeinformationen richtig eingerichtet ist, sieht aus wie Sie auf die Datenbank –

+0

Yep, als ob ich nicht über die Berechtigungen verbinden ausschalten Selznick es verbindet sich gut – felix001

+1

Es ist wahrscheinlich ein SELinux-Richtlinienfehler, da es viele Einschränkungen mit httpd gibt. Stellen Sie zuerst sicher, dass die von httpd gelesenen Dateien mit 'httpd_sys_content_t' gekennzeichnet sind. Verwenden Sie 'ls -lZ', um zu überprüfen. Für '_mysql.so' benötigen Sie möglicherweise exec privleges. Dazu benötigen Sie das Label: 'httpd_sys_script_exec_t'. Finden Sie diese Antwort für ein ähnliches Problem: http://stackoverflow.com/questions/20919771/centos-6-4-failed-to-map-segment-from-shared-object-permission-denied – Gohn67

Antwort

6

Wie @ Gohn67 schlägt vor, in Frage, die SELinux Sicherheitskontext der Datei ändern, so dass der HTTPD-Prozess, um sie auszuführen:

sudo chcon -R -h -t httpd_sys_script_exec_t /opt/django/virtenv/django15/lib/python2.7/site-packages/_mysql.so 
+0

Arbeitete wie ein Charme, danke. Aus Interesse, wie würde ich wissen, welches Tag ich hinzufügen sollte? – felix001

0

damit ist genauer, bitte ausführen:

# ls -lZ /opt/django/virtenv/django1/lib/python2.7/site-packages 
# ls -lZ /opt/django/virtenv/django1/lib/python2.7/site-packages/_mysql.so 
# grep mysql /var/log/audit/audit.log | audit2allow -w -a -r -v 
# grep mysql /var/log/audit/audit.log | audit2allow -a -r -R mysql 
0

Paar von Berechtigungsprobleme, die ich feststellen:

  1. Stellen Sie sicher, Ihre Anmeldeinformationen für MySQLdb haben Zugriff auf die Datenbank.
  2. Wenn Sie IP und Port verwenden, um eine Verbindung mit der Datenbank herzustellen, versuchen Sie es mit localhost.
  3. Stellen Sie sicher, dass der Benutzer (chmod-Berechtigungen) Zugriff auf den Ordner hat, in dem mySQL Daten speichert. Manchmal benötigt man beim Speichern von Medien und Dingen eine Erlaubnis für den eigentlichen Ordner.
  4. Zuletzt würde ich versuchen, Apache-Server (nicht die gesamte Maschine) zurückzusetzen.
0

Ich weiß nicht, warum, aber this funktioniert bei mir

$ sudo chcon -t shlib_t /opt/django/virtenv/django15/lib/python2.7/site-packages/*.so