Sto cercando di scrivere un profilo AppArmor personalizzato per un'applicazione PHP. L'applicazione PHP è gestita da PHP-FPM (processo principale PHP). Voglio limitare tutto ciò che PHP sta eseguendo tramite shell_exec / exec / proc_open / ... con un profilo / cappello speciale.
Ho la seguente struttura di profili:
docker-php-fpm
-> ^phpfpmmaster
-> ^userprogs
Ora phpfpmmaster (stranamente, apparmor non supporta i trattini nei nomi dei profili quando usato nelle transizioni) ha una regola per passare al profilo userprogs:
^phpfpmmaster flags=(attach_disconnected,mediate_deleted) {
..
/bin/dash rCx -> userprogs,
..
}
Ma audit.log dice che AppArmor non riesce a trovare il profilo:
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
Capisco che ciò potrebbe essere dovuto al fatto che Cx sta cercando il profilo figlio nel cappello ^ phpfpmmaster. Rendendolo un profilo / cappello figlio, apparmor_parser dice che non può sostituire il profilo perché non è stato trovato.
Ho quindi provato a nominare il cappello "phpfpmmaster // userprogs". apparmor_parser lo accetta, ma la transizione del profilo non riesce con "transizione del profilo non trovata".
Come posso limitare l'esecuzione / bin / dash a un nuovo profilo / cappello?