/etc/crypttab は initramfs では更新されません。

/etc/crypttab は initramfs では更新されません。

Ubuntu 22.04を新しくインストールし、Ubuntuインストーラオプションでフルディスク暗号化(LUKS)とZFSを選択しました。

/etc/crypttab自動方式(クールなUSB自動ロック解除)でドライブをロック解除するには、いくつかの編集を行う必要がありますが、編集内容は/etc/crypttabinitramfsに保持されません。

私がしていることは:

  • 編集する/etc/crypttab
  • 走るupdate-initramfs -u
  • LUKSパスワードを要求するシステム(initramfs)で自分のマシンを再起動します。
  • 内容を確認しましたが、/etc/cryptotabはありません。

仕組みが間違っていますか?一部のバージョンのcrypttabをローダーに保持する必要がありますが、機能しません。

私が間違っていることについてのアドバイスはありますか?

答え1

私も同じ問題があったのでGoogleで見つけて、追加する情報があってここに来ました。パスワードを入力せずにLUKSドライブを自動的にロック解除しようとしています。

まず、その/etc/crypttab項目を編集し、次のように変更しました。

sda3_crypt UUID=2d661ff8-d6a8-49c9-ae96-4d6e234bffe2 /dev/zero luks,discard,keyfile-size=32      

次に、次のコマンドを使用して新しいキーを追加しました。

sudo cryptsetup luksAddKey --new-keyfile-size 32 /dev/sda3 /dev/zero

最後に、update-initramfs次の出力を実行しました。

$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.0.0-2-amd64
cryptsetup: WARNING: sda3_crypt: key file /dev/zero has insecure ownership, see 
    /usr/share/doc/cryptsetup/README.Debian.gz.
cryptsetup: WARNING: Skipping root target sda3_crypt: uses a key file

すでに疑わしいようですが、とにかく再起動しました。残念ながら、これらの操作はシステムを起動できなくします。

Gave up waiting for suspend/resume device
Gave up waiting for root file system device: Common problems:
 - Boot args (cat /proc/cmdline)
   - Check rootdelay= (did the system wait long enough?)
 - Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/legend--vg-root does not exist. Dropping to a shell!


BusyBox v1.35.0 (Debian 1: 1.135.0-2) built-in shell (ash)
Enter 'help' for a list of built-in commands.

(initramfs) cat /etc/crypttab
cat: can't open '/etc/crypttab': No such file or directory

BusyBoxプロンプトで次のコマンドを入力して、システムを再起動することができました。

cryptsetup luksOpen --key-file /dev/zero --keyfile-size 32 /dev/sda3 sda3_crypt
exit

しかし、元の質問はまだ残っています。なぜ/etc/crypttabinitramfsで利用できないのですか?

修正する

より多くの調査を経て、ついに元の質問に答えることができます。/etc/crypttabinitramfsには存在しません。デフォルトではロック解除スクリプトはこの場所を使用せず/cryptroot/crypttabに代わりに使用します。

initramfsのように/etc/crypttab使用するには、/cryptroot/crypttabディレクトリに次のスクリプトを生成/etc/initramfs-tools/hooksして実行可能にします。

#!/bin/sh
cp /etc/crypttab "${DESTDIR}/cryptroot/crypttab"
exit 0

最後に、空のパスワードを使用してLUKSデバイスを自動的にロック解除すると、暗号化の目的が無効になることに注意してください。暗号化をまったく使用しないほど安全ではありません。

答え2

走っていないがsudo update-initramfs -u走っているsudo update-initramfs -c -k -all

新しいnvmeドライブを追加して暗号化した後、この問題が発生しました。

答え3

同様の問題がありましたが、この議論は上記のフックを追加することなく問題を解決するのに役立ちました。

暗号化されたパーティションはsda3にありますが、別のパーティションスキームを使用して以前の構成からデータをコピーしたため、/ etc / crypttabは次のようになります。

sda6_crypt UUID={uuid] ルークなし、削除

/etc/crypttabの名前と物理パーティションの不一致が原因でinitramfsイメージが生成されたときにエラーが発生するようです(これは、新しいカーネルをインストールするときや他のアップデートを実行するときも同様です)。私は見ませんでした。これにより、initramfs(/cryptroot/crypttabにあります)のファイルが空になります(0バイト)。不足しているファイルが起動プロセスを中断します。 /etc/crypttabを次に修正してください。

sda3_crypt UUID={uuid} ルークなし、削除

問題を解決しました。もちろん、initramfsでビープ音が鳴ったら、再生成する必要があります。

sudo update-initramfs -u

ただし、今後のアップデートは正常に機能します。

答え4

私は(以前にやけどをしていたので)もう一度確認します。 (これはUbuntu 20.04ですが、答えは22.04にも関連しています)

update-initramfs -c -k all私がしてmkdir /tmp/x; cd /tmp/x; unmkinitramfs -v /boot/initrd.img-$(uname -r) .確認した後/tmp/x/main/cryptroot/crypttab。内部は空です。

私の解決策は、/etc/cryptsetup-initramfs/conf-hookキーファイルスキーマを編集して生成することでした。私の最終設定は KEYFILE_PATTERN=/etc/cryptsetup-keys.d/*.keyconf-hookとmyroot UUID="8481c1f8-91d4-469d-9132-12d3948f503a" /etc/cryptsetup-keys.d/root.key luks,discard/etc/crypttabです。キー、行末改行文字なし当然ではない/etc/cryptsetuyp-keys.d/root.key

これを実行した後、initramfsを解凍するとmain/cryptroot/crypttab正常に見えるファイルが表示され、キーファイル(新しいファイル名を含む)がコピーされますmain/cryptroot/keyfiles/myroot.key(「myroot」はinitramfsのcrypttabのすべてのエントリと一致します)。

関連情報