我无法在 Buster 上的 lxc 中运行 dovecot。我关闭了 PrivateTmp,但这还不够……仍然:
[ 4850.883141] audit: type=1400 audit(1563803461.322:34): apparmor="DENIED" operation="mount" info="failed flags match" error=-13 profile="lxc-container-default-cgns" name="/" pid=23810 comm="(dovecot)" flags="rw, rslave"
答案1
您是否尝试过使用不受限制的 AppArmor 值?
lxc.apparmor.profile: unconfined
将其设置到您的 /etc/pve/lxc/CTID.conf 中
答案2
遗憾的是,如果没有通过主机上的 AppArmor 授予必要的权限,则更新服务单元以避免 PrivateTmp 在 LXC 中不起作用。
在探索了所有选项之后,似乎不再有办法仅通过容器内部来实现这一点。
为了使其正常工作,我删除了容器中的所有编辑(因此摆脱了 PrivateTmp 配置)并转而修改 AppArmor 策略,如下所示:
在主机上,创建一个新的 AppArmor 策略
/etc/apparmor.d/lxc/lxc-dovecot
并填充以下内容:# Do not load this file. Rather, load /etc/apparmor.d/lxc-containers, which # will source all profiles under /etc/apparmor.d/lxc profile lxc-container-dovecot flags=(attach_disconnected,mediate_deleted) { #include <abstractions/lxc/container-base> #include <abstractions/lxc/start-container> deny mount fstype=devpts, mount fstype=cgroup -> /sys/fs/cgroup/**, mount fstype=cgroup2 -> /sys/fs/cgroup/**, mount options=(rw,bind), mount options=(rw,rbind), mount options=(rw,rshared), mount options=(ro,nosuid,noexec,remount,bind,strictatime), }
使用以下方法重新加载 AppArmor
$ systemctl restart apparmor.service
通过将以下行添加到 LXC 容器配置来设置容器以使用新的配置文件,通常位于
/var/lib/lxc/$container/config
:# Add or edit the following line to set the apparmor profile used lxc.apparmor.profile = lxc-container-dovecot
重新启动容器:
$ lxc-stop -n $container && sleep 1 && lxc-start -d -n $container