web-dev-qa-db-ja.com

オプションの外部パーティションでキーファイルを使用してsd-encrypt

環境

暗号化された/ homeパーティションがあり、パスフレーズとキーファイルを使用してロックを解除できます。このキーファイルは、私が家に置いているUSBドライブにあります。これは、旅行中に私のラップトップをバッグから盗んだ人は私の個人ファイルにアクセスできないことを意味しますが、私が家にいるときはそれを入力する必要はありません。システムの残りの部分(//bootなど)は暗号化されていません。これがセキュリティリスクになる可能性があることは承知していますが、それは私の懸念事項ではありません。

期待どおりに機能するもの

USBを正しく接続して起動すると、/ homeが復号化されてマウントされます。 「Bootwithpassphrase」を起動すると、パスフレーズを入力した後(USBが接続されているかどうかに関係なく)、/ homeが正しく復号化されてマウントされます。

期待どおりに機能しないもの

USBを接続せずに最初のオプション「USBまたはパスフレーズで起動」を起動すると、1分30秒後に次のエラーが発生します(!)。

systemd[1]: Timed out waiting for device /dev/disk/by-uuid/<USB_UUID>.
systemd[1]: Dependency failed for /run/systemd/cryptsetup/keydev-encHome.
systemd[1]: Dependency failed for Cryptography Setup for encHome.
systemd[1]: Dependency failed for Local Encrypted Volumes.

2番目のジョブがタイムアウトするまで1分30秒(!)待った後:

systemd[1]: dev-mapper-encHome.device: Job dev-mapper-encHome.device/start timed out.
systemd[1]: Timed out waiting for device /dev/mapper/encHome.
systemd[1]: Dependency failed for /home.
systemd[1]: Dependency failed for Local File Systems.
systemd[1]: Dependency failed for File System Check on /dev/mapper/encHome.

カーネルパラメータにrd.luks.options=timeout=16,keyfile-timeout=16rootflags=x-systemd.device-timeout=16が設定されているので、感嘆符を付けて1分30秒(!)と言います。したがって、これらは最大で16秒続くと思います。また、File System Checkを設定していても、fsck.mode=skipの依存関係が失敗したことにも驚いています。

2回目の失敗の後、パスフレーズを入力するためのプロンプトは表示されませんが、緊急シェル内に直接ダンプされます。

物事がうまくいくと私が期待した方法

USBがオンラインになるまで16秒間待機し、オンラインになる場合は/ homeを直接復号化するようにsystemdに要求します。そうでない場合は、パスフレーズを要求し、それを使用して/ homeを復号化します。

構成

/etc/mkinitcpio.conf

MODULES=()
HOOKS="base systemd autodetect modconf block keyboard sd-vconsole sd-encrypt filesystems fsck"

/ etc/fstab

/dev/mapper/encHome  /home  ext4  defaults  0  2

(キーファイル付きのUSBはここにはありません)

/ etc/crypttab

空の

/ etc/defaults/cryptsetup

存在しない

/boot/refind_linux.conf

"Boot with USB or passphrase"
    "ro root=UUID=<ROOT_UUID>
    apparmor=1 security=apparmor
    resume=UUID=<SWAP_UUID>
    initrd=/boot/intel-ucode.img initrd=/boot/initramfs-%v.img
    rd.luks.name=<CRYPT_UUID>=encHome
    rd.luks.key=<CRYPT_UUID>=/keyfile:UUID=<USB_UUID>
    rd.luks.options=timeout=16,keyfile-timeout=16
    rootflags=x-systemd.device-timeout=16
    fsck.mode=skip"

"Boot with passphrase"
    "ro root=UUID=<ROOT_UUID>
    apparmor=1 security=apparmor
    resume=UUID=<SWAP_UUID>
    initrd=/boot/intel-ucode.img initrd=/boot/initramfs-%v.img
    rd.luks.name=<CRYPT_UUID>=encHome"

(実際のファイルには改行がありませんが、読みやすくするために改行を追加しました)

lsblk -o name,fstype,uuid

NAME        FSTYPE      UUID
sda                     
├─sda2      swap        <SWAP_UUID>
├─sda4      crypto_LUKS <CRYPT_UUID>
│ └─encHome ext4
└─sda6      ext4        <ROOT_UUID>
sdb                     
└─sdb1      ext4        <USB_UUID>

(および他のいくつかの無関係なパーティション)

cryptsetup luksDump /dev/sda4

UUID: <CRYPT_UUID>
Key Slot 0: ENABLED  ( the passphrase )
Key Slot 1: ENABLED  ( the keyfile )

systemdサービス

systemd-fsck-root.serviceenabled-runtimeです

[email protected]は、キーファイルの起動時にstaticおよびactiveです(USBが接続されている場合)。

バージョン

uname -r
    5.5.2-1-MANJARO

core/systemd 242.153-3
core/cryptsetup 2.3.0-1.1
extra/refind-efi 0.11.3-1
2
Charlie

どうやら設定ファイルに問題はなかったようですが、

5.5.8-1-MANJARO
systemd 244.3-2

期待どおりに動作します。

0
Charlie