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
strace
cryptsetup
生成できないことを示します/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
、アプリケーションがユーザーの名前空間を無効にせずにランタイムに任意の暗号化ボリュームを作成してマウントできるように、コンテナ内で作業する方法はありますか?
関連質問
systemd-nspawn: フォルダのファイルシステム権限バインディングデバイス以外のファイルに関する唯一の答えは「
-U
主にrwと互換性がありません--bind
」です。systemd-nspawn:すべてのデバイスへのアクセスを許可する方法ユーザーの名前空間を扱わず、回答はありません。
答え1
権限がない可能性がありますm
。少なくとも最初の項目を指定する代わりに指定した場合はrwm
どうなりますか?rw
DeviceAllow