デバイスが接続されていて、エラーがないか存在しない場合、起動時に中断された場合は、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が「デバイスのロック解除...」を報告する前に、2行目の「操作解除」が表示されます。

私は2つの異なるデバイス、つまりフルディスクブロック暗号化を使用するデバイスと暗号化パーティションを使用するデバイスでこれを試しましたが、違いはありません。

時々時間が経つと...

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方法です。デバイスが接続されているときにデバイスを開いてマウントするのではなく、アクセスするときにデバイスを開いてマウントします。これを理解すると、設定を理解しやすくなります。

2番目に注目すべき点は、ドキュメント(および一部のユーティリティ)がまだ更新されていないことですsystemd

これら2つのことを念頭に置いて、必要に応じてユニットをスキャンして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から来ています。これらの操作をrootとして実行してください。
    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ドライブが起動時に存在するか後で挿入するかに関係なく、シームレスにマウントされ、パスワードは不要です。

関連情報