我正在尝试从 php 脚本重新启动wireguard 服务,如下所示:
<?php
exec("sudo systemctl restart wg-quick@wg0", $output, $retval);
?>
Exec 不起作用。 $output 为空,$retval 为 4。我使用命令 command
semanage permissive -a httpd_t
将域 httpd_t 切换到宽容模式,然后 exec 工作,服务wireguard 成功重新启动,$retval 为 0。这是当 httpd_t 为宽容时,audit.log 的一部分(我只搜索了带有“拒绝”的行):
type=USER_AVC msg=audit(1729701110.392:226691): pid=1246 uid=81 auid=4294967295 ses=4294967295 subj=system_u:system_r:system_dbusd_t:s0-s0:c0.c1023 msg='avc: denied { send_msg } for msgtype=method_return dest=:1.271885 spid=1258 tpid=115666 scontext=system_u:system_r:systemd_logind_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=dbus permissive=0 exe="/usr/bin/dbus-daemon" sauid=81 hostname=? addr=? terminal=?'UID="dbus" AUID="unset" SAUID="dbus"
我遇到了模式“被拒绝”的问题,但我用命令解决了它们
setsebool -P httpd_mod_auth_pam 1
setsebool -P httpd_setrlimit 1
但我无法纠正上面最后一个错误..
我使用的是AlmaLinux 8.1
谢谢您的帮助。
仅出于有限测试的目的,运行 https permissive 可能没问题。切勿将其保持这种状态太长时间,并且切勿在生产机器上保持这种状态。 话虽这么说,如果您不想使用消息总线解决方案(这对我来说听起来更优雅),您可能需要编写自己的 SELinux 策略模块,以允许 httpd_t 通过 sudo 转换到全新的您自己的 SELinux 类型/域,名称类似于 php_wg_restarter_t。并且您允许您的这种新类型/域仅在wigeguard 服务上执行合法的操作集。 需要的话,您可能希望为所述wireguard 服务创建特定的SELinux 类型。