SELinux:让 Apache 与 CentOS 上的 MySQL 对话

SELinux:让 Apache 与 CentOS 上的 MySQL 对话

因此,我将 MySQL chroot 到 /opt/chroot/mysql,一切运行正常。Apache 配置正常,并且运行良好。

我创建了一个连接到 MySQL 守护进程的小型 PHP 脚本,并配置了 PHP,以便使用的默认套接字是 chrooted 套接字。禁用 SELinux 时,该脚本能够正常连接。但是,启用 SELinux 时,脚本无法连接(错误编号为 13),并且审计日志告诉我 SELinux 拒绝了该请求。

我发现的每一个处理这个问题的教程都告诉我禁用 SELinux。这不是我想要做的,所以请不要建议我这样做!我想要一个在启用 SELinux 时有效的解决方案……我认为一定存在这样的解决方案……

我猜我可能必须更改 mysql 文件的 SELinux 上下文,但我不确定要将它们改成什么才能使其正常工作。

答案1

更新2

类型 = AVC 消息 = 审核(1318863312.959:435):avc:拒绝 { connectto } for pid=12472 comm =“httpd”路径 =“/opt/chroot/mysql/var/lib/mysql/mysql.sock”scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 tclass=unix_stream_socket

您可以按照以下步骤构建自定义 SELinux 策略模块:

# grep httpd_t audit.log | audit2allow -m httpd > httpd.te
# checkmodule -M -m -o httpd.mod httpd.te
# semodule_package -m httpd.mod -o httpd.pp 
# semodule -i httpd.pp

參閱主题以了解更多详细信息。


更新

  1. 运行semanage命令来添加上下文映射/opt/chroot/mysql/var/lib/mysql/

    # semanage fcontext -a -t mysqld_db_t "/opt/chroot/mysql/var/lib/mysql(/.*)?"
    
  2. 并使用restorecon命令应用此上下文映射:

    # restorecon -Rv /opt/chroot/mysql/var/lib/mysql
    

如果您通过 TCP/IP 连接,请尝试以下操作:

# setsebool -P httpd_can_network_connect 1

相关内容