我正在尝试为 PHP 应用程序编写自定义 AppArmor 配置文件。PHP 应用程序由 PHP-FPM(PHP 主进程)运行。我想使用特殊的配置文件/hat 限制 PHP 通过 shell_exec/exec/proc_open/... 执行的所有内容。
我有以下配置文件结构:
docker-php-fpm
-> ^phpfpmmaster
-> ^userprogs
现在 phpfpmmaster(奇怪的是,apparmor 在转换时不支持配置文件名称中的破折号)有一个转换到 userprogs 配置文件的规则:
^phpfpmmaster flags=(attach_disconnected,mediate_deleted) {
..
/bin/dash rCx -> userprogs,
..
}
但是 audit.log 说 AppArmor 找不到该配置文件:
type=AVC msg=audit(1525448842.598:1849368): apparmor="DENIED" operation="exec" info="profile transition not found" error=-13 profile="docker-php-fpm//phpfpmmaster" name="/bin/dash" pid=19686 comm="php-fpm" requested_mask="x" denied_mask="x" fsuid=377118 ouid=0
我理解这可能是因为 Cx 正在 ^phpfpmmaster 帽子中寻找子配置文件。使其成为子配置文件/帽子,apparmor_parser 说它无法替换配置文件,因为找不到它。
然后我尝试将帽子命名为“phpfpmmaster//userprogs”。apparmor_parser 接受了这个,但是配置文件转换仍然失败,并显示“未找到配置文件转换”。
我如何将 /bin/dash 执行限制在新的配置文件/帽子中?