Selinux php-fpm httpd 和 mariadb 套接字连接

Selinux php-fpm httpd 和 mariadb 套接字连接

包含重要细节的新注释

我刚刚运行了一些版本测试,结果如下: 好吧,这是我的最新更新:

  • 10.5 作品
  • 10.6 没有
  • 10.7 作品
  • 10.8 工作
  • ETC。

我本来希望使用 10.6,因为它是 LTS 版本……但显然它有问题。我目前在 MariaDB slack 频道上,但现在我将从 MariaDB 存储库恢复到 10.5,因为它已经支持了 2 年左右。我还缺少其他东西吗?除了 MariaDB 版本并重新启动该过程之外,我没有更改任何内容。

编辑注释以供参考

安装 EL Repo MariaDB 10.5 安装一个包“mysql-selinux”,默认的 repo(epel-release?)允许必要的通信,并且 php-fpm 可以正常连接到 mariadb。 MariaDB 存储库包似乎缺少此功能。我本来会在 AL 8.6 系统上安装 EL 存储库 MariaDB,但将其删除并使用 MariaDB 存储库进行常规操作。我在这里找到了“mysql-selinux”的来源,它不像我的“修复”那么简单:

https://github.com/devexp-db/mysql-selinux/blob/master/mysql.te

这个软件包没有安装在我的 8.6 系统上,但它可以工作...


我的系统在 AlmaLinux 8.6 上启用了 SELinux,运行良好。我正在使用 Remi 的 Repo 中的库存 AL 8.6 Apache/httpd (我认为是 2.4.37)和 php:

https://rpms.remirepo.net/wizard/

我最初使用以下说明直接从 MariaDB 存储库安装了 MariaDB 10.4:

https://mariadb.com/resources/blog/how-to-install-mariadb-on-rhel8-centos8/

SELinux 已启用,我不认为我专门为 php-fpm 连接到 mysql.sock 套接字/进程进行了任何自定义。我最近升级到了 MariaDB 10.6,同样是从 MariaDB repo 升级的,一切继续像往常一样工作。作为参考,我的“工作”验证是使用配置为通过本地套接字连接的 phpMyAdmin。

我已经使用库存 Apache/httpd (我认为是 2.4.51)安装了我的 AlmaLinux 9 VM。我使用相同的说明从同一存储库安装了 MariaDB 10.6。现在,我收到 SELinux 拒绝 php-fpm(作为 httpd_t 运行)尝试连接到 /var/lib/mysql/mysql.sock 进程(作为 unconfinsed_service_t 运行)的请求。此拒绝会阻止 phpMyAdmin(在 php-fpm 服务下运行)的连接和后续登录:

time->Mon Sep 26 22:14:07 2022
type=PROCTITLE msg=audit(1664244847.002:83): proctitle=7068702D66706D3A20706F6F6C20777777
type=SYSCALL msg=audit(1664244847.002:83): arch=c000003e syscall=42 success=no exit=-13 a0=5 a1=7ffc156c46b0 a2=1b a3=557032b785a0 items=0 ppid=706 pid=738 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="php-fpm" exe="/opt/remi/php74/root/usr/sbin/php-fpm" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1664244847.002:83): avc:  denied  { connectto } for  pid=738 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

这仅显示在我的 AL 9 安装上,AL 8.6 不会报告此拒绝并允许连接和后续登录。我检查了文件和进程 SELinux 上下文,它们在 8.6 和 9 之间是相同的。我还尝试了不同的 php-fpm 版本,包括我的 8.6 安装和 9 之间的相同版本(都是来自 Remi 的 php 7.4)。我尝试在 apache:apache 下和我的 phpMyAdmin 用户下使用 apache 组运行 fpm 池。

关于如何追踪这个问题有什么建议吗?我可以使用以下策略“修复”SELinux 拒绝,但它允许 httpd 连接到任何不受限制的进程:

module phpfpm_mariadb_socket 1.0;

require {
        type httpd_t;
        type unconfined_service_t;
        class unix_stream_socket connectto;
}

#============= httpd_t ==============
allow httpd_t unconfined_service_t:unix_stream_socket connectto;

我看到两个明显的差异:Apache 2.4.37 与 2.4.51(以及我无法追踪的潜在相关 SELinux 策略更改)和 EL 8.6 与 EL 9 SELinux 核心更改(两者都应用了“最新”可用更新)。我将 phpMyAdmin 安装从 8.6 系统复制到 9 系统,使用相同的用户名和相同的权限。我不认为 php-fpm user:group 配置与进程上下文相关,或者是吗?

答案1

我可以确认 AlmaLinux 9 上的 MariaDB 10.6 会发生这种情况,并且 @Brian 发布的 SELinux 策略有效。

相关内容