Dovecot lxc apparmor отклонен (Buster)

Dovecot lxc apparmor отклонен (Buster)

Я не могу запустить dovecot в lxc на Buster. Я отключаю 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

К сожалению, обновление сервисного модуля для избежания PrivateTmp не работает в LXC без предоставления необходимых привилегий через AppArmor на хосте.

После изучения вариантов выяснилось, что больше нет способа сделать это исключительно из контейнера.

Чтобы это заработало, я удалил все правки в контейнере (то есть избавился от конфигурации PrivateTmp) и перешел к изменению политик AppArmor следующим образом:

  1. На хосте создайте новую политику 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),
    }
    
  2. Перезагрузите AppArmor с помощью

    $ systemctl restart apparmor.service
    
  3. Настройте контейнер на использование нового профиля, добавив следующую строку в конфигурацию контейнера LXC, обычно по адресу /var/lib/lxc/$container/config:

    # Add or edit the following line to set the apparmor profile used
    lxc.apparmor.profile = lxc-container-dovecot
    
  4. Перезапустите контейнер:

    $ lxc-stop -n $container && sleep 1 && lxc-start -d -n $container
    

Связанный контент