Разрешение доступа к сокетам в apparmor

Я использую 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 не виноват, я воссоздал это в виртуальной машине.

0
задан 28 October 2019 в 03:24
1 ответ

По крайней мере, я могу ответить, почему 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 применяется только к реальным путям.

1
ответ дан 29 April 2020 в 23:52