장치가 연결되어 있고 오류가 없거나 존재하지 않는 경우 부팅 시 중단되는 경우 LUKS 암호화된 외부 USB를 자동으로 마운트합니다.

장치가 연결되어 있고 오류가 없거나 존재하지 않는 경우 부팅 시 중단되는 경우 LUKS 암호화된 외부 USB를 자동으로 마운트합니다.

상상하다

LUKS로 암호화된 외부 장치를 사용하면 연결 시 자동으로 설치되며 부팅 시 외부 장치가 없어도 문제가 발생하지 않습니다.

이 주제에 대한 대부분의 질문은 부팅 시 설치와 관련되어 있습니다. 이는 제가 원하는 작업이 아닙니다.

또한 USB 장치가 없을 때 실수로 쓰기가 발생하지 않도록 마운트 지점을 보호해야 합니다.chattr +i <mountpoint>

질문

  1. 외부 장치가 마운트되지 않은 경우 마운트 지점에 액세스하려는 시도는 시간이 초과될 때까지 중단됩니다. 이로 인해 시스템이 불안정해질 수 있습니다.

  2. 장치가 연결되면 암호를 묻는 메시지가 표시되고 장치 잠금이 해제되지만 설치되지는 않습니다. 그런 다음 fstab 설정을 올바르게 사용하는 것처럼 보이는 mount /mnt/backup장치를 사용하거나 수동으로 마운트해야 했습니다 .mount /dev/mapper/fit

구성

# /etc/crypttab
fit   UUID=xxxxxxxx-xxxxx-xxxxxxxx-xxxxxxxxxx none luks,noauto
# /etc/fstab
/dev/mapper/fit    /mnt/backup   ext4    noatime,user,noauto,x-systemd.automount,x-systemd.device-timeout=5ms,x-systemd.mount-timeout=100ms    0   0

누군가 이름을 알고 싶어할 경우를 대비해 저는 우연히 Samsung Fit USB 플래시 드라이브를 가지고 있습니다.

외부 장치가 없을 때 마운트 지점에 액세스

# Accessing the mountpoint when the drive is NOT plugged in
andy@pop-os:mnt$ ll
ls: cannot access 'backup': No such device
total 0
d????????? ? ? ? ?            ? backup/

andy@pop-os:mnt$ mountpoint /mnt/backup
/mnt/backup is a mountpoint
# journalctl
Jan 21 16:33:34 pop-os systemd[1]: mnt-backup.automount: Got automount request for /mnt/backup, triggered by 5192 (ls)
Jan 21 16:33:34 pop-os systemd[1]: dev-mapper-fit.device: Job dev-mapper-fit.device/start timed out.
Jan 21 16:33:34 pop-os systemd[1]: Timed out waiting for device /dev/mapper/fit.
Jan 21 16:33:34 pop-os systemd[1]: Dependency failed for /mnt/backup.
Jan 21 16:33:34 pop-os systemd[1]: mnt-backup.mount: Job mnt-backup.mount/start failed with result 'dependency'.
Jan 21 16:33:34 pop-os systemd[1]: dev-mapper-fit.device: Job dev-mapper-fit.device/start failed with result 'timeout'.

정상적인 제거 과정

# Absolute path is required if not using sudo (`user` was set in fstab)
andy@pop-os:mnt$ umount /mnt/backup

andy@pop-os:mnt$ sudo cryptsetup close fit

andy@pop-os:mnt$ sudo eject /dev/sdx

잠정적 해결

마운트 지점을 마운트 해제하면(마운트된 장치가 없어도) 이 문제를 일시적으로 해결할 수 있지만 시스템을 재부팅하거나 장치를 다시 마운트/마운트 해제하면 문제가 다시 발생합니다.

andy@pop-os:mnt$ sudo umount backup

andy@pop-os:mnt$ ll
total 4.0K
drwxr-xr-x 2 root root 4.0K Jan 19 10:16 backup/

andy@pop-os:mnt$ lsattr
----i---------e------- ./backup

andy@pop-os:~$ mountpoint /mnt/backup
/mnt/backup is not a mountpoint

사용 noauto하고 포함하지 않으면 x-systemd.automount장치가 없을 때 부팅 시 디렉터리가 마운트 지점이 되는 문제를 방지할 수 있지만 장치가 잠금 해제된 상태로 유지되더라도 자동 마운트가 되지 않습니다.

외부 장치 설치

비밀번호를 입력하고 기기를 잠금 해제하라는 메시지가 표시됩니다.

andy@pop-os:mnt$ lsblk -f
NAME            FSTYPE      FSVER    LABEL     UUID                                   FSAVAIL FSUSE% MOUNTPOINTS
sdb             crypto_LUKS 2                  xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx                  
└─fit           ext4        1.0                yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy                  

andy@pop-os:mnt$ ll backup/
ls: cannot access 'backup/': No such device

MOUNTPOINTS는 비어 있습니다.

# journalctl -f
Jan 21 17:17:26 pop-os kernel: usb 6-2: new SuperSpeed USB device number 2 using xhci_hcd
Jan 21 17:17:26 pop-os kernel: usb 6-2: New USB device found, idVendor=090c, idProduct=1000, bcdDevice=11.00
Jan 21 17:17:26 pop-os kernel: usb 6-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jan 21 17:17:26 pop-os kernel: usb 6-2: Product: Flash Drive FIT
Jan 21 17:17:26 pop-os kernel: usb 6-2: Manufacturer: Samsung
Jan 21 17:17:26 pop-os kernel: usb 6-2: SerialNumber: 0123456789123
Jan 21 17:17:26 pop-os kernel: usb-storage 6-2:1.0: USB Mass Storage device detected
Jan 21 17:17:26 pop-os kernel: scsi host7: usb-storage 6-2:1.0
Jan 21 17:17:26 pop-os mtp-probe[10452]: checking bus 6, device 2: "/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb6/6-2"
Jan 21 17:17:26 pop-os mtp-probe[10452]: bus: 6, device: 2 was not an MTP device
Jan 21 17:17:26 pop-os mtp-probe[10467]: checking bus 6, device 2: "/sys/devices/pci0000:00/0000:00:08.1/0000:0b:00.4/usb6/6-2"
Jan 21 17:17:26 pop-os mtp-probe[10467]: bus: 6, device: 2 was not an MTP device
Jan 21 17:17:29 pop-os kernel: scsi 7:0:0:0: Direct-Access     Samsung  Flash Drive FIT  1100 PQ: 0 ANSI: 6
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: Attached scsi generic sg1 type 0
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: [sdb] 501253132 512-byte logical blocks: (257 GB/239 GiB)
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: [sdb] Write Protect is off
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: [sdb] Mode Sense: 43 00 00 00
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesnt support DPO or FUA
Jan 21 17:17:29 pop-os kernel:  sdb: sdb1
Jan 21 17:17:29 pop-os kernel: sd 7:0:0:0: [sdb] Attached SCSI removable disk
Jan 21 17:17:41 pop-os systemd[1]: Starting Cryptography Setup for fit...
Jan 21 17:17:41 pop-os systemd-cryptsetup[10585]: Volume fit already active.
Jan 21 17:17:41 pop-os systemd[1]: Finished Cryptography Setup for fit.
Jan 21 17:17:41 pop-os systemd[1]: Reached target Block Device Preparation for /dev/mapper/fit.
Jan 21 17:17:41 pop-os gnome-shell[3744]: Unable to mount volume 257 GB Encrypted: Gio.IOErrorEnum: Operation was cancelled
Jan 21 17:17:41 pop-os udisksd[1382]: Unlocked device /dev/sdb1 as /dev/dm-4

udisksd가 "장치 잠금 해제..."를 보고하기 전에 두 번째 줄 "작업 취소됨"이 나타납니다.

저는 두 개의 서로 다른 장치, 즉 전체 디스크 블록 암호화를 사용하는 장치와 암호화된 파티션을 사용하는 장치로 이것을 시도했지만 아무런 차이가 없습니다.

가끔 시간이 지나면...

andy@pop-os:mnt$ mount /mnt/backup
mount: /mnt/backup: /dev/mapper/fit already mounted on /mnt/backup.

...하지만 일반적으로 예상대로 장치가 설치됩니다.

기타 사항

  • 내가 설정하지 않으면x-systemd.device-timeout기본 90초보다 훨씬 짧으면 시스템이 천천히 응답하지 않게 되고 충돌이 발생합니다. systemd비밀번호 입력을 기다리는 동안 시간 초과가 있을 수 있다고 생각했지만 시간 초과가 길어도 도움이 되지 않는 것 같습니다.
  • 이전 Ubuntu 22.04 시스템의 구성을 Pop!_OS 22.04로 복사했는데 제거된 상태의 디렉터리를 나열할 때 물음표가 표시되는 경우가 있지만 자동 설치는 제대로 작동합니다. 이전 시스템에서는 마운트 지점에 불변 속성을 설정하지 않았습니다.

관련된


그렇다면 마운트 지점에 액세스하면 ??????????????????가 발생하는 이유는 무엇입니까? 이전 fstab과 새 systemd 사이에서 마법 변수를 찾을 수 없는 것 같습니다.

장치 시간 제한을 설정하지 않으면 시스템이 충돌하는 이유를 아는 것도 유용할 것입니다.


2023년 8월 업데이트됨

시스템 장치 마운트 및 자동 마운트...설명? ? ? ? .automount장치가 액세스를 위해 마운트 지점을 열려고 시도하는 경우 .

나는 여전히 내가 원하는 동작을 달성할 수 없으며 아무것도 구성되지 않았기 때문에 그것이 사용되고 있는지 궁금합니다 udev. 그렇다면 유일한 질문은 마운트 지점으로 사용되는 디렉터리를 사용자 정의할 수 있느냐는 것입니다. fstab항목이 생성되면 시스템 /run/systemd/generator단위가 생성되고 동작이 변경됩니다.

plymouthsystemd가 CPU를 100% 사용하고 시스템이 정지될 때 오류가 발생하므로 새 시스템에도 문제가 있는 것 같습니다 . 내 오래된 노트북에서는 이런 일이 발생하지 않습니다.

답변1

그냥 빨리 생각해보면...

아마도 udev스크립트/응용 프로그램을 시작하고 마운트 지점에 대한 디렉터리를 만든 다음 모든 cryptsetup 작업을 수행하는 경우일 수 있습니다. 스크립트는 USB 드라이브의 키를 사용할 수 있습니다.

fstab을 사용하지 않고 모든 작업을 완료해 보세요.

(죄송합니다. 귀하의 질문에 대해서는 답변을 드릴 수 없습니다.)

답변2

나는 내가 원하는 것을 거의 수행하는 솔루션을 생각해 냈습니다.

데이터가 위험에 빠지지 않도록 백업 장치에서 시도해 보는 것이 좋습니다.

가장 먼저 이해해야 할 것은 systemd-automount작동 방식입니다. 장치가 연결되어 있을 때 장치를 열어 마운트하는 것이 아니라 액세스할 때 장치를 열고 마운트합니다. 이것을 이해하면 설정을 더 쉽게 이해할 수 있습니다.

두 번째로 주목해야 할 점은 문서(및 일부 유틸리티)가 아직 업데이트되지 않았다는 것입니다 systemd.

이 두 가지 사항을 염두에 두고 필요에 따라 , 단위를 systemd스캔 하고 생성하는 방법을 알아야 합니다 . 다음에서 찾을 수 있습니다./etc/crypttab/etc/fstabmountautomountservice/run/systemd/generator/

다음 명령의 대부분에는 sudo액세스 권한이 필요합니다.

준비하다

자동 마운트는 키 파일을 사용하여 LUKS 컨테이너의 잠금을 해제할 때 가장 잘 작동합니다.


이 문제와 직접적인 관련은 없지만 LUKS 암호화 USB 드라이브에는 파티션을 포함할 필요가 없습니다. 실제로 원시 암호화 장치를 만드는 것이 좋습니다(인용 필요).


현재 키 홈을 볼 수 있으며 헤더를 백업해 두는 것이 좋습니다.

cryptsetup luksDump /dev/sdX

cryptsetup luksHeaderBackup --header-backup-file /root/<name>-header-backup /dev/sdX

그런 다음 새 키 파일을 생성하고 추가합니다.

dd if=/dev/urandom of=/root/<name>-keyfile bs=512 count=1
chmod 0400 /etc/cryptsetup-keys.d/crypt-backup.key
cryptsetup luksAddKey /dev/sdX /etc/cryptsetup-keys.d/crypt-backup.key

집에서 장치를 자동화할 수 있도록 암호와 키 파일이 있지만 키 파일을 공유하고 싶지 않은 다른 컴퓨터에서는 계속 액세스할 수 있습니다.

다음으로 제가 정말 유용하다고 생각한 것은 luks 헤더(및 선택적으로 파일 시스템)에 태그를 추가하는 것이었습니다. 이는 luks v2에서 가능하며 장치가 열릴 때까지(복호화될 때까지) 태그가 systemd에 표시됩니다.

저는 블루/그린 백업 전략을 사용하고 두 외부 드라이브에 동일한 레이블을 지정하여 동일한 위치에 마운트할 수 있습니다. 의 각 항목에 대해 설치 단위가 생성되므로 fstab항목은 고유해야 합니다. LUKS 제목 태그는 이 작업을 수행할 수 있는 유일한 장소입니다.

# cryptsetup config /dev/sdX --label <label>
cryptsetup config /dev/sda --label backup

# optional: also label the containing filesytem (must be open)
# e2label /dev/mapper/<label> <fs-label>
e2label /dev/mapper/backup fit

파티셔닝을 사용하지 않을 때는 , not이 됩니다 /dev/sdX./dev/sdX1

설정

먼저 나열한 다음 (사용하는 순서이기 때문에) /etc/crypttab나열하는 것이 합리적 이지만 systemd는 반대로 작동합니다. /etc/fstab마운트 지점에 액세스하려고 하면 fstab관련 파일 시스템을 찾아서 찾습니다. 그것이 무엇인가를 볼 때 /dev/mapper/, 그것은 보인다 crypttab.

LABEL에서 드라이브를 식별하는 것 외에 다른 방법을 사용할 수 있지만 에서 crypttab드라이브를 사용하는 것 외에 설치를 자동화하는 다른 방법을 찾을 수 없습니다./dev/mapper/fstab

# /etc/crypttab
backup LABEL=backup                              /etc/cryptsetup-keys.d/crypt-backup.key luks,nofail

이는 드라이브를 암호화하는 데 사용하려는 이름(이 예에서는 "backup")으로 시작됩니다. 그런 다음 장치를 식별해야 합니다. /dev/sdX유형 식별자는 시스템에 연결했거나 연결하지 않았을 수 있는 다른 항목에 따라 변경될 수 있으므로 사용하지 마세요 . UUID는 장치를 고유하게 식별하는 좋은 방법이지만 앞서 말했듯이 여러 장치를 같은 방식으로 마운트하고 싶기 때문에 를 사용합니다 LABEL. 그런 다음 키 파일의 위치를 ​​지정하거나 none비밀번호를 사용하려는 경우. 마지막으로 장치 luks를 Luks 장치로 식별하는 옵션이 있습니다.nofail구함하지만필수의시작시.

# /etc/fstab
/dev/mapper/backup /mnt/backup ext4   noatime,users,nofail,x-systemd.device-timeout=100ms,x-systemd.automount,x-systemd.idle-timeout=20min  0  0

/dev/mapper/backup를 사용해야 하는 필요성 , /mnt/backup존재해야 하는 마운트 지점, 파일 시스템 유형에 대해 논의했습니다 . 이제 옵션...

첫째, noauto, 그리고 auto노동조합과는 아무 짓도 하지 마세요 x-systemd.automount. 나는 nofail당신이 그것을 찾을 수 없다면 문서 중 일부는 오래되었다고 말하지만 man fstab그것이 당신이 사용하고 싶은 것입니다. 마찬가지로 장치가 없을 경우 부팅이 실패하는 것을 방지합니다. 내 시스템에는 장치가 필요하지만 찾을 수 없는 경우 90초의 시간 초과가 있지만 주의하지 않으면(가능한 경우) 정상적인 부팅 프로세스를 완전히 망치고 디스크를 복구해야 할 수 있습니다.

users모든 사용자가 장치를 설치하고 제거할 수 있도록 허용합니다. 일반적으로 user이렇게 설정합니다. mount장치 일 때는 umount사용할 수 없지만 우리가 사용하는 설치 sudo와 같습니다 . 이것이 귀하의 사용 사례에 미치는 영향을 고려하십시오.systemdusers

이제 진짜 위기 가 온다 x-systemd.device-timeout=100ms. 마운트 지점의 상위 디렉토리로 이동하여 작업을 수행하면 거기에 뭔가가 있어야 한다는 메시지가 시스템 ls -l????????표시되지만 찾을 수 없습니다. 이 작업 방식을 사용하면 장치가 존재하지 않을 때 마운트 지점에 어떤 내용도 기록되지 않습니다. 그러나 /mnt연결되지 않은 장치가 여러 개 있는 경우(정상적인 경우) 해당 장치가 나열될 때까지 하루 종일 기다리고 싶지는 않습니다. 선택 사항 입니다 x-systemd.idle-timeout=20min.

결과

lsblk기기 를 처음 실행하거나 접속하려고 하면 기기가 분실될 수 있습니다. 하지만 자동으로 설치되고 1~2초 후에 장치를 사용할 수 있습니다.

lsblk
# NAME            TYPE  FSTYPE      FSVER      SIZE LABEL     MOUNTPOINTS
# sda             disk  crypto_LUKS 2        117.2G backup

ls -l /mnt/backup
# ls: cannot access '/mnt/backup': No such device

ls -l /mnt/backup
total 24
# drwxrwxr-x 3 andy andy  4096 Sep  5  2023 desktop
# drwxrwxr-x 3 andy andy  4096 Sep  5  2023 desktop-backup
# drwx------ 2 root root 16384 Aug  4  2023 lost+found

lsblk
# NAME            TYPE  FSTYPE      FSVER      SIZE LABEL     MOUNTPOINTS
# sda             disk  crypto_LUKS 2        117.2G backup
# └─backup        crypt ext4        1.0      117.2G fit       /mnt/backup

ls /run/systemd/generator
# mnt-backup.automount
# mnt-backup.mount
# [email protected]

systemctl daemon-reload장치를 생성하려면 시스템을 실행 및/또는 다시 시작해야 할 수도 있습니다 .

결론적으로

이 문제를 파악하는 데 시간이 좀 걸렸습니다. 제가 이해한 것이 옳았기를 바랍니다. 더 배울 내용이 있을 것으로 확신합니다. 수정이 필요한 경우 수정/댓글을 남겨주세요.

답변3

udev방금 or 없이 이것을 구현했습니다 fstab. 머신은 Arch Linux, LTS 커널, SwayWM, FWIW입니다.

  • 외부 장치에 비밀번호를 저장하기 위해 시스템에 키 파일을 생성하는 것부터 시작하세요. 이 모든 것은 강력한 Arch Wiki에서 비롯됩니다. 이러한 작업을 루트로 수행하십시오.
    dd bs=512 count=4 if=/dev/urandom of=/my_keyfile.bin
    chmod 000 /my_keyfile.bin
    cryptsetup luksAddKey /dev/sdb1 /my_keyfile.bin
    
  • 귀하의 /etc/crypttab의견 중:
    blah  UUID=blah-blah-blah-blah  /my_keyfile.bin  noauto
    
  • 이제 설치 여부는 파일 관리자에게 맡기십시오. 

내가 사용하고 있는 것에는 pcmanfm-qt부팅 시 자동으로 시작할 수 있는 데몬 모드가 있습니다(Thunar에도 이 기능이 있는 것 같습니다). 따라서 파일 관리자 설정에서 이동식 드라이브를 자동으로 마운트할지 여부를 선택하세요.

USB SSD 드라이브가 부팅 시 존재하든 나중에 삽입하든 관계없이 원활하게 마운트되며 비밀번호가 필요하지 않습니다.

관련 정보