允许 apparmor 中的套接字访问

允许 apparmor 中的套接字访问

我正在使用 php-fpm 运行需要访问的应用程序,例如/var/run/redis/redis-server.sock

在 aa-complain 或 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 没有问题,我已经在虚拟机中重新创建了它。

答案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 仅在真实路径上强制执行。

相关内容