2014-12-20 26 views
6

Я использую модуль mySQLdb в своем приложении django, который связан с Apache через WSGI. Однако я получаю разрешения (см. Ниже). Это до SElinux, и если я настрою его на пассивное, все будет в порядке.Python MySQLdb с SELinux

ImproperlyConfigured: Ошибка загрузки модуля MySQLDb: /opt/django/virtenv/django15/lib/python2.7/site-packages/_mysql.so: не удалось отобразить сегмент от общего объекта: Отказано в

Каков наилучший способ обновить SELinux, включив его, не отключая всю вещь. Ошибка показана ниже:

ImproperlyConfigured: Ошибка при загрузке модуля MySQLdb: /opt/django/virtenv/django1/lib/python2.7/site-packages/_mysql.so: cfailed к карте сегмента от общей объект: отказано в

+0

ли учетные данные базы данных установлены правильно, похоже, вы не имеете права на подключение к базе данных –

+0

Yep, как если бы я выключите Selznick, он соединяется нормально – felix001

+1

Скорее всего, это ошибка политики SELinux, поскольку с httpd существует множество ограничений. Сначала убедитесь, что файлы, прочитанные httpd, помечены знаком 'httpd_sys_content_t'. Используйте 'ls -lZ' для проверки. Для '_mysql.so' вам могут потребоваться привилегированные привилегии. Для этого вам понадобится метка: 'httpd_sys_script_exec_t'. См. Этот ответ для аналогичной проблемы: http://stackoverflow.com/questions/20919771/centos-6-4-failed-to-map-segment-from-shared-object-permission-denied – Gohn67

ответ

6

Как @ Gohn67 предлагает, изменить контекст безопасности SELinux файла в вопросе, что позволяет процесс HTTPD выполнить его:

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

Работал как очарование. Из интереса, как я могу узнать, какой тег я должен добавить к нему? – felix001

0

чтобы сделать более точным, пожалуйста, выполните:

# 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

Пара вопросов разрешения, что я замечаю:

  1. Убедитесь, что ваши учетные данные для MySQLDb имеют доступ к базе данных.
  2. Если вы используете IP и порт для подключения к базе данных, попробуйте использовать localhost.
  3. Убедитесь, что у пользователя (разрешения chmod) есть доступ к папке, где mySQL хранит материал. Иногда при хранении мультимедиа и вещах ему требуется разрешение на фактическую папку.
  4. Наконец, я попытался бы сбросить сервер Apache (не всю машину).
0

Я не знаю, почему, но this работает для меня

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