「Dm-crypt/システム設定」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Translateme)
 
(同じ利用者による、間の8版が非表示)
1行目: 1行目:
{{Translateme|英語版の構成からかなり離れています。}}
 
 
{{Lowercase title}}
 
{{Lowercase title}}
 
[[Category:ディスク暗号化]]
 
[[Category:ディスク暗号化]]
 
[[en:dm-crypt/System configuration]]
 
[[en:dm-crypt/System configuration]]
  +
[[es:Dm-crypt (Español)/System configuration]]
{{Tip|リモートで root などのブートファイルシステムのロックを解除する必要がある場合 (ヘッドレスマシンや遠隔地のサーバーなど)、[[Dm-crypt/特記事項#root などのパーティションのリモート解除]]の指示に従って下さい。}}
 
  +
[[pt:Dm-crypt (Português)/System configuration]]
  +
[[ru:Dm-crypt (Русский)/System configuration]]
   
  +
{{Tip|
== mkinitcpio ==
 
  +
* ルートファイルシステムや他の初期ブートにおけるファイルシステムをリモートでアンロックする必要がある場合 (ヘッドレスマシンや遠隔地のサーバなど) は、[[dm-crypt/特記事項#root などのパーティションのリモート解除]] の指示に従ってください。
システムの暗号化をする場合、[[mkinitcpio]] を正しく設定した後に initial ramdisk を再生成する必要があります。特にシナリオによっては、以下のフックを有効しなくてはなりません:
 
  +
* コマンドの出力を挿入できる[[テキストエディタ]]を使用し、[[永続的なブロックデバイスの命名#永続的な命名の方法|適切な lsblk や blkid コマンド]]を使うことで、設定ファイルにおける UUID や PARTUUID などの入力作業を容易にできます (例えば、[[nano]] での {{ic|Ctrl+t}}、[[Vim]] や [[Neovim]] での {{ic|:read}}、[[mcedit]] での {{ic|Alt+u}})。あるいは、[[アプリケーション一覧/ユーティリティ#ターミナルマルチプレクサ|ターミナルマルチプレクサ]]を使用して、そのコピーペースト機能を使用することもできます。
  +
}}
  +
  +
== 初期ユーザ空間でロックを解除する ==
  +
  +
暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが [[initramfs]] に含まれている必要があります。ロックを解除するべきボリュームは、たいてい[[カーネルパラメータ]]で渡されます。
  +
  +
以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。
  +
  +
=== mkinitcpio ===
  +
  +
場合にもよりますが、以下の [[mkinitcpio#HOOKS|mkinitcpio フック]]の一部は有効化しておく必要があります:
  +
  +
{| class="wikitable"
  +
! busybox !! systemd !! ユースケース
  +
|-
  +
|style="text-align: center;white-space:nowrap;"| {{ic|encrypt}}
  +
|style="text-align: center;white-space:nowrap;"| {{ic|sd-encrypt}}
  +
| ルートパーティションが暗号化されている場合や、何らかの暗号化されているパーティションがルートパーティションのマウントよりも''前に''必要になる場合に必要です。その他の場合においては必要ありません。{{ic|/etc/crypttab}} などのシステム初期化スクリプトが、ルート以外のパーティションのロックを解除してくれるからです。このフックは {{ic|udev}} や {{ic|systemd}} フックよりも''後に''配置しなければなりません。
  +
|-
  +
|colspan="2" style="text-align: center;white-space:nowrap;"| {{ic|keyboard}}
  +
| 初期ユーザ空間でキーボードを動作させるために必要です。
  +
  +
{{Tip|起動するたびにハードウェアの構成が異なるようなシステム (例えば、外部キーボードと内部キーボードのあるノート PC や[[Wikipedia:Headless computer|ヘッドレスシステム]]) では、このフックを {{ic|autodetect}} より前に配置して、全てのキーボードドライバを initramfs に含めると便利です。そうしないと、initramfs イメージの生成時に外部キーボードが接続されていなければ、そのキーボードは初期ユーザ空間では動作しなくなってしまいます。}}
  +
|-
  +
|style="text-align: center;white-space:nowrap;"| {{ic|keymap}}
  +
|rowspan="2" style="text-align: center;white-space:nowrap;"| {{ic|sd-vconsole}}
  +
| 暗号化パスワードの入力において US キーマップ以外のサポートを提供します。このフックは、{{ic|encrypt}} フックよりも''前に''配置しなければなりません。さもないと、暗号化パスワードの入力にデフォルトの US キーマップしか使えません。キーマップは {{ic|/etc/vconsole.conf}} で設定してください ([[Linux コンソール/キーボード設定#永続的な設定]] を参照してください)。
  +
|-
  +
|style="text-align: center;white-space:nowrap;"| {{ic|consolefont}}
  +
| 初期ユーザ空間で代替のコンソールフォントをロードします。フォントは {{ic|/etc/vconsole.conf}} で設定してください ([[Linux コンソール/キーボード設定#永続的な設定]] を参照してください)。
  +
|}
   
  +
必要な[[mkinitcpio#通常のフック|その他のフック]]は、システムのインストールに関するその他のマニュアルから明らかなはずです。
* {{ic|encrypt}}: root パーティションや、root よりも''前''にマウントする必要があるパーティションを暗号化する場合に必ず必要。他の場合は必要ありません。{{ic|/etc/crypttab}} などのシステム初期化スクリプトが暗号化されたパーティションの鍵を解除してくれます。{{ic|encrypt}} フックを使用する場合、{{ic|udev}} フックよりも後に記述する必要があります。
 
* {{ic|sd-encrypt}}: systemd 版の {{ic|encrypt}} フックで {{ic|encrypt}} フックの代わりに使うことができます。必ず {{ic|systemd}} フックと一緒に使用する必要があります。
 
* {{ic|keymap}}: 英語以外のキーマップで暗号化パスワードを入力できるようになります。{{ic|encrypt}} フックより前に記述してください。キーマップの設定は {{ic|/etc/vconsole.conf}} で行います。詳しくは[[キーマップ#永続的な設定]]を参照。
 
* {{ic|keyboard}}: 初期ユーザー空間で USB キーボードを使えるようにするために必須です。
 
   
  +
{{Note|{{ic|/etc/mkinitcpio.conf}} に変更を加えたときは [[initramfs を再生成する]]のを忘れないでください。}}
[[mkinitcpio#通常のフック|他のフック]]についてはここでは触れません。
 
   
=== サンプル ===
+
==== ====
   
{{ic|encrypt}} フックを使用する {{ic|/etc/mkinitcpio.conf}} の設定:
+
{{ic|encrypt}} フックを使用する典型的な {{ic|/etc/mkinitcpio.conf}} の設定としては、以下のようになります:
   
 
{{hc|/etc/mkinitcpio.conf|2=
 
{{hc|/etc/mkinitcpio.conf|2=
 
...
 
...
HOOKS="base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 filesystems fsck"
+
HOOKS=(base '''udev''' autodetect modconf kms keyboard '''keymap''' '''consolefont''' block '''encrypt''' lvm2 filesystems fsck)
 
...
 
...
 
}}
 
}}
   
{{ic|sd-encrypt}} フックを使用する systemd ベースの initramfs の設定:
+
{{ic|sd-encrypt}} フックを使用するsystemd ベースの initramfs の設定:
   
 
{{hc|/etc/mkinitcpio.conf|2=
 
{{hc|/etc/mkinitcpio.conf|2=
 
...
 
...
HOOKS="base systemd autodetect keyboard sd-vconsole modconf block sd-encrypt sd-lvm2 filesystems fsck"
+
HOOKS=(base '''systemd''' autodetect modconf kms keyboard '''sd-vconsole''' block '''sd-encrypt''' lvm2 filesystems fsck)
 
...
 
...
 
}}
 
}}
   
== トローダー ==
+
=== ネルパラメ ===
暗号化された root パーティションを起動できるようにするには、以下のカーネルパラメータのサブセットを設定する必要があります: 設定する方法は[[カーネルパラメータ]]の使用している[[ブートローダー]]の手順を見て下さい。例えば [[GRUB]] を使用しているならブート設定を生成する前に {{ic|/etc/default/grub}} にパラメータを追加するのが良いでしょう。
 
   
必要なカーネルパラメータは {{ic|encrypt}} フックと {{ic|sd-encrypt}} フックのどちらを使用するかによって変わります。
+
必要な[[カーネルパラメータ]]{{ic|encrypt}} フックと {{ic|sd-encrypt}} フックのどちらを使かによります。{{ic|root}} と {{ic|resume}} は両方において同じように指定します。
   
  +
{{Tip|{{ic|sd-encrypt}} フックと [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]を使用する場合、これらのカーネルパラメータの指定は省略できます。[[dm-crypt/システム全体の暗号化#ブートローダーの設定]] を参照してください。}}
=== encrypt フックを使う ===
 
   
==== cryptdevice ====
+
==== root ====
このパラメータはコールドブート時に暗号化された root が含まれたデバイスのロックを解除するためにパスフレーズを要求するシステムプロンプトを作成します。どのデバイスに暗号化されたシステムが含まれているのか確認するために {{ic|encrypt}} フックによってパースされます:
 
   
  +
{{ic|1=root=}} パラメータでは、実際の (暗号化の解除された) ルートファイルシステムの {{ic|''device''}} を指定します:
cryptdevice=''device'':''dmname''
 
 
* {{ic|''device''}} は暗号化されたデバイスのパスです。[[永続的なブロックデバイスの命名]]を使うことを推奨します。
 
* {{ic|''dmname''}} は復号化後にデバイスに与えられる '''d'''evice-'''m'''apper の名前です。{{ic|/dev/mapper/''dmname''}} として使用できるようになります。
 
* LVM に [[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|暗号化されたルート]]が含まれる場合、最初に LVM が有効になって暗号化されたルートの論理ボリュームを含むボリュームグループが''デバイス''として使用できるようになります。それからボリュームグループがルートにマッピングされます。パラメータは {{ic|cryptdevice<nowiki>=</nowiki>''/dev/vgname/lvname'':''dmname''}} という形式になります。
 
 
==== root ====
 
{{ic|1=root=}} パラメータは実際の (暗号化を解除した後の) root ファイルシステムの {{ic|''device''}} を指定します:
 
   
 
root=''device''
 
root=''device''
   
* ファイルシステムが号化されたデバイスファイル上に直接フォーマットされている場合、{{ic|/dev/mapper/''dmname''}} なります。
+
* ルートファイルシステムが、暗号化の解除されたデバイスファイル上に直接フォーマットされている場合、このパラメータの引数は {{ic|/dev/mapper/''dmname''}} なります。
* LVM を先に有効にして[[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|暗号化した論理ルートボリューム]]を含めている場合、上記と同じになります。
+
* 最初に LVM がアクティブ化されいて、そこに[[dm-crypt/システム全体の暗号化#LUKS on LVM|暗号化されている論理ルートボリューム]]が存在している場合、引数は上記の形式と同じになります。
* root ファイルシステムが完全に[[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|暗号化され LVM]] の論理ボリュームに含まれている場合、device mapper は {{ic|root<nowiki>=</nowiki>/dev/mapper/''volumegroup''-''logicalvolume''}} となります。
+
* ルートファイルシステムが完全に[[dm-crypt/システム全体の暗号化#LVM on LUKS|暗号化されている LVM]] の論理ボリューム存在している場合、デバイスマッパー一般に {{ic|1=root=/dev/''volumegroup''/''logicalvolume''}} となります。
   
{{Tip|[[GRUB]] を使用する場合はこのパラメータを手動で指定する必要はありません。''grub-mkconfig'' を実行するだけで復号化された root ファイルシステムの UUID の確認が自動的に行われ、{{ic|grub.cfg}} で指定されます。}}
+
{{Tip|[[GRUB]] を使用していて、''grub-mkconfig'' で {{ic|grub.cfg}} を生成する場合は、{{ic|1=root=}} パラメータを手動で指定する必要はありません。''grub-mkconfig'' は、暗号化の解除されたルートファイルシステムの適切な UUID を検出しその UUID を {{ic|grub.cfg}} へ自動的に追加します。}}
   
 
==== resume ====
 
==== resume ====
  +
 
resume=''device''
 
resume=''device''
   
* {{ic|''device''}} は suspend2disk のために使れる号化された (スワップ) ファイルシステムのデバイスファイルです。スワップが別のパーティション上にある場合、{{ic|/dev/mapper/swap}} という形式になります。[[Dm-crypt/スワップの暗号化]]参照。
+
* {{ic|''device''}} は、[[電源管理/サスペンドとハイバネート#ハイバネーション|suspend to disk (ハイバネーション)]] で使用される、暗号化の解除された (スワップ) ファイルシステムのデバイスファイルです。スワップが別のパーティション上にある場合、{{ic|/dev/mapper/swap}} という形式になります。[[dm-crypt/スワップの暗号化]]参照してください
   
==== cryptkey ====
+
==== encrypt フックを使う ====
このパラメータはキーファイルの場所を指定し、{{ic|''encrypt''}} フックでキーファイルを読み込んで {{ic|''cryptdevice''}} のロックを解除するために必要です。(鍵がデフォルトの場所にある場合を除き、以下を参照) キーファイルが特定のデバイスにファイルとして存在するか、特定の場所から始まるビットストリームであるか、initramfsにファイルとして存在するかによって、3つのパラメータセットを持つことができます。
 
   
  +
{{Note|[[sd-encrypt]] フックと比べて、{{ic|encrypt}} フックは以下をサポートしていません:
デバイス内のファイルの場合、フォーマットは以下のようになります。
 
  +
* [[dm-crypt/特記事項#encrypt フックと複数のディスク|複数の暗号化ディスク]]のロック解除 ({{Bug|23182}})。initramfs 内で '''一つ'''のデバイスしかロックを解除できません。
  +
* [[dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化|デタッチされた LUKS ヘッダ]]の使用 ({{Bug|42851}})。
  +
* [[#crypttab|crypttab]] によってサポートされている追加オプションの設定 (例: {{ic|sector-size}}) ({{Bug|72119}})。
  +
}}
  +
  +
===== cryptdevice =====
  +
  +
このパラメータでは、コールドブート時に暗号化済みルートファイルシステムを含むデバイスを指定します。これは、{{ic|encrypt}} フックによってパースされ、どのデバイスに暗号化されているシステムが含まれているかを特定します:
  +
  +
cryptdevice=''device'':''dmname'':''options''
  +
  +
* {{ic|''device''}} は、暗号化されたデバイスのバッキングデバイスへのパスです。[[永続的なブロックデバイスの命名]]を使うことを強く推奨します。
  +
* {{ic|''dmname''}} は復号後にデバイスに与えられる '''d'''evice-'''m'''apper の名前です。{{ic|/dev/mapper/''dmname''}} として使用できるようになります。
  +
* {{ic|''options''}} (オプション) は、コンマで区切られたオプションです (TRIM サポートなど用)。オプションが必要ないのであれば、このパラメータは省略してください ({{ic|1=cryptdevice=''device'':''dmname''}})。
  +
* LVM に[[Dm-crypt/システム全体の暗号化#LUKS on LVM|暗号化されたルート]]が含まれる場合、最初に LVM が有効になって暗号化されたルートの論理ボリュームを含むボリュームグループが ''device'' として使用できるようになります。それからボリュームグループがルートにマッピングされます。パラメータは {{ic|1=cryptdevice=''/dev/vgname/lvname'':''dmname''}} という形式になります。
  +
  +
{{Tip|ソリッドステートドライブ (SSD) に対しては、[[dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート|Discard/TRIM のサポートを有効化する]]と良いかもしれません。}}
  +
  +
===== cryptkey =====
  +
  +
{{Tip|パスフレーズを使用するのであれば、{{ic|1=cryptkey=}} パラメータを手動で指定する必要はありません。その場合、ブート時にパスフレーズを入力するためのプロンプトが表示されます。}}
  +
  +
このパラメータはキーファイルの場所を指定します。{{ic|''encrypt''}} フックがそのキーファイルを読み込んで {{ic|''cryptdevice''}} のロックを解除するために必要です。(鍵がデフォルトの場所にある場合を除き (以下を参照)) キーファイルが特定のデバイスにファイルとして存在するか、特定の場所から始まるビットストリームであるか、initramfs にファイルとして存在するかによって、3つのパラメータセットを持つことができます。
  +
  +
デバイス内のファイルの場合、形式は以下のようになります:
   
 
cryptkey=''device'':''fstype'':''path''
 
cryptkey=''device'':''fstype'':''path''
   
* {{ic|''device''}} キーが存在する raw ブロックデバイス。
+
* {{ic|''device''}}: キーが存在する raw ブロックデバイス。[[永続的なブロックデバイスの命名]]を使うことを強く推奨します
* {{ic|''fstype''}} {{ic |'' device''}}(または auto)のファイルシステムタイプ。
+
* {{ic|''fstype''}}: {{ic|''device''}} のファイルシステムタイプ (auto を指定することも可)
* {{ic|''path''}} デバイス内のキーファイルの絶対パス。
+
* {{ic|''path''}}: デバイス内のキーファイルの絶対パス。
  +
  +
例: {{ic|1=cryptkey=LABEL=usbstick:vfat:/secretkey}}
   
  +
デバイス上のビットストリームの場合、キーの場所は次のように指定されます:
例: {{ic|1=cryptkey=/dev/usbstick:vfat:/secretkey}}
 
   
  +
For a bitstream on a device the key's location is specified with the following:
デバイス上のビットストリームの場合、キーの場所は次のように指定されます。
 
   
 
cryptkey=''device'':''offset'':''size''
 
cryptkey=''device'':''offset'':''size''
   
ここで、オフセットはバイト単位で、サイズはビット単位です。例: {{ic|1=cryptkey=/dev/sdZ:0:512}} は、デバイスの先頭から512ビットのキーファイルを読み込みます。
+
ここで、オフセットサイズはバイト単位です。例えば、{{ic|1=cryptkey=UUID=''ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ'':0:512}} は、デバイスの先頭にある 512 バイトのキーファイルを読み込みます。
   
  +
{{Tip|アクセスしたいデバイスのパスに {{ic|:}} 文字が含まれている場合、その文字をバックスラッシュ {{ic|\}} でエスケープしなければなりません。そのような場合、cryptkey パラメータは次のような見た目になります: ID {{ic|usb-123456-0:0}} の USB キーの場合、{{ic|1=cryptkey=/dev/disk/by-id/usb-123456-0\:0:0:512}}。}}
initramfs の中のファイル [[mkinitcpio#BINARIES と FILES|included]] の場合、フォーマットは [https://projects.archlinux.org/svntogit/packages.git/tree/trunk/encrypt_hook?h=packages/cryptsetup#n14] です。
 
  +
  +
Initramfs 内に[[mkinitcpio#BINARIES と FILES|含められている]]ファイルの場合、形式は次のようになります[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L14]:
   
 
cryptkey=rootfs:''path''
 
cryptkey=rootfs:''path''
90行目: 140行目:
 
例: {{ic|1=cryptkey=rootfs:/secretkey}}
 
例: {{ic|1=cryptkey=rootfs:/secretkey}}
   
また、{{ic|cryptkey}} が指定されていない場合、デフォルト {{ic|/crypto_keyfile.bin}} であることに注意してください。(initramfs内)[https://projects.archlinux.org/svntogit/packages.git/tree/trunk/encrypt_hook?h=packages/cryptsetup#n8]
+
また、{{ic|cryptkey}} が指定されない場合、デフォルトで (initramfs 内の) {{ic|/crypto_keyfile.bin}} が指定されたものとみなされることに注意してください。[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L8]
   
[[Dm-crypt/デバイスの暗号化#キーファイル]] 参照。
+
[[dm-crypt/デバイスの暗号化#キーファイル]] 参照してください
   
==== crypto ====
+
===== crypto =====
   
のパラメーターは、"dm-crypt" プレーンモードオプションを "encrypt" フックに渡すため固有です。
+
は、''dm-crypt'' プレーンモードオプションを ''encrypt'' フックに渡すため固有のパラメータです。
   
以下の形式をります
+
以下の形式をります:
{{bc|<nowiki>crypto=</nowiki><hash>:<cipher>:<keysize>:<offset>:<skip>}}
 
   
  +
crypto=''hash'':''cipher'':''keysize'':''offset'':''skip''
引数は ''cryptsetup'' のオプションと直接関連します。[[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]]を見て下さい。
 
   
  +
引数は、''cryptsetup'' のオプションと直接関連します。[[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照してください。
'' plain'' デフォルトオプションのみで暗号化されたディスクの場合、{{ic | crypto}} 引数を指定する必要がありますが、各エントリは空白のままにすることができます。
 
{{bc|<nowiki>crypto=::::</nowiki>}}
 
引数の具体例は次のとおりです。
 
{{bc|<nowiki>crypto=sha512:twofish-xts-plain64:512:0:</nowiki>}}
 
   
  +
''plain'' のデフォルトオプションのみで暗号化されたディスクの場合、{{ic|crypto}} 引数を指定しなければなりませんが、各エントリは空白のままにすることができます:
=== sd-encrypt フックを使う ===
 
   
  +
crypto=::::
以下の {{ic|luks}} は全て {{ic|rd.luks}} に置き換えられます。{{ic|luks}} パラメータはメインシステムと initrd の両方には反映されます。{{ic|rd.luks}} パラメータは initrd にだけ反映されます。他のオプションなど詳細については {{man|8|systemd-cryptsetup-generator}} を参照してください。
 
   
  +
引数の具体的な例は以下の通りです:
{{Tip|{{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、[[mkinitcpio]] は {{ic|/etc/crypttab}} として initramfs に追加します。}}
 
   
  +
crypto=sha512:twofish-xts-plain64:512:0:
{{Note|ルートファイルシステムで {{ic|luks.*}} カーネルパラメータを使用し、さらに {{ic|/etc/crypttab}} でスワップを記述すると [[systemd]] は "Not creating device 'swap' because it was not specified on the kernel command line." というエラーを吐きます。この問題を解決するには代わりに {{ic|rd.luks.*}} パラメータを使ってください。}}
 
   
==== luks.uuid ====
+
==== systemd-cryptsetup-generator を使う ====
   
  +
''systemd-cryptsetup-generator'' は、暗号化されたデバイスのロックを解除するために、[[カーネルパラメータ]]のサブセットと {{ic|/etc/crypttab}} を読み込む [[systemd]] ユニットジェネレータです。このジェネレータに関する詳細やサポートされている全オプションについては、{{man|8|systemd-cryptsetup-generator}} man ページを参照してください。
luks.uuid=''UUID''
 
   
  +
''systemd-cryptsetup-generator'' は、{{ic|sd-encrypt}} [[Mkinitcpio#HOOKS|mkinitcpio フック]]や {{ic|systemd}} [[Dracut#Dracut モジュール|dracut モジュール]]が使用される [[Arch ブートプロセス#initramfs|initramfs の段階]]で実行されます。
このフラグで、起動時に復号化するデバイスの UUID を指定します。UUID が {{ic|/etc/crypttab}} にある場合、そこに記載されているオプションが使用されます。
 
   
  +
以下では、''systemd-cryptsetup-generator'' によって使用される[[カーネルパラメータ]]の一部を説明します。
==== luks.name ====
 
   
  +
{{Tip|
luks.name=''UUID''=''name''
 
  +
* {{ic|/etc/crypttab.initramfs}} ファイルが存在する場合、{{ic|/etc/crypttab}} として initramfs に追加されます。このファイルには、initramfs の段階でロックを解除する必要のあるデバイスを指定できます。このファイルの構文は [[#crypttab]] を参照してください。{{ic|/etc/crypttab.initramfs}} が存在しない場合、{{ic|/etc/crypttab}} は initramfs に追加されず、ロック解除可能なデバイスは以下に挙げるカーネルパラメータで指定する必要があります。
  +
* {{ic|/etc/crypttab.initramfs}} では、{{ic|rd.luks}} のように UUID 以外も使用できます。[[永続的なブロックデバイスの命名#永続的な命名の方法|永続的なブロックデバイスの命名方法]]のうち任意のものを使用できます。
  +
* ブート中に入力されたパスワードは {{man|8|systemd-cryptsetup}} によってカーネルのキーリングにキャッシュされます。なので、同じパスワードで複数のデバイスのロックを解除できる場合 (これには、ブート後にロックを解除される [[#crypttab|crypttab]] 内のデバイスも含まれます)、そのパスワードの入力は1度だけで済みます。
  +
}}
   
  +
{{Note|
LUKS パーティションを開いた後のマッピングされたデバイスの名前を指定します。例えば、{{ic|1=''UUID''=cryptroot}} と指定すると、アンロックされたデバイスは {{ic|/dev/mapper/cryptroot}} に配置されます。これを指定しない場合、マップされたデバイスは {{ic|/dev/mapper/luks-''UUID''}} に位置し、 ''UUID'' は LUKS パーティションの UUID になります。
 
  +
* {{ic|rd.luks}} パラメータ群はすべて複数回指定することが可能であり、LUKS で暗号化された複数のボリュームのロックを解除できます。
  +
* {{ic|rd.luks}} パラメータは LUKS デバイスのロック解除のみをサポートしています。Plain な dm-crypt デバイスのロックを解除するには、そのデバイスを {{ic|/etc/crypttab.initramfs}} 内で指定しなければなりません。このファイルの構文は [[#crypttab]] を参照してください。
  +
}}
   
  +
{{Warning|{{ic|/etc/crypttab}} か {{ic|/etc/crypttab.initramfs}} を使用していて、かつ {{ic|luks.*}} パラメータか {{ic|rd.luks.*}} パラメータも使用している場合、カーネルコマンドラインで指定されたデバイスしかアクティブ化されず、{{ic|Not creating device 'devicename' because it was not specified on the kernel command line.}} というメッセージが表示されます。これは、{{ic|luks.*}} パラメータや {{ic|rd.luks.*}} パラメータが、crypttab のデバイスのうちどれをアクティブ化するかを制御するからです。{{ic|/etc/crypttab}} 内の全デバイスをアクティブ化するには、{{ic|luks.*}} パラメータを使用せず、{{ic|rd.luks.*}} を使用してください。{{ic|/etc/crypttab.initramfs}} 内の全デバイスをアクティブ化するには、{{ic|luks.*}} も {{ic|rd.luks.*}} も使用しないでください。}}
これは {{ic|encrypt}} の {{ic|cryptdevice}} の第2パラメータと同じです。
 
   
==== luks.options ====
+
===== rd.luks.uuid =====
   
  +
{{Tip|{{ic|rd.luks.name}} を使用する場合、{{ic|rd.luks.uuid}} は省略できます。}}
luks.options=UUID=''options''
 
   
  +
rd.luks.uuid=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''
または:
 
   
  +
ブート時に復号するデバイスの [[UUID]] をこのフラグで指定します。
luks.options=''options''
 
   
  +
デフォルトでは、マッピングされたデバイスは、{{ic|/dev/mapper/luks-''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''}} に配置されます。''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' は LUKS パーティションの UUID です。
{{ic|UUID}} の後に記載されているデバイス、または指定されていない場合は、他の場所で指定されていないすべての UUID (例: crypttab) に対してオプションを指定します。
 
   
  +
===== rd.luks.name =====
これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第3パラメータとほぼ同じです。
 
   
  +
{{Tip|このパラメータを使用する場合、{{ic|rd.luks.uuid}} は省略できます。}}
crypttab のオプションと同様の形式に従い、オプションはカンマで区切り、値を持つオプションは {{ic|1=''option''=''value''}} を使って指定します。
 
   
  +
rd.luks.name=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''name''
例:
 
   
  +
LUKS パーティションが開かれたあとにマッピングされるデバイスの名前を指定します。''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' は LUKS パーティションの UUID です。これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第2パラメータと等価です。
luks.options=timeout=10s,swap,cipher=aes-cbc-essiv:sha256,size=256
 
   
  +
例えば、{{ic|1=rd.luks.name=12345678-9abc-def0-1234-56789abcdef0=root}} を指定すると、UUID {{ic|12345678-9ABC-DEF0-1234-56789ABCDEF0}} のロック解除された LUKS デバイスは、{{ic|/dev/mapper/root}} に配置されます。
==== luks.key ====
 
   
luks.key=''mykeyfile''
+
===== rd.luks.key =====
   
{{ic|luks.UUID}} で指定たデバイスを復号する使るパスワードファイルの場所を指定します。{{ic|encrypt}} フックのパラメータようデフォルトの場所というものは存在しません。
+
UUID で指定されたデバイスを復号するに用るパスワードファイルの場所を指定します。{{ic|encrypt}} フックの {{ic|cryptkey}} パラメータにあるようデフォルトの場所は存在しません。
   
  +
キーファイルが [[mkinitcpio#BINARIES と FILES|initramfs 内に含まれている]]場合は:
== crypttab ==
 
{{ic|/etc/crypttab}} (encrypted device table) ファイルにはシステムの起動時にロックを解除する暗号化デバイスのリストを記述します。[[fstab]] と似ています。crypttab ファイルを使うことで暗号化したスワップデバイスやセカンダリファイルシステムを自動でマウントすることが可能です。
 
   
  +
rd.luks.key=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''/path/to/keyfile''
{{ic|crypttab}} は [[fstab]] よりも''前''に読み込まれるので、ファイルシステムの中身がマウントされる前に dm-crypt コンテナのロックを解除できます。ただし crypttab が読み込まれるのはシステムが起動した''後''なので、[[Dm-crypt/システム全体の暗号化|root を暗号化]]する場合に、[[#mkinitcpio|mkinitcpio]] フックや[[#ブートローダー|ブートローダーのオプション]]でロックを解除するのを代替することはできません。ブート時の crypttab の処理は {{ic|systemd-cryptsetup-generator}} によって自動的に行われるため、特に有効化する必要はありません。
 
   
  +
あるいは
詳しくは {{man|5|crypttab}} を見てください。デバイスの UUID を使って設定する方法は[[#起動時にマウント]]セクションを見てください。
 
   
  +
rd.luks.key=''/path/to/keyfile''
{{Note|1=[[systemd-boot]] と {{ic|sd-encrypt}} フックを使用する場合、ルートパーティション以外のパスフレーズがルートパーティションのパスフレーズと同じであれば、パスフレーズがキャッシュされるためルートパーティション以外に crypttab を配置する必要はありません。詳しくは [https://bbs.archlinux.org/viewtopic.php?id=219859 こちらのスレッド] を参照。}}
 
   
  +
{{Tip|キーファイルが {{ic|/etc/cryptsetup-keys.d/''name''.key}} として含まれている場合、{{ic|rd.luks.key}} パラメータは完全に省略できます。}}
{{Warning|''dm-crypt'' の [[dm-crypt/デバイスの暗号化#plain モードの暗号化オプション|plain モード]] ({{ic|--type plain}}) を使用する場合、{{ic|crypttab}} エントリを処理する際に [[systemd]] によって問題が発生することがあります:
 
* キーファイルを持つ {{ic|--type plain}} デバイスの場合、 [https://bugs.freedesktop.org/show_bug.cgi?id&#61;52630 systemd incompatibility] のため、 crypttab に {{ic|1=hash=plain}} オプションを追加する必要があります。これを回避するためにデバイスの作成に手動で {{ic|systemd-cryptsetup}} を使用することは'''しないでください''''
 
* さらに、ブート時に {{ic|systemd-cryptup}} が {{ic|--type plain}}) デバイスを認識するように強制するために、明示的に {{ic|plain}} オプションを追加することが必要かもしれません。[https://github.com/systemd/systemd/issues/442 GitHub issue in question.]}}
 
   
  +
キーファイルが他のデバイス上に存在する場合は:
{{Warning|''nofail'' オプションが指定された場合、パスワードの入力中にパスワード入力画面が消えてしまうことがあります。''nofail'' はキーファイルを使用する場合にのみ使ってください。}}
 
   
  +
rd.luks.key=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''/path/to/keyfile'':UUID=''ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ''
{{hc|/etc/crypttab|<nowiki>
 
  +
# Example crypttab file. Fields are: name, underlying device, passphrase, cryptsetup options.
 
  +
{{ic|1=UUID=''ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ''}} の部分は、キーファイルの存在するデバイスの識別子に置き換えてください。
# Mount /dev/lvm/swap re-encrypting it with a fresh key each reboot
 
  +
  +
{{Warning|
  +
* ファイルシステムの種類がルートファイルシステムのものと異なる場合は、[[mkinitcpio#MODULES|そのファイルシステム用のカーネルモジュールを initramfs 内に含める]]必要があります。
  +
* {{ic|rd.luks.key}} で他のデバイス上のキーファイルを指定した場合、デバイスが利用できない場合にデフォルトではパスワードプロンプトにフォールバックしません。パスワードプロンプトにフォールバックさせるには、{{ic|rd.luks.options}} で {{ic|1=keyfile-timeout=}} を指定してください。例えば、10秒のタイムアウトを設定するには: {{bc|1=rd.luks.options=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=keyfile-timeout=10s}}。
  +
}}
  +
  +
===== rd.luks.options =====
  +
  +
rd.luks.options=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''options''
  +
  +
または
  +
  +
rd.luks.options=''options''
  +
  +
UUID を指定した場合、そのデバイスに対してオプションを設定します。UUID を指定しなかった場合、他の場所 (例えば crypttab) で指定しなかった全デバイスに対してオプションを設定します。
  +
  +
このパラメータは [[#crypttab|crypttab]] のオプションフィールドに似ています。形式は同じです。オプションはコンマで区切られ、値のあるオプションは {{ic|1=''option''=''value''}} のように指定します。これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第3パラメータとほぼ等価です。
  +
  +
例えば:
  +
  +
rd.luks.options=timeout=10s,discard,password-echo=no,tries=1
  +
  +
====== タイムアウト ======
  +
  +
ブート中にパスワードを入力する際のタイムアウトを設定するオプションは2つあります:
  +
  +
* {{ic|1=rd.luks.options=timeout=''mytimeout''}} は、パスワードをクエリする際のタイムアウトを指定します。
  +
* {{ic|1=rootflags=x-systemd.device-timeout=''mytimeout''}} は、rootfs デバイスが現れるまで systemd がどれだけ待つかを指定します (デフォルトは 90 秒)。
  +
  +
タイムアウトを両方無効化したい場合は、両方のタイムアウトをゼロに設定してください:
  +
  +
rd.luks.options=timeout=0 rootflags=x-systemd.device-timeout=0
  +
  +
====== Password echo ======
  +
  +
ユーザがパスワードを入力する際、''systemd-cryptsetup'' はデフォルトで、入力された各文字をアスタリスク ({{ic|*}}) として表示します。これは {{ic|encrypt}} の挙動とは異なります ({{ic|encrypt}} は何も表示しません)。何も表示させないようにするには、{{ic|1=password-echo=no}} オプションを設定してください:
  +
  +
rd.luks.options=password-echo=no
  +
  +
====== Trusted Platform Module と FIDO2 鍵 ======
  +
  +
あなたのシステム上で [[TPM|TPM2]] チップが利用可能である、あるいは FIDO2 互換のセキュリティキーを使用している場合、パスワードやキーファイルを使わずにボリュームのロックを自動的に解除できます。
  +
  +
{{ic|rd.luks.uuid}} か {{ic|rd.luks.name}} に加えて、以下を設定してください:
  +
* TPM2 チップの場合: {{ic|1=rd.luks.options=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=tpm2-device=auto}}
  +
* FIDO2 鍵の場合: {{ic|1=rd.luks.options=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=fido2-device=auto}}
  +
  +
あるいは、{{ic|/etc/crypttab.initramfs}} を使えば、カーネルオプションで指定する必要はありません。
  +
  +
{{hc|/etc/crypttab.initramfs|2=
  +
root UUID=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' none tpm2-device=auto
  +
}}
  +
  +
{{Note|{{ic|/etc/crypttab.initramfs}} に変更を加えた後に [[initramfs を再生成する]]ことを忘れないでください。}}
  +
  +
ここでは、暗号化されたボリュームは {{ic|root}} という名前で ({{ic|/dev/mapper/root}} に) マウントされます。対象のストレージデバイスの UUID でマウントされ、パスワードは使われず、TPM2 デバイスからキーが取得されます。
  +
  +
TPM2 デバイスを使用するにはパスワードのフィールドに {{ic|none}} を指定しなければならないことに注意してください。さもないと、与えられた値がパスワードか鍵として使用されてしまい、それがうまくいかなかった場合に TPM2 デバイスからキーを読み込もうとせずにパスワードプロンプトが表示してしまいます。
  +
  +
上記のようにデバイスを UUID で指定する場合、それが基底のストレージデバイス (つまり、暗号化されているデバイス自体) の UUID であるを確認してください (他の場所でルートファイルシステムとして指定される、復号さらた後のボリュームの UUID ではありません)。
  +
  +
===== rd.luks.data =====
  +
  +
デタッチされた LUKS ヘッダを使用する場合、暗号化されたデータが含まれるブロックデバイスを指定してください。ヘッダファイルの場所は {{ic|rd.luks.options}} で指定する必要があります。
  +
  +
詳細や方法は [[dm-crypt/特記事項#Encrypted system using a detached LUKS header]]{{Broken section link}} を参照してください。
  +
  +
== 後期ユーザ空間でロックを解除する ==
  +
  +
=== crypttab ===
  +
  +
{{ic|/etc/crypttab}} (encrypted device table) ファイルには、システムの起動時にロックを解除する暗号化デバイスのリストを記述します。[[fstab]] と似ています。このファイルを使うことで、暗号化したスワップデバイスやセカンダリファイルシステムを自動でマウントすることが可能です。
  +
  +
{{ic|crypttab}} は {{ic|fstab}} より''前に''読み込まれます。dm-crypt コンテナを、その内部に存在するファイルシステムよりも前にアンロックできるようにするためです。{{ic|crypttab}} は、システムの起動した''後に''読み込まれることに注意してください。よってこの方法は、[[dm-crypt/システム全体の暗号化|ルートパーティションを暗号化する]]場合のように、[[#mkinitcpio|mkinitcpio]] フックを使用して暗号化済みのパーティションのロックを解除する方法や、[[#カーネルパラメータ|カーネルパラメータを使用して設定する]]方法の代わりではありません。{{ic|crypttab}} は、{{ic|systemd-cryptsetup-generator}} によってブート時に自動的に処理されます。
  +
  +
詳細は {{man|5|crypttab}} を参照してください。以下にはいくつかの例を載せています。暗号化されたデバイスをマウントするために UUID を使用する方法については [[#ブート時にマウントする]] セクションを参照してください。
  +
  +
{{Warning|
  +
* {{ic|nofail}} オプションが指定された場合、パスワードの入力中にパスワード入力画面が消えてしまうことがあります。なので、{{ic|nofail}} はキーファイルを使用する場合にのみ使ってください。
  +
* [[dm-crypt/デバイスの暗号化#plain モードの暗号化オプション|dm-crypt の plain モード]]のデバイスの場合、{{ic|systemd-cryptsetup}} にそれらのデバイスを強制的に認識させるために、{{ic|plain}} オプションを明示的に設定しなければなりません。[https://github.com/systemd/systemd/issues/442 systemd issue 442] を参照してください。
  +
}}
  +
  +
{{hc|/etc/crypttab|2=
  +
# crypttab ファイルの例。フィールドは左から: 名前、バッキングデバイス、パスフレーズ、cryptsetup オプション。
  +
  +
# /dev/lvm/swap をマウントし、ブート毎に新しいキーで再暗号化する。
 
swap /dev/lvm/swap /dev/urandom swap,cipher=aes-xts-plain64,size=256
 
swap /dev/lvm/swap /dev/urandom swap,cipher=aes-xts-plain64,size=256
  +
# Mount /dev/lvm/tmp as /dev/mapper/tmp using plain dm-crypt with a random passphrase, making its contents unrecoverable after it is dismounted.
 
  +
# /dev/lvm/tmp を /dev/mapper/tmp としてマウントし、plain dm-crypt でランダムなパスフレーズを使うことで、アンマウント後にコンテンツを読めなくする。
 
tmp /dev/lvm/tmp /dev/urandom tmp,cipher=aes-xts-plain64,size=256
 
tmp /dev/lvm/tmp /dev/urandom tmp,cipher=aes-xts-plain64,size=256
  +
# Mount /dev/lvm/home as /dev/mapper/home using LUKS, and prompt for the passphrase at boot time.
 
  +
# LUKS を使って /dev/lvm/home を /dev/mapper/home としてマウントする。ブート時にパスフレーズのプロンプトを表示する。
 
home /dev/lvm/home
 
home /dev/lvm/home
  +
# Mount /dev/sdb1 as /dev/mapper/backup using LUKS, with a passphrase stored in a file.
 
  +
# LUKS を使って /dev/sdb1 を /dev/mapper/backup としてマウントする。パスフレーズはファイルに保存してある。
 
backup /dev/sdb1 /home/alice/backup.key
 
backup /dev/sdb1 /home/alice/backup.key
</nowiki>}}
 
   
  +
# 唯一の利用可能な TPM を使って /dev/sdX のロックを解除し、myvolume に名称変更する。
=== 起動時にマウント ===
 
  +
myvolume /dev/sdX none tpm2-device=auto
  +
}}
   
  +
有効化した後にすぐ crypttab をテストするには、[[daemon-reload]] で systemd マネージャの設定を再読み込みし、新しく生成された {{ic|systemd-cryptsetup@''name''.service}} を[[開始]]してください。
起動時に暗号化されたドライブをマウントしたい場合、デバイスの UUID を {{ic|/etc/crypttab}} に入力してください。UUID は {{ic|lsblk -f}} コマンドで確認して以下のように {{ic|crypttab}} に追加します:
 
   
  +
{{hc|# cryptsetup status ''name''|2=
{{hc|/etc/crypttab|<nowiki>
 
  +
/dev/mapper/''name'' is active.
externaldrive UUID=2f9a8428-ac69-478a-88a2-4aa458565431 none luks,timeout=180
 
  +
type: ...
</nowiki>}}
 
  +
cipher: ...
  +
keysize: ... bits
  +
key location: ...
  +
device: /dev/sdxN
  +
sector size: ...
  +
offset: ... sectors
  +
size: ... sectors
  +
mode: ...
  +
flags: ...
  +
}}
   
  +
{{ic|systemd-cryptsetup@''name''.service}} に関する他の情報は、[[#必要に応じてマウントする]] を参照してください。
最初のパラメータは、暗号化されたドライブに使用するデバイスマッパーの好みの名前です。オプション {{ic|none}} は起動中にパーティションのロックを解除するためのパスフレーズを入力するプロンプトを表示します。{{ic|timeout}} オプションは、ブート時に復号化パスワードを入力するタイムアウトを秒単位で定義します。
 
   
  +
{{Tip|GPT と特定のパーティションタイプ UUID を使用する場合、systemd で一部のマウントポイントに対しては crypttab と fstab を使わなくても済みます。詳細は、[[systemd#GPT パーティションの自動マウント]]。}}
{{ic|none}} の代わりに [[dm-crypt/デバイスの暗号化#キーファイル|keyfile]] を設定し参照することも可能です。この結果、起動中にキーファイルにアクセスできる場合は、自動的にロックが解除されます。LUKS は複数のキーを持つオプションを提供しているので、選択したオプションは後で変更することも可能です。
 
   
  +
==== ブート時にマウントする ====
以下のように {{ic|/etc/crypttab}} で定義したデバイスマッパー名を {{ic|/etc/fstab}} で使用します。
 
   
  +
暗号化されたドライブをブート時にマウントしたい場合、デバイスの UUID を {{ic|/etc/crypttab}} に記述してください。UUID (パーティション) を {{ic|lsblk -f}} コマンドで得て、それを {{ic|crypttab}} 内に以下の形式で追加してください:
{{hc|/etc/fstab|<nowiki>/dev/mapper/externaldrive /mnt/backup ext4 defaults,errors=remount-ro 0 2</nowiki>}} のように記述します。
 
   
  +
{{hc|/etc/crypttab|2=
{{ic|/dev/mapper/externaldrive}} はすでにユニークなパーティションマッピングの結果なので、UUID を指定する必要はない。いずれにせよ、ファイルシステムを持つマッパーは、それが暗号化されているパーティションとは異なる UUID を持つことになります。
 
  +
externaldrive UUID=2f9a8428-ac69-478a-88a2-4aa458565431 none timeout=180
  +
}}
   
  +
最初のパラメータは、暗号化されたドライブに使用するデバイスマッパーの名前です。自由に指定してください。{{ic|none}} オプションは、起動中にパーティションのロックを解除するためのパスフレーズを入力するプロンプトをトリガーします。{{ic|timeout}} オプションは、ブート時に復号パスワードを入力するタイムアウトを秒単位で定義します。
==== スタックされたブロックデバイスのマウント ====
 
   
  +
{{Tip|パスワードプロンプトに入力されたパスワードは、{{man|8|systemd-cryptsetup}} によってカーネルのキーリング内にキャッシュされます ([[#systemd-cryptsetup-generator を使う|sd-encrypt フックを使用する]]場合、initramfs の段階で入力されたパスワードも該当します)。{{ic|crypttab}} に記述されているデバイスが、以前入力したパスワードを使用する場合、3番目のパラメータは {{ic|none}} にすることができ、キャッシュされているパスワードが自動的に使用されます。}}
また、systemd ジェネレータは、起動時にスタックされたブロックデバイスを自動的に処理します。
 
   
  +
{{Note|{{ic|crypttab}} における {{ic|timeout}} オプションは、暗号化されたデバイスの''パスワードを入力する''ことのできる時間だけを決定することを留意しておいてください。加えて [[systemd]] には、''デバイスが利用可能になる''までの許容時間を決定するデフォルトのタイムアウト (デフォルトでは 90 秒) が存在し、これはパスワードのタイマーとは独立しています。その結果、{{ic|crypttab}} において {{ic|timeout}} オプションが 90 秒より大きい値に設定された場合 (あるいは、時間無制限を意味するデフォルトの 0 に設定した場合) でも、''systemd'' は依然として、デバイスがアンロックされるまで最大 90 秒までしか待ちません。''systemd'' がデバイスが利用可能になるまで待機する時間を変更するために、{{ic|x-systemd.device-timeout}} ({{man|5|systemd.mount}} を参照) を [[fstab]] 内で対象のデバイスに対して設定することができます。このとき、ブート時にマウントされるデバイスそれぞれに対して、{{ic|crypttab}} における {{ic|timeout}} オプションの値は、{{ic|fstab}} における {{ic|x-systemd.device-timeout}} の値と同じにすることが望ましいでしょう。}}
例えば、[[RAID]] セットアップを作成し、その上で cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ [[LVM]] 論理ボリュームを作成することが可能です。
 
  +
  +
===== キーファイルでロックを解除する =====
  +
  +
セカンダリファイルシステムの[[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]が、暗号化されたルートファイルシステム内に保存されている場合、キーファイルはシステムの電源が落ちている間は安全であり、[[#crypttab|crypttab]] を使ってブート中にキーファイルを自動的に読み込んでロックを解除することができます。例えば、[[UUID]] によって指定された crypt をアンロックするには:
  +
  +
{{hc|/etc/crypttab|2=
  +
home-crypt UUID=''UUID-identifier'' /etc/cryptsetup-keys.d/home-crypt.key
  +
}}
  +
  +
{{Tip|
  +
* キーファイルが指定されなかった場合、{{man|8|systemd-cryptsetup}} は自動的に {{ic|/etc/cryptsetup-keys.d/''name''.key}} と {{ic|/run/cryptsetup-keys.d/''name''.key}} から読み込もうと試みます。[https://github.com/systemd/systemd/pull/15637]
  +
* {{ic|--plain}} モードのブロックデバイスを使用したい場合、そのデバイスのロック解除に必要な暗号化オプションは {{ic|/etc/crypttab}} 内に指定します。この場合、[[#crypttab|crypttab]] で説明した systemd の回避策を適用する必要があることに注意してください。
  +
}}
  +
  +
そして、({{ic|/etc/crypttab}} で定義した) デバイスマッパーの名前を使用して {{ic|/etc/fstab}} 内にエントリを作成してください:
  +
  +
{{hc|/etc/fstab|
  +
/dev/mapper/home-crypt /home ext4 defaults 0 2
  +
}}
  +
  +
{{ic|/dev/mapper/externaldrive}} はユニークなパーティションマッピングによるものなので、UUID を使って指定する必要はありません。いかなる場合でも、ファイルシステムに対応するマッパーは、そのファイルシステムが存在しているパーティションとは異なる UUID を持っています。
  +
  +
===== スタックされたブロックデバイスをマウントする =====
  +
  +
また、この systemd ジェネレータは、スタックされたブロックデバイスをブート時に自動的に処理します。
  +
  +
例えば、[[RAID]] 環境を作成し、そこに cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ [[LVM]] 論理ボリュームを作成することができます:
   
 
{{hc|$ lsblk -f|
 
{{hc|$ lsblk -f|
216行目: 395行目:
 
}}
 
}}
   
はパスフレーズ要求し、ブート時に自動的にマウントします。
+
これ、ブート時にパスフレーズ要求し、自動的にマウントします。
  +
  +
対応する正しい crypttab (例えば {{ic|crypto_LUKS}} デバイスの UUID) と fstab ({{ic|/dev/vgraid/lvraid}}) エントリを指定すれば、{{ic|/etc/crypttab}} の処理はルート以外のマウントにのみ適用されるので、mkinitcpio フック/設定を追加する必要がありません。例外として、{{ic|mdadm_udev}} フックが''すでに''使われている場合 (例:ルートデバイス用) です。この場合、正しい root raid が最初に選ばれるように {{ic|/etc/madadm.conf}} と initramfs を更新する必要があります。
  +
  +
==== 必要に応じてマウントする ====
  +
  +
以下のコマンドを使用する代わりとして
  +
  +
# cryptsetup open UUID=... externaldrive
  +
  +
以下のように {{ic|/etc/crypttab}} 内にエントリが存在する場合は、{{ic|systemd-cryptsetup@externaldrive.service}} を[[開始]]することができます:
  +
  +
{{hc|/etc/crypttab|output=
  +
externaldrive UUID=... none noauto
  +
}}
  +
  +
この方法では、正確な crypttab オプションを覚えておく必要はありません。必要であれば、パスフレーズのプロンプトが表示されます。
  +
  +
対応するユニットファイルは {{man|8|systemd-cryptsetup-generator}} によって自動的に生成されます。生成されたユニットファイルは全て以下のコマンドで一覧表示できます:
  +
  +
$ systemctl list-unit-files | grep systemd-cryptsetup
  +
  +
== トラブルシューティング ==
  +
  +
=== システムがブート時に固まる/パスワードプロンプトが表示されない ===
  +
  +
[[Plymouth]] を使用する場合、適切なモジュール ([[Plymouth#mkinitcpio]] を参照) を使用するか、Plymouth を無効化してください。正しく設定しないと Plymouth によってパスワードプロンプトが隠れてしまい、システムを起動できなくなります。
  +
  +
=== キーボードやファイルシステム上のキーファイルをロック解除に利用できない ===
   
  +
キーボードや、initramfs の生成時に存在しないファイルシステム上のキーファイルを使って LUKS デバイスのロックを解除する場合、対応するモジュールを mkinitcpio の {{ic|MODULES}} 配列に追加する必要があるかもしれません。この作業は、キーボードが USB ハブ経由で接続されている場合にも必要かもしれません。この問題に関する詳細は [[mkinitcpio#MODULES]] を参照してください。追加するべきキーボードやファイルシステムのモジュール名を探し当てる方法については [[mkinitcpio/Initramfs の最小化#モジュールの選別]] を参照してください
正しい対応する crypttab (例えば {{ic|crypto_LUKS}} デバイスの UUID) と fstab ({{ic|/dev/mapper/vgraid-lvraid}}) エントリを指定すれば、{{ic|/etc/crypttab}} 処理は非ルートマウントにのみ適用するので、 mkinitcpio フック/設定を追加する必要がありません。例外として、{{ic|mdadm_udev}} フックが''すでに ''使われている場合(例:ルートデバイス用)です。この場合、正しい root raid が最初に選ばれるように {{ic|/etc/madm.conf}} と initramfs を更新する必要があります。
 
   
  +
一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、{{ic|autodetect}} フックより前に {{ic|keyboard}} を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。[[mkinitcpio#通常のフック]] を参照してください。
==トラブルシューティング==
 
   
  +
{{TranslationStatus|dm-crypt/System configuration|2023-09-04|784929}}
===起動時にシステムがフリーズしたりパスワードのプロンプトが表示されない===
 
[[Plymouth]] を使用する場合、適切なモジュールを使用するか、Plymouth を無効化してください。正しく設定しないと Plymouth によってパスワードプロンプトが隠れてしまい、システムを起動できなくなります。詳しくは [[Plymouth#plymouth フック]]を参照。
 

2023年9月7日 (木) 16:33時点における最新版

ヒント:

初期ユーザ空間でロックを解除する

暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが initramfs に含まれている必要があります。ロックを解除するべきボリュームは、たいていカーネルパラメータで渡されます。

以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。

mkinitcpio

場合にもよりますが、以下の mkinitcpio フックの一部は有効化しておく必要があります:

busybox systemd ユースケース
encrypt sd-encrypt ルートパーティションが暗号化されている場合や、何らかの暗号化されているパーティションがルートパーティションのマウントよりも前に必要になる場合に必要です。その他の場合においては必要ありません。/etc/crypttab などのシステム初期化スクリプトが、ルート以外のパーティションのロックを解除してくれるからです。このフックは udevsystemd フックよりも後に配置しなければなりません。
keyboard 初期ユーザ空間でキーボードを動作させるために必要です。
ヒント: 起動するたびにハードウェアの構成が異なるようなシステム (例えば、外部キーボードと内部キーボードのあるノート PC やヘッドレスシステム) では、このフックを autodetect より前に配置して、全てのキーボードドライバを initramfs に含めると便利です。そうしないと、initramfs イメージの生成時に外部キーボードが接続されていなければ、そのキーボードは初期ユーザ空間では動作しなくなってしまいます。
keymap sd-vconsole 暗号化パスワードの入力において US キーマップ以外のサポートを提供します。このフックは、encrypt フックよりも前に配置しなければなりません。さもないと、暗号化パスワードの入力にデフォルトの US キーマップしか使えません。キーマップは /etc/vconsole.conf で設定してください (Linux コンソール/キーボード設定#永続的な設定 を参照してください)。
consolefont 初期ユーザ空間で代替のコンソールフォントをロードします。フォントは /etc/vconsole.conf で設定してください (Linux コンソール/キーボード設定#永続的な設定 を参照してください)。

必要なその他のフックは、システムのインストールに関するその他のマニュアルから明らかなはずです。

ノート: /etc/mkinitcpio.conf に変更を加えたときは initramfs を再生成するのを忘れないでください。

encrypt フックを使用する典型的な /etc/mkinitcpio.conf の設定としては、以下のようになります:

/etc/mkinitcpio.conf
...
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
...

sd-encrypt フックを使用する、systemd ベースの initramfs の設定は:

/etc/mkinitcpio.conf
...
HOOKS=(base systemd autodetect modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)
...

カーネルパラメータ

必要なカーネルパラメータは、encrypt フックと sd-encrypt フックのどちらを使うかによります。rootresume は両方において同じように指定します。

ヒント: sd-encrypt フックと GPT パーティションの自動マウントを使用する場合、これらのカーネルパラメータの指定は省略できます。dm-crypt/システム全体の暗号化#ブートローダーの設定 を参照してください。

root

root= パラメータでは、実際の (暗号化の解除された) ルートファイルシステムの device を指定します:

root=device
  • ルートファイルシステムが、暗号化の解除されたデバイスファイル上に直接フォーマットされている場合、このパラメータの引数は /dev/mapper/dmname になります。
  • 最初に LVM がアクティブ化されていて、そこに暗号化されている論理ルートボリュームが存在している場合、引数は上記の形式と同じになります。
  • ルートファイルシステムが、完全に暗号化されている LVM の論理ボリューム内に存在している場合、デバイスマッパーは一般に root=/dev/volumegroup/logicalvolume となります。
ヒント: GRUB を使用していて、grub-mkconfiggrub.cfg を生成する場合は、root= パラメータを手動で指定する必要はありません。grub-mkconfig は、暗号化の解除されたルートファイルシステムの適切な UUID を検出し、その UUID を grub.cfg へ自動的に追加します。

resume

resume=device

encrypt フックを使う

ノート: sd-encrypt フックと比べて、encrypt フックは以下をサポートしていません:
cryptdevice

このパラメータでは、コールドブート時に暗号化済みルートファイルシステムを含むデバイスを指定します。これは、encrypt フックによってパースされ、どのデバイスに暗号化されているシステムが含まれているかを特定します:

cryptdevice=device:dmname:options
  • device は、暗号化されたデバイスのバッキングデバイスへのパスです。永続的なブロックデバイスの命名を使うことを強く推奨します。
  • dmname は復号後にデバイスに与えられる device-mapper の名前です。/dev/mapper/dmname として使用できるようになります。
  • options (オプション) は、コンマで区切られたオプションです (TRIM サポートなど用)。オプションが必要ないのであれば、このパラメータは省略してください (cryptdevice=device:dmname)。
  • LVM に暗号化されたルートが含まれる場合、最初に LVM が有効になって暗号化されたルートの論理ボリュームを含むボリュームグループが device として使用できるようになります。それからボリュームグループがルートにマッピングされます。パラメータは cryptdevice=/dev/vgname/lvname:dmname という形式になります。
ヒント: ソリッドステートドライブ (SSD) に対しては、Discard/TRIM のサポートを有効化すると良いかもしれません。
cryptkey
ヒント: パスフレーズを使用するのであれば、cryptkey= パラメータを手動で指定する必要はありません。その場合、ブート時にパスフレーズを入力するためのプロンプトが表示されます。

このパラメータはキーファイルの場所を指定します。encrypt フックがそのキーファイルを読み込んで cryptdevice のロックを解除するために必要です。(鍵がデフォルトの場所にある場合を除き (以下を参照)) キーファイルが特定のデバイスにファイルとして存在するか、特定の場所から始まるビットストリームであるか、initramfs にファイルとして存在するかによって、3つのパラメータセットを持つことができます。

デバイス内のファイルの場合、形式は以下のようになります:

cryptkey=device:fstype:path
  • device: キーが存在する raw ブロックデバイス。永続的なブロックデバイスの命名を使うことを強く推奨します。
  • fstype: device のファイルシステムのタイプ (auto を指定することも可)。
  • path: デバイス内のキーファイルの絶対パス。

例: cryptkey=LABEL=usbstick:vfat:/secretkey

デバイス上のビットストリームの場合、キーの場所は次のように指定されます:

For a bitstream on a device the key's location is specified with the following:

cryptkey=device:offset:size 

ここで、オフセットとサイズはバイト単位です。例えば、cryptkey=UUID=ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ:0:512 は、デバイスの先頭にある 512 バイトのキーファイルを読み込みます。

ヒント: アクセスしたいデバイスのパスに : 文字が含まれている場合、その文字をバックスラッシュ \ でエスケープしなければなりません。そのような場合、cryptkey パラメータは次のような見た目になります: ID usb-123456-0:0 の USB キーの場合、cryptkey=/dev/disk/by-id/usb-123456-0\:0:0:512

Initramfs 内に含められているファイルの場合、形式は次のようになります[1]:

cryptkey=rootfs:path

例: cryptkey=rootfs:/secretkey

また、cryptkey が指定されない場合、デフォルトで (initramfs 内の) /crypto_keyfile.bin が指定されたものとみなされることに注意してください。[2]

dm-crypt/デバイスの暗号化#キーファイル も参照してください。

crypto

これは、dm-crypt プレーンモードのオプションを encrypt フックに渡すための固有のパラメータです。

以下の形式を取ります:

crypto=hash:cipher:keysize:offset:skip

引数は、cryptsetup のオプションと直接関連します。Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション を参照してください。

plain のデフォルトオプションのみで暗号化されたディスクの場合、crypto 引数を指定しなければなりませんが、各エントリは空白のままにすることができます:

crypto=::::

引数の具体的な例は以下の通りです:

crypto=sha512:twofish-xts-plain64:512:0:

systemd-cryptsetup-generator を使う

systemd-cryptsetup-generator は、暗号化されたデバイスのロックを解除するために、カーネルパラメータのサブセットと /etc/crypttab を読み込む systemd ユニットジェネレータです。このジェネレータに関する詳細やサポートされている全オプションについては、systemd-cryptsetup-generator(8) man ページを参照してください。

systemd-cryptsetup-generator は、sd-encrypt mkinitcpio フックsystemd dracut モジュールが使用される initramfs の段階で実行されます。

以下では、systemd-cryptsetup-generator によって使用されるカーネルパラメータの一部を説明します。

ヒント:
  • /etc/crypttab.initramfs ファイルが存在する場合、/etc/crypttab として initramfs に追加されます。このファイルには、initramfs の段階でロックを解除する必要のあるデバイスを指定できます。このファイルの構文は #crypttab を参照してください。/etc/crypttab.initramfs が存在しない場合、/etc/crypttab は initramfs に追加されず、ロック解除可能なデバイスは以下に挙げるカーネルパラメータで指定する必要があります。
  • /etc/crypttab.initramfs では、rd.luks のように UUID 以外も使用できます。永続的なブロックデバイスの命名方法のうち任意のものを使用できます。
  • ブート中に入力されたパスワードは systemd-cryptsetup(8) によってカーネルのキーリングにキャッシュされます。なので、同じパスワードで複数のデバイスのロックを解除できる場合 (これには、ブート後にロックを解除される crypttab 内のデバイスも含まれます)、そのパスワードの入力は1度だけで済みます。
ノート:
  • rd.luks パラメータ群はすべて複数回指定することが可能であり、LUKS で暗号化された複数のボリュームのロックを解除できます。
  • rd.luks パラメータは LUKS デバイスのロック解除のみをサポートしています。Plain な dm-crypt デバイスのロックを解除するには、そのデバイスを /etc/crypttab.initramfs 内で指定しなければなりません。このファイルの構文は #crypttab を参照してください。
警告: /etc/crypttab/etc/crypttab.initramfs を使用していて、かつ luks.* パラメータか rd.luks.* パラメータも使用している場合、カーネルコマンドラインで指定されたデバイスしかアクティブ化されず、Not creating device 'devicename' because it was not specified on the kernel command line. というメッセージが表示されます。これは、luks.* パラメータや rd.luks.* パラメータが、crypttab のデバイスのうちどれをアクティブ化するかを制御するからです。/etc/crypttab 内の全デバイスをアクティブ化するには、luks.* パラメータを使用せず、rd.luks.* を使用してください。/etc/crypttab.initramfs 内の全デバイスをアクティブ化するには、luks.*rd.luks.* も使用しないでください。
rd.luks.uuid
ヒント: rd.luks.name を使用する場合、rd.luks.uuid は省略できます。
rd.luks.uuid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

ブート時に復号するデバイスの UUID をこのフラグで指定します。

デフォルトでは、マッピングされたデバイスは、/dev/mapper/luks-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX に配置されます。XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX は LUKS パーティションの UUID です。

rd.luks.name
ヒント: このパラメータを使用する場合、rd.luks.uuid は省略できます。
rd.luks.name=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=name

LUKS パーティションが開かれたあとにマッピングされるデバイスの名前を指定します。XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX は LUKS パーティションの UUID です。これは、encryptcryptdevice の第2パラメータと等価です。

例えば、rd.luks.name=12345678-9abc-def0-1234-56789abcdef0=root を指定すると、UUID 12345678-9ABC-DEF0-1234-56789ABCDEF0 のロック解除された LUKS デバイスは、/dev/mapper/root に配置されます。

rd.luks.key

UUID で指定されたデバイスを復号する際に用いるパスワードファイルの場所を指定します。encrypt フックの cryptkey パラメータにあるようなデフォルトの場所は存在しません。

キーファイルが initramfs 内に含まれている場合は:

rd.luks.key=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=/path/to/keyfile

あるいは

rd.luks.key=/path/to/keyfile
ヒント: キーファイルが /etc/cryptsetup-keys.d/name.key として含まれている場合、rd.luks.key パラメータは完全に省略できます。

キーファイルが他のデバイス上に存在する場合は:

rd.luks.key=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=/path/to/keyfile:UUID=ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ

UUID=ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ の部分は、キーファイルの存在するデバイスの識別子に置き換えてください。

警告:
  • ファイルシステムの種類がルートファイルシステムのものと異なる場合は、そのファイルシステム用のカーネルモジュールを initramfs 内に含める必要があります。
  • rd.luks.key で他のデバイス上のキーファイルを指定した場合、デバイスが利用できない場合にデフォルトではパスワードプロンプトにフォールバックしません。パスワードプロンプトにフォールバックさせるには、rd.luks.optionskeyfile-timeout= を指定してください。例えば、10秒のタイムアウトを設定するには:
    rd.luks.options=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=keyfile-timeout=10s
rd.luks.options
rd.luks.options=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=options

または

rd.luks.options=options

UUID を指定した場合、そのデバイスに対してオプションを設定します。UUID を指定しなかった場合、他の場所 (例えば crypttab) で指定しなかった全デバイスに対してオプションを設定します。

このパラメータは crypttab のオプションフィールドに似ています。形式は同じです。オプションはコンマで区切られ、値のあるオプションは option=value のように指定します。これは、encryptcryptdevice の第3パラメータとほぼ等価です。

例えば:

rd.luks.options=timeout=10s,discard,password-echo=no,tries=1
タイムアウト

ブート中にパスワードを入力する際のタイムアウトを設定するオプションは2つあります:

  • rd.luks.options=timeout=mytimeout は、パスワードをクエリする際のタイムアウトを指定します。
  • rootflags=x-systemd.device-timeout=mytimeout は、rootfs デバイスが現れるまで systemd がどれだけ待つかを指定します (デフォルトは 90 秒)。

タイムアウトを両方無効化したい場合は、両方のタイムアウトをゼロに設定してください:

rd.luks.options=timeout=0 rootflags=x-systemd.device-timeout=0
Password echo

ユーザがパスワードを入力する際、systemd-cryptsetup はデフォルトで、入力された各文字をアスタリスク (*) として表示します。これは encrypt の挙動とは異なります (encrypt は何も表示しません)。何も表示させないようにするには、password-echo=no オプションを設定してください:

rd.luks.options=password-echo=no
Trusted Platform Module と FIDO2 鍵

あなたのシステム上で TPM2 チップが利用可能である、あるいは FIDO2 互換のセキュリティキーを使用している場合、パスワードやキーファイルを使わずにボリュームのロックを自動的に解除できます。

rd.luks.uuidrd.luks.name に加えて、以下を設定してください:

  • TPM2 チップの場合: rd.luks.options=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=tpm2-device=auto
  • FIDO2 鍵の場合: rd.luks.options=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=fido2-device=auto

あるいは、/etc/crypttab.initramfs を使えば、カーネルオプションで指定する必要はありません。

/etc/crypttab.initramfs
root  UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX  none  tpm2-device=auto
ノート: /etc/crypttab.initramfs に変更を加えた後に initramfs を再生成することを忘れないでください。

ここでは、暗号化されたボリュームは root という名前で (/dev/mapper/root に) マウントされます。対象のストレージデバイスの UUID でマウントされ、パスワードは使われず、TPM2 デバイスからキーが取得されます。

TPM2 デバイスを使用するにはパスワードのフィールドに none を指定しなければならないことに注意してください。さもないと、与えられた値がパスワードか鍵として使用されてしまい、それがうまくいかなかった場合に TPM2 デバイスからキーを読み込もうとせずにパスワードプロンプトが表示してしまいます。

上記のようにデバイスを UUID で指定する場合、それが基底のストレージデバイス (つまり、暗号化されているデバイス自体) の UUID であるを確認してください (他の場所でルートファイルシステムとして指定される、復号さらた後のボリュームの UUID ではありません)。

rd.luks.data

デタッチされた LUKS ヘッダを使用する場合、暗号化されたデータが含まれるブロックデバイスを指定してください。ヘッダファイルの場所は rd.luks.options で指定する必要があります。

詳細や方法は dm-crypt/特記事項#Encrypted system using a detached LUKS header[リンク切れ: セクションが存在しません] を参照してください。

後期ユーザ空間でロックを解除する

crypttab

/etc/crypttab (encrypted device table) ファイルには、システムの起動時にロックを解除する暗号化デバイスのリストを記述します。fstab と似ています。このファイルを使うことで、暗号化したスワップデバイスやセカンダリファイルシステムを自動でマウントすることが可能です。

crypttabfstab より前に読み込まれます。dm-crypt コンテナを、その内部に存在するファイルシステムよりも前にアンロックできるようにするためです。crypttab は、システムの起動した後に読み込まれることに注意してください。よってこの方法は、ルートパーティションを暗号化する場合のように、mkinitcpio フックを使用して暗号化済みのパーティションのロックを解除する方法や、カーネルパラメータを使用して設定する方法の代わりではありません。crypttab は、systemd-cryptsetup-generator によってブート時に自動的に処理されます。

詳細は crypttab(5) を参照してください。以下にはいくつかの例を載せています。暗号化されたデバイスをマウントするために UUID を使用する方法については #ブート時にマウントする セクションを参照してください。

警告:
  • nofail オプションが指定された場合、パスワードの入力中にパスワード入力画面が消えてしまうことがあります。なので、nofail はキーファイルを使用する場合にのみ使ってください。
  • dm-crypt の plain モードのデバイスの場合、systemd-cryptsetup にそれらのデバイスを強制的に認識させるために、plain オプションを明示的に設定しなければなりません。systemd issue 442 を参照してください。
/etc/crypttab
# crypttab ファイルの例。フィールドは左から: 名前、バッキングデバイス、パスフレーズ、cryptsetup オプション。

# /dev/lvm/swap をマウントし、ブート毎に新しいキーで再暗号化する。
swap	/dev/lvm/swap	/dev/urandom	swap,cipher=aes-xts-plain64,size=256

# /dev/lvm/tmp を /dev/mapper/tmp としてマウントし、plain dm-crypt でランダムなパスフレーズを使うことで、アンマウント後にコンテンツを読めなくする。
tmp	/dev/lvm/tmp	/dev/urandom	tmp,cipher=aes-xts-plain64,size=256 

# LUKS を使って /dev/lvm/home を /dev/mapper/home としてマウントする。ブート時にパスフレーズのプロンプトを表示する。
home   /dev/lvm/home

# LUKS を使って /dev/sdb1 を /dev/mapper/backup としてマウントする。パスフレーズはファイルに保存してある。
backup /dev/sdb1       /home/alice/backup.key

# 唯一の利用可能な TPM を使って /dev/sdX のロックを解除し、myvolume に名称変更する。
myvolume	/dev/sdX	none	tpm2-device=auto

有効化した後にすぐ crypttab をテストするには、daemon-reload で systemd マネージャの設定を再読み込みし、新しく生成された systemd-cryptsetup@name.service開始してください。

# cryptsetup status name
/dev/mapper/name is active.
  type:    ...
  cipher:  ...
  keysize: ... bits
  key location: ...
  device:  /dev/sdxN
  sector size:  ...
  offset:  ... sectors
  size:    ... sectors
  mode:    ...
  flags:   ...

systemd-cryptsetup@name.service に関する他の情報は、#必要に応じてマウントする を参照してください。

ヒント: GPT と特定のパーティションタイプ UUID を使用する場合、systemd で一部のマウントポイントに対しては crypttab と fstab を使わなくても済みます。詳細は、systemd#GPT パーティションの自動マウント

ブート時にマウントする

暗号化されたドライブをブート時にマウントしたい場合、デバイスの UUID を /etc/crypttab に記述してください。UUID (パーティション) を lsblk -f コマンドで得て、それを crypttab 内に以下の形式で追加してください:

/etc/crypttab
externaldrive         UUID=2f9a8428-ac69-478a-88a2-4aa458565431        none    timeout=180

最初のパラメータは、暗号化されたドライブに使用するデバイスマッパーの名前です。自由に指定してください。none オプションは、起動中にパーティションのロックを解除するためのパスフレーズを入力するプロンプトをトリガーします。timeout オプションは、ブート時に復号パスワードを入力するタイムアウトを秒単位で定義します。

ヒント: パスワードプロンプトに入力されたパスワードは、systemd-cryptsetup(8) によってカーネルのキーリング内にキャッシュされます (sd-encrypt フックを使用する場合、initramfs の段階で入力されたパスワードも該当します)。crypttab に記述されているデバイスが、以前入力したパスワードを使用する場合、3番目のパラメータは none にすることができ、キャッシュされているパスワードが自動的に使用されます。
ノート: crypttab における timeout オプションは、暗号化されたデバイスのパスワードを入力することのできる時間だけを決定することを留意しておいてください。加えて systemd には、デバイスが利用可能になるまでの許容時間を決定するデフォルトのタイムアウト (デフォルトでは 90 秒) が存在し、これはパスワードのタイマーとは独立しています。その結果、crypttab において timeout オプションが 90 秒より大きい値に設定された場合 (あるいは、時間無制限を意味するデフォルトの 0 に設定した場合) でも、systemd は依然として、デバイスがアンロックされるまで最大 90 秒までしか待ちません。systemd がデバイスが利用可能になるまで待機する時間を変更するために、x-systemd.device-timeout (systemd.mount(5) を参照) を fstab 内で対象のデバイスに対して設定することができます。このとき、ブート時にマウントされるデバイスそれぞれに対して、crypttab における timeout オプションの値は、fstab における x-systemd.device-timeout の値と同じにすることが望ましいでしょう。
キーファイルでロックを解除する

セカンダリファイルシステムのキーファイルが、暗号化されたルートファイルシステム内に保存されている場合、キーファイルはシステムの電源が落ちている間は安全であり、crypttab を使ってブート中にキーファイルを自動的に読み込んでロックを解除することができます。例えば、UUID によって指定された crypt をアンロックするには:

/etc/crypttab
home-crypt    UUID=UUID-identifier    /etc/cryptsetup-keys.d/home-crypt.key
ヒント:
  • キーファイルが指定されなかった場合、systemd-cryptsetup(8) は自動的に /etc/cryptsetup-keys.d/name.key/run/cryptsetup-keys.d/name.key から読み込もうと試みます。[3]
  • --plain モードのブロックデバイスを使用したい場合、そのデバイスのロック解除に必要な暗号化オプションは /etc/crypttab 内に指定します。この場合、crypttab で説明した systemd の回避策を適用する必要があることに注意してください。

そして、(/etc/crypttab で定義した) デバイスマッパーの名前を使用して /etc/fstab 内にエントリを作成してください:

/etc/fstab
/dev/mapper/home-crypt        /home   ext4        defaults        0       2

/dev/mapper/externaldrive はユニークなパーティションマッピングによるものなので、UUID を使って指定する必要はありません。いかなる場合でも、ファイルシステムに対応するマッパーは、そのファイルシステムが存在しているパーティションとは異なる UUID を持っています。

スタックされたブロックデバイスをマウントする

また、この systemd ジェネレータは、スタックされたブロックデバイスをブート時に自動的に処理します。

例えば、RAID 環境を作成し、そこに cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ LVM 論理ボリュームを作成することができます:

$ lsblk -f
─sdXX                  linux_raid_member    
│ └─md0                 crypto_LUKS   
│   └─cryptedbackup     LVM2_member 
│     └─vgraid-lvraid   ext4              /mnt/backup
└─sdYY                  linux_raid_member    
  └─md0                 crypto_LUKS       
    └─cryptedbackup     LVM2_member 
      └─vgraid-lvraid   ext4              /mnt/backup

これは、ブート時にパスフレーズが要求し、自動的にマウントします。

対応する正しい crypttab (例えば crypto_LUKS デバイスの UUID) と fstab (/dev/vgraid/lvraid) エントリを指定すれば、/etc/crypttab の処理はルート以外のマウントにのみ適用されるので、mkinitcpio フック/設定を追加する必要がありません。例外として、mdadm_udev フックがすでに使われている場合 (例:ルートデバイス用) です。この場合、正しい root raid が最初に選ばれるように /etc/madadm.conf と initramfs を更新する必要があります。

必要に応じてマウントする

以下のコマンドを使用する代わりとして

# cryptsetup open UUID=... externaldrive

以下のように /etc/crypttab 内にエントリが存在する場合は、systemd-cryptsetup@externaldrive.service開始することができます:

/etc/crypttab
externaldrive UUID=... none noauto

この方法では、正確な crypttab オプションを覚えておく必要はありません。必要であれば、パスフレーズのプロンプトが表示されます。

対応するユニットファイルは systemd-cryptsetup-generator(8) によって自動的に生成されます。生成されたユニットファイルは全て以下のコマンドで一覧表示できます:

$ systemctl list-unit-files | grep systemd-cryptsetup

トラブルシューティング

システムがブート時に固まる/パスワードプロンプトが表示されない

Plymouth を使用する場合、適切なモジュール (Plymouth#mkinitcpio を参照) を使用するか、Plymouth を無効化してください。正しく設定しないと Plymouth によってパスワードプロンプトが隠れてしまい、システムを起動できなくなります。

キーボードやファイルシステム上のキーファイルをロック解除に利用できない

キーボードや、initramfs の生成時に存在しないファイルシステム上のキーファイルを使って LUKS デバイスのロックを解除する場合、対応するモジュールを mkinitcpio の MODULES 配列に追加する必要があるかもしれません。この作業は、キーボードが USB ハブ経由で接続されている場合にも必要かもしれません。この問題に関する詳細は mkinitcpio#MODULES を参照してください。追加するべきキーボードやファイルシステムのモジュール名を探し当てる方法については mkinitcpio/Initramfs の最小化#モジュールの選別 を参照してください

一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、autodetect フックより前に keyboard を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。mkinitcpio#通常のフック を参照してください。

翻訳ステータス: このページは en:dm-crypt/System configuration の翻訳バージョンです。最後の翻訳日は 2023-09-04 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。