Я пытаюсь написать собственный профиль AppArmor для приложения PHP. Приложение PHP запускается PHP-FPM (основной процесс PHP). Я хочу ограничить все, что PHP выполняет через shell_exec/exec/proc_open/... специальным профилем /hat.
У меня следующая структура профилей:
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 новым профилем /hat?