Python MySQLdb с SELinux

Я использую модуль mySQLdb в своем приложении django, которое связано с Apache через WSGI. Однако у меня возникают проблемы с разрешением (показано ниже). Это связано с 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 to map segment from shared object: Permission denied


person felix001    schedule 20.12.2014    source источник
comment
Правильно ли настроены учетные данные вашей базы данных, похоже, у вас нет разрешений на подключение к базе данных   -  person Paul Oostenrijk    schedule 21.12.2014
comment
Ага, как будто я выключаю Селзника, он отлично подключается   -  person felix001    schedule 21.12.2014
comment
Скорее всего, это ошибка политики SELinux, поскольку с httpd существует множество ограничений. Сначала убедитесь, что файлы, читаемые httpd, помечены httpd_sys_content_t. Используйте ls -lZ для проверки. Для _mysql.so вам могут потребоваться привилегии exec. Для этого вам понадобится метка: httpd_sys_script_exec_t. См. Ответ на аналогичную проблему: stackoverflow.com/questions/20919771/   -  person Gohn67    schedule 29.12.2014
comment
У вас есть httpd_can_network_connect?   -  person xnx    schedule 30.12.2014


Ответы (4)


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

sudo chcon -R -h -t httpd_sys_script_exec_t /opt/django/virtenv/django15/lib/python2.7/site-packages/_mysql.so
person Velimir Mlaker    schedule 01.01.2015
comment
Сработало как шарм, спасибо. Из интереса, как мне узнать, какой тег мне добавить к нему? - person felix001; 02.01.2015

Для уточнения выполните:

# 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
person Benjamin Lane    schedule 01.01.2015

Пара проблем с разрешением, которые я заметил:

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

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

$ sudo chcon -t shlib_t /opt/django/virtenv/django15/lib/python2.7/site-packages/*.so
person Afriza N. Arief    schedule 29.04.2015