사용자 네임스페이스가 있는 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

관련 정보