Estou tentando escrever um perfil AppArmor personalizado para um aplicativo PHP. O aplicativo PHP é executado pelo PHP-FPM (processo mestre do PHP). Eu quero confinar tudo o que o PHP está executando via shell_exec / exec / proc_open / ... com um perfil especial / hat.
Eu tenho a seguinte estrutura de perfis:
docker-php-fpm
-> ^phpfpmmaster
-> ^userprogs
Agora, o phpfpmmaster (estranhamente, o apparmor não suporta traços em nomes de perfil quando usado em transições) tem uma regra para fazer a transição para o perfil userprogs:
^phpfpmmaster flags=(attach_disconnected,mediate_deleted) {
..
/bin/dash rCx -> userprogs,
..
}
Mas o audit.log diz que o AppArmor não consegue encontrar o perfil:
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
Eu entendo que isso pode ser porque o Cx está procurando o perfil filho no chapéu ^ phpfpmmaster. Tornando um perfil / chapéu filho, apparmor_parser diz que não pode substituir o perfil porque não foi encontrado.
Eu então tentei nomear o chapéu "phpfpmmaster // userprogs". apparmor_parser aceita isso, mas ainda assim a transição do perfil falha com "transição de perfil não encontrada".
Como posso limitar a execução de / bin / traço a um novo perfil / chapéu?