UbuntuでのAppArmorのメモ
Posted: | Categories: ubuntu | Tags: apparmor, buildkit, nerdctl
背景
containerdをrootlessで動かそうとしたところAppArmorに引っかかってしまった
(私の場合、/mnt配下の追加ディスク上にコンテナイメージを置きたい、という背景があったため引っかかったと思われる)
標準的なディレクトリ以外で動作させようとした場合に問題になりそう。
下記のエラーが出た
Mar 6 00:39:00 marie-ms7817 systemd[1055]: Started libcontainer container d1b514a134af96a15f5062afe042fd8654d91b2be4bef27f9af5865e29d2cad7.
Mar 6 00:40:30 marie-ms7817 kernel: [ 7375.140738] audit: type=1400 audit(1709653230.078:103): apparmor="DENIED" operation="change_onexec" class="file" info="label not found" error=-2 profile="unconfined" name="nerdctl-default" pid=54813 comm="aa-exec"
apparmor=“DENIED operation=“change_onexec” このメッセージは、AppArmor(Linuxのセキュリティモジュールの一つ)が、実行時の権限変更を拒否したことを示している。 特に、name=“nerdctl-default"に関連する操作が拒否されており、これはコンテナのセキュリティポリシーに関連する問題を示唆している。 label not foundという部分から、特定のセキュリティラベルが見つからない、または適切に設定されていない可能性がある。
既存の設定前の確認
nerdctl-defaultに関連する設定があるか確認。 下記コマンドで現在のAppArmorの設定のリストを出力し設定があるか確認(無かった)
sudo aa-status
ポリシーファイルの作成
/etc/apparmor.d ディレクトリに nerdctl-default という名前の新しい AppArmor ポリシーファイルを作成する。
/etc/apparmor.d/nerdctl-default とした。
#include <tunables/global>
profile nerdctl-default flags=(attach_disconnected,mediate_deleted) {
/ r,
/dev/tty rw,
/dev/pts/** w,
/dev/null rw,
/etc/.ro*/ld.so.cache r,
/etc/ld.so.cache r,
/etc/locale.alias r,
/etc/nsswitch.conf r,
/etc/passwd r,
/mnt/append-disk/containerd/** rwk,
/proc/ r,
/proc/** r,
/sys/devices/system/** r,
/sys/kernel/mm/transparent_hugepage/hpage_pmd_size r,
/usr/bin/** rix,
/usr/lib/locale/locale-archive r,
/usr/lib/x86_64-linux-gnu/** rm,
/usr/lib/locale/** r,
/usr/share/terminfo/** r,
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/** rwk,
/var/lib/containerd/** rwk,
owner /** rwix,
network,
ptrace (read, readby) peer=nerdctl-default,
signal (receive) peer=nerdctl-default,
signal (receive) peer=unconfined,
signal (send) peer=nerdctl-default,
signal (send) set=kill peer=unconfined,
}
それぞれの意味。
Read more...