Fedora 32 上的 SELinux 权限错误

Fedora 32 上的 SELinux 权限错误

我在 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

相关内容