【问题标题】:Python MySQLdb with SELinux带有 SELinux 的 Python MySQLdb
【发布时间】:2015-02-19 11:29:59
【问题描述】:

我在我的 django 应用程序中使用 mySQLdb 模块,该模块通过 WSGI 链接到 Apache。 但是我遇到了权限问题(如下所示)。这取决于 SElinux,如果我将其设置为被动,一切正常。

配置不当:加载 MySQLdb 模块时出错: /opt/django/virtenv/django15/lib/python2.7/site-packages/_mysql.so: 无法从共享对象映射段:权限被拒绝

什么是更新 SELinux 以包含它而不必关闭整个东西的最佳方法。错误如下图:

配置不当:加载 MySQLdb 模块时出错: /opt/django/virtenv/django1/lib/python2.7/site-packages/_mysql.so: 无法从共享对象映射段:权限被拒绝

【问题讨论】:

  • 您的数据库凭据设置是否正确,看起来您没有权限连接到数据库
  • 是的,好像我关闭了 Selznick 它连接正常
  • 这可能是 SELinux 策略错误,因为 httpd 有很多限制。首先确保httpd读取的文件标有httpd_sys_content_t。使用ls -lZ 进行检查。对于_mysql.so,您可能需要 exec 权限。为此,您需要标签:httpd_sys_script_exec_t。有关类似问题,请参阅此答案:stackoverflow.com/questions/20919771/…
  • 你有httpd_can_network_connect吗?

标签: python django mysql-python selinux


【解决方案1】:

正如@Gohn67 建议的那样,更改相关文件的 SELinux 安全上下文,允许 HTTPD 进程执行它:

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

【讨论】:

  • 工作就像一个魅力谢谢。出于兴趣,我怎么知道应该添加什么标签?
【解决方案2】:

为了更准确,请执行:

# 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

【讨论】:

    【解决方案3】:

    我注意到的几个权限问题:

    1. 确保您的 mySQLdb 凭据可以访问数据库。
    2. 如果您使用 IP 和端口连接到数据库,请尝试使用 localhost。
    3. 确保用户(chmod 权限)有权访问 mySQL 存储内容的文件夹。有时在存储媒体和东西时,它需要对实际文件夹的权限。
    4. 最后,我会尝试重置 Apache 服务器(不是整台机器)。

    【讨论】:

      【解决方案4】:

      我不知道为什么,但this 对我有用

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

      【讨论】:

        猜你喜欢
        • 2013-11-07
        • 1970-01-01
        • 2014-11-04
        • 1970-01-01
        • 2013-08-10
        • 2012-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多