因此,我将 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
參閱这主题以了解更多详细信息。
更新
运行
semanage
命令来添加上下文映射/opt/chroot/mysql/var/lib/mysql/
:# semanage fcontext -a -t mysqld_db_t "/opt/chroot/mysql/var/lib/mysql(/.*)?"
并使用
restorecon
命令应用此上下文映射:# restorecon -Rv /opt/chroot/mysql/var/lib/mysql
如果您通过 TCP/IP 连接,请尝试以下操作:
# setsebool -P httpd_can_network_connect 1