我有问题的SELinux特权与docker,在docker我运行mailcow,但现在我有一个空白的屏幕,看起来可能是特权的问题。
因为诊断是这样说的:SELinux正在阻止/usr/local/bin/php
读取文件/web/inc/init_db.inc.php
。
审核日志:
type=AVC msg=audit(1676319004.771:1087): avc: denied { read } for pid=14555 comm="php-fpm" name="init_db.inc.php" dev="dm-0" ino=135058961 scontext=system_u:system_r:container_t:s0:c706,c972 tcontext=system_u:object_r:container_file_t:s0:c89,c575 tclass=file permissive=0
type=SYSCALL msg=audit(1676319004.771:1087): arch=c000003e syscall=2 success=no exit=-13 a0=7fffc4e15850 a1=8000 a2=0 a3=0 items=1 ppid=6637 pid=14555 auid=4294967295 uid=82 gid=82 euid=82 suid=82 fsuid=82 egid=82 sgid=82 fsgid=82 tty=(none) ses=4294967295 comm="php-fpm" exe="/usr/local/sbin/php-fpm" subj=system_u:system_r:container_t:s0:c706,c972 key=(null)
type=CWD msg=audit(1676319004.771:1087): cwd="/web"
type=PATH msg=audit(1676319004.771:1087): item=0 name="/web/inc/init_db.inc.php" inode=135058961 dev=fd:00 mode=0100666 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:container_file_t:s0:c89,c575 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
我该怎么解决呢?
这是我尝试过的:ausearch -c 'php' --raw | audit2allow -M my-php semodule -X 300 -i my-php.pp
结果是:
compilation failed:
my-php.te:15:ERROR 'syntax error' at token 'mlsconstrain' on line 15:
# mlsconstrain file { ioctl read lock execute execute_no_trans } ((h1 dom h2 -Fail-) or (t1 != mcs_constrained_type -Fail-) ); Constraint DENIED
mlsconstrain file { write setattr append unlink link rename } ((h1 dom h2 -Fail-) or (t1 != mcs_constrained_type -Fail-) ); Constraint DENIED
/usr/bin/checkmodule: error(s) encountered while parsing configuration
[root@rhel ~]# semodule -X 300 -i my-php.pp
libsemanage.map_compressed_file: Unable to open my-php.pp
(No such file or directory).
libsemanage.semanage_direct_install_file: Unable to read file my-php.pp
(No such file or directory).
semodule: Failed on my-php.pp!
1条答案
按热度按时间hfyxw5xn1#
在高安全性的环境中,比如那些启用了SELinux的环境中,更新有一个破坏东西的习惯。同样的问题也发生在我在Centos Stream 9(RHEL上游)下安装Mailcow时。
发生这种情况是因为SELinux阻止了一个docker容器中的php脚本在MariaDB容器中执行操作,据我所知。这个操作只在更新到特定版本后发生一次。我所做的解决SELinux约束冲突而不永久禁用SELinux的方法是将其设置为许可仅临时,执行更新,然后将其设置回强制模式。基本上,作为root用户(或sudo),我执行了以下命令:
update.sh脚本位于mailcow-dockerized目录中,通常位于/opt中。(/opt/mailcow-dockerized/update.sh)
***注意:***我知道这不是理想的解决方案,理想的解决方案是在SELinux仍处于强制模式时运行更新脚本,但此解决方案对我来说足够安全,而且可能对大多数安装来说也足够安全。