질문

질문

질문

cryptsetup closeflatpak 앱이 백그라운드에서 실행 중일 때 LUKS 볼륨을 얻을 수 없습니다 . 예, Flatpak 앱은 백그라운드에서만 실행하면 됩니다. 샌드박스 등에서 cryptsetup을 사용하고 싶지 않습니다. 응, 바로 이거야중 하나질문.

재현 단계

mkdir ~/mnt
dd if=/dev/zero of=file.img bs=1MiB count=100
sudo losetup /dev/loop4 file.img
sudo cryptsetup luksFormat /dev/loop4
sudo cryptsetup open /dev/loop4 my_crypt
sudo mkfs.fat  /dev/mapper/my_crypt
sudo mount  /dev/mapper/my_crypt ~/mnt
echo ayylmao | sudo tee ~/mnt/foobar.txt
sync

# <open a flatpak app, such as flatseal, in the background>

sudo umount ~/mnt
sudo cryptsetup close my_crypt

# output:
# device-mapper: remove ioctl on my_crypt  failed: Device or resource busy
# <the above line multiple times>
# Device my_crypt is still in use.

# <now close the flatpak app>

sudo cryptsetup close my_crypt
# Now it runs successfully

sudo losetup -d /dev/loop4

루프 장치와 비교하면 "실제" LUKS 장치 및무덤에스.

추가 진단

xdg-dbus-proxyFlatpak 응용 프로그램을 시작할 때 "기본" 네임스페이스에서 마운트 해제된 경우에도 어떤 이유로 LUKS 장치의 파일 시스템을 마운트된 상태로 유지하는 새 네임스페이스에서 호출되는 프로세스가 생성되는 것 같습니다 mnt. 그 후에도 동일했습니다. 예를 들어, lsnsflatseal을 시작하기 전의 출력은 다음과 같습니다 .

        NS TYPE   NPROCS   PID USER      COMMAND
4026531834 time       40  1452 renzev -bash
4026531835 cgroup     40  1452 renzev -bash
4026531836 pid        40  1452 renzev -bash
4026531837 user       40  1452 renzev -bash
4026531838 uts        40  1452 renzev -bash
4026531839 ipc        40  1452 renzev -bash
4026531840 net        40  1452 renzev -bash
4026531841 mnt        40  1452 renzev -bash

Flatseal을 시작한 후의 출력은 다음과 같습니다.

        NS TYPE   NPROCS   PID USER      COMMAND
4026531834 time       44  1452 renzev -bash
4026531835 cgroup     44  1452 renzev -bash
4026531836 pid        42  1452 renzev -bash
4026531837 user       41  1452 renzev -bash
4026531838 uts        44  1452 renzev -bash
4026531839 ipc        44  1452 renzev -bash
4026531840 net        42  1452 renzev -bash
4026531841 mnt        41  1452 renzev -bash
4026532233 user        1 11485 renzev xdg-dbus-proxy --args=42
4026532254 mnt         1 11485 renzev xdg-dbus-proxy --args=42
4026532256 mnt         2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532257 pid         2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532258 net         2 11488 renzev bwrap --args 40 com.github.tchx84.
4026532391 user        2 11488 renzev bwrap --args 40 com.github.tchx84.

네임스페이스로 이동하여 마운트된 파일 시스템을 검사하면 다음 ~/mnt을 볼 수 있습니다."default" 네임스페이스에서 마운트 해제한 후에도 여전히 마운트되어 있습니다.:

sudo nsenter -t 11485 -m bash
mount | grep mnt
/dev/mapper/my_crypt on /home/renzev/mnt type vfat (ro,nosuid,nodev,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)

네임스페이스 내에서 장치를 수동으로 마운트 해제하려고 하면 다음과 같은 흥미로운 출력이 표시됩니다.

mountpoint /home/renzev/mnt
/home/renzev/mnt is a mountpoint

umount /home/renzev/mnt
umount: /home/renzev/mnt: not mounted.

시스템 세부정보

잘못된 Linux입니다. cryptsetup 2.6.1 플래그: UDEV BLKID KEYRING KERNEL_CAPI. 플랫팩 1.15.6. 리눅스 6.3.13_1.

질문

모든 Flatpak 애플리케이션을 닫지 않고 LUKS 장치를 어떻게 종료합니까?

답변1

이 문제를 해결하는 데 도움을 준 @AB에게 감사드립니다! 이 답변이 앞으로 다른 사람들에게 도움이 되기를 바라며, 아주 철저하게 설명하도록 노력하겠습니다. 시작!

소개하다

네임스페이스는 프로세스 간 격리를 가능하게 하는 Linux의 기능입니다. 다양한 유형의 시스템 리소스를 격리하는 데 사용되는 다양한 유형의 네임스페이스가 있습니다. 이 문제에서 우리가 관심을 갖는 것은 mount namespaces탑재된 블록 장치(드라이브, 암호화된 볼륨, 디스크 이미지, CD, DVD 등)에 대해 다양한 프로세스에 다양한 보기를 제공하는 입니다. Flatpak은 샌드박스 기능의 일부로 마운트 네임스페이스를 사용합니다.

Linux에서 마운트에는 "전파"라는 속성이 있으며 이는 private또는 shared. 둘 사이의 차이점을 잘 이해하지 못하지만 중요한 것은 대부분의 최신 Linux 배포판에서 루트 파일 시스템 /shared.

질문

내 시스템에서는 루트 파일 시스템 privateshared. 어떤 이유로 이는 암호화된 볼륨을 마운트 해제하려고 할 때 flatpak에서 생성된 다양한 마운트 네임스페이스 내에서 마운트 해제 이벤트가 전파되지 않음을 의미합니다. 따라서 볼륨이 "기본" 네임스페이스에서 마운트 해제되더라도 flatpak의 네임스페이스 내에 마운트된 상태로 유지되어 LUKS 파티션을 사용 중으로 유지하여 해당 볼륨에 대한 작업을 방지 cryptsetup합니다 close.

해결책

해결책은 /전파를 통해 설치되었는지 확인하는 것입니다 shared. shared루트 파일 시스템 항목에 옵션을 추가하고 재부팅하면 됩니다 /etc/fstab. 예를 들어, 수정하기 전의 내 /etc/fstab모습은 다음과 같았습니다.

PARTLABEL=VOID_ROOT / btrfs lazytime,noatime,autodefrag,compress=zstd:3,discard=async,space_cache=v2,ssd 0 1
PARTLABEL=VOID_SWAP none swap sw 0 0
PARTLABEL=VOID_ESP /mnt/esp vfat defaults,noauto 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0

고치고 나면 다음과 같습니다.

PARTLABEL=VOID_ROOT / btrfs shared,lazytime,noatime,autodefrag,compress=zstd:3,discard=async,space_cache=v2,ssd 0 1
PARTLABEL=VOID_SWAP none swap sw 0 0
PARTLABEL=VOID_ESP /mnt/esp vfat defaults,noauto 0 0
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0

관련 정보