ユーザーの名前空間を持つsystemd-nspawnコンテナ内でデバイスを有効にする方法は?

ユーザーの名前空間を持つsystemd-nspawnコンテナ内でデバイスを有効にする方法は?

cryptsetup内部を使用して暗号化されたイメージファイルをインストールしたいと思います。systemd-nspawnコンテナ。ただし、次のエラー メッセージが表示されます。

[root@container ~]# echo $key | cryptsetup -d - open luks.img luks
Cannot initialize device-mapper. Is dm_mod kernel module loaded?
Cannot use device luks, name is invalid or still in use.

カーネルモジュールはdm_modホストシステムにロードされますが、コンテナの内部は少し奇妙に見えます。

[root@host ~]# grep dm_mod /proc/modules
dm_mod 159744 2 dm_crypt, Live 0xffffffffc12c6000

[root@container ~]# grep dm_mod /proc/modules
dm_mod 159744 2 dm_crypt, Live 0x0000000000000000

stracecryptsetup生成できないことを示します/dev/mapper/control

[root@etrial ~]# echo $key | strace cryptsetup -d - open luks.img luks 2>&1 | grep mknod
mknod("/dev/mapper/control", S_IFCHR|0600, makedev(0xa, 0xec)) = -1 EPERM (Operation not permitted)

なぜこれが起こるのかわかりません。コンテナを起動します。テンプレート[email protected]ユニット、これはデバイスマッパーへのアクセスを許可する必要があるようです。

# nspawn can set up LUKS encrypted loopback files, in which case it needs
# access to /dev/mapper/control and the block devices /dev/mapper/*.
DeviceAllow=/dev/mapper/control rw
DeviceAllow=block-device-mapper rw

読むUSB デバイスに関する問題に関するご意見、解決策がについてであるかどうか疑問に思います/dev/mapper。ただし、cryptsetupコンテナ内では同じエラーメッセージが表示されます。これはstraceまだ権限の問題があるようです。

# echo $key | strace cryptsetup open luks.img luks --key-file - 2>&1 | grep "/dev/mapper"
stat("/dev/mapper/control", {st_mode=S_IFCHR|0600, st_rdev=makedev(0xa, 0xec), ...}) = 0
openat(AT_FDCWD, "/dev/mapper/control", O_RDWR) = -1 EACCES (Permission denied)

# ls -la /dev/mapper
total 0
drwxr-xr-x 2 nobody nobody      60 Dec 13 14:33 .
drwxr-xr-x 8 root   root       460 Dec 15 14:54 ..
crw------- 1 nobody nobody 10, 236 Dec 13 14:33 control

明らかに、これはセキュリティ上の理由から、私が望むユーザーの名前空間がテンプレート単位で有効になっているために発生します。説明したように文書:

使用はコンテナのセキュリティを大幅に向上させ、ほとんどの場合完全に自動的に実行されるため、ほとんどの場合推奨オプションです... [これは]--private-users=pickテンプレート単位ファイルを使用する場合のデフォルトオプションです。[email protected]

[この--bindオプション]を一緒に使用すると、作成された--private-usersマウントポイントはユーザーが所有しますnobody。これは、マウントとそのファイルとディレクトリがコンテナに存在しないため、ワイルドカードUID 65534(nobody)の下に表示される接続されているホストユーザーとグループが所有しているためです。そのようなバインドマウントが作成された場合は--bind-ro=

おそらく読み取り専用権限では何もできないようです/dev/mapper。もしそうならcryptsetup、アプリケーションがユーザーの名前空間を無効にせずにランタイムに任意の暗号化ボリュームを作成してマウントできるように、コンテナ内で作業する方法はありますか?

関連質問

答え1

権限がない可能性がありますm。少なくとも最初の項目を指定する代わりに指定した場合はrwmどうなりますか?rwDeviceAllow

関連情報