我在 Fedora 32 上尝试运行 Nextcloud 时反复收到此错误
type=AVC msg=audit(1601229230.944:718): avc: denied { connectto } for pid=584 comm="php-fpm" path="/var/lib/mysql/mysql.sock" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:unconfined_service_t:s0 tclass=unix_stream_socket permissive=0
我在 Fedora 32 服务器上使用 mariadb 10.5 以及 PHP 7.4.10 和 Nginx 1.18。
我尝试使用以下命令来解决问题,但似乎没有任何效果。我没有主意了。如何解决这个问题?
setsebool -P httpd_can_network_connect_db 1
setsebool -P httpd_can_network_connect 1
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
restorecon -Rv /var/lib/mysql
答案1
首先,您需要消除无意中造成的损害,然后才能解决原来的问题。
此命令是不必要的,并且可能会妨碍解决问题。Fedora 附带的 SELinux 策略已包含正确的上下文,这可能会用不正确的上下文覆盖它们,尤其是对于您尝试访问的套接字。
semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?"
逆转其效果:
semanage fcontext -d -t mysqld_db_t "/var/lib/mysql(/.*)?"
该文件/var/lib/mysql/mysql.sock
应具有类型mysqld_var_run_t
。Fedora 附带的 SELinux 策略已具有此类型,但您的套接字未正确设置此类型。要么它是在 SELinux 被禁用时创建的,要么有人在其他目录中创建了它并将其移动到那里,要么某个进程创建了它但未正确设置上下文。例如,如果 MariaDB 是直接从终端而不是通过其 systemd 服务单元启动的,则可能会发生这种情况。
无论发生什么,可能都无所谓。如果您已经按上述方法修复了配置,那么您可以使用 修复其上下文restorecon
。
restorecon -v /var/lib/mysql/mysql.sock
允许您的 Web 应用程序与数据库通信非常简单,并且您已经这样做了:
setsebool -P httpd_can_network_connect_db 1
可能可选:
允许 Web 服务器进行任何网络连接很可能比您实际需要的要宽松得多。您可以通过反转布尔值来解决这个问题。
setsebool -P httpd_can_network_connect 0