Я использую php-fpm, выполняя приложение, которому требуется доступ, например /var/run/redis/redis-server.sock
В aa-identify или aa-enforce журналы захватываются хостом (а не контейнером) и появляются в / var / log / auditd / audit / log
например
type=AVC msg=audit(1572212584.295:206555): apparmor="DENIED" operation="connect" info="Failed name lookup - disconnected path" error=-13 namespace="root//lxd-containername_<var-lib-lxd>" profile="/usr/sbin/php-fpm7.2" name="run/redis/redis-server.sock" pid=20078 comm="php-fpm7.2" requested_mask="wr" denied_mask="wr" fsuid=100033 ouid=100113
Такое правило, как:
/var/run/redis/redis-server.sock rw
не предотвращает отказ в доступе. Как я могу разрешить этот доступ?
Я не уверен, почему в сообщении журнала отсутствует / var /
в начале пути.
РЕДАКТИРОВАТЬ: Похоже, что lxd / lxc не виноват, я воссоздал это в виртуальной машине.
По крайней мере, я могу ответить, почему name=
не имеет косой черты в начале и какие побочные эффекты это имеет. Ядро не заставляет открывать дескрипторы, чтобы включить косую черту в начале, с которой у apparmor есть проблемы . Обходной путь заключается в добавлении attach_disconnected
к флагам профиля apparmor вашего процесса. Это будет выглядеть примерно так...
profile usr.local.bin.taco_tuesday flags=(attach_disconnected) {
[stuff]
/run/redis/redis-server.sock rw
}
Использование /run
вместо /var/run
, потому что /var/run
очень часто является символической ссылкой на /run
, а AppArmor применяется только к реальным путям.