「Dm-crypt/システム設定」の版間の差分
(→トラブルシューティング: 同期) |
|||
(2人の利用者による、間の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]] |
[[es:Dm-crypt (Español)/System configuration]] |
||
12行目: | 11行目: | ||
}} |
}} |
||
+ | == 初期ユーザ空間でロックを解除する == |
||
− | == mkinitcpio == |
||
− | システムの暗号化をする場合、[[mkinitcpio]] を正しく設定した後に initial ramdisk を再生成する必要があります。特にシナリオによっては、以下のフックを有効しなくてはなりません: |
||
+ | 暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが [[initramfs]] に含まれている必要があります。ロックを解除するべきボリュームは、たいてい[[カーネルパラメータ]]で渡されます。 |
||
− | * {{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 キーボードを使えるようにするために必須です。 |
||
+ | 以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。 |
||
− | [[mkinitcpio#通常のフック|他のフック]]についてはここでは触れません。 |
||
− | === |
+ | === mkinitcpio === |
+ | 場合にもよりますが、以下の [[mkinitcpio#HOOKS|mkinitcpio フック]]の一部は有効化しておく必要があります: |
||
− | {{ic|encrypt}} フックを使用する {{ic|/etc/mkinitcpio.conf}} の設定例: |
||
+ | |||
+ | {| 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#通常のフック|その他のフック]]は、システムのインストールに関するその他のマニュアルから明らかなはずです。 |
||
+ | |||
+ | {{Note|{{ic|/etc/mkinitcpio.conf}} に変更を加えたときは [[initramfs を再生成する]]のを忘れないでください。}} |
||
+ | |||
+ | ==== 例 ==== |
||
+ | |||
+ | {{ic|encrypt}} フックを使用する典型的な {{ic|/etc/mkinitcpio.conf}} の設定としては、以下のようになります: |
||
{{hc|/etc/mkinitcpio.conf|2= |
{{hc|/etc/mkinitcpio.conf|2= |
||
... |
... |
||
− | HOOKS= |
+ | HOOKS=(base '''udev''' autodetect modconf kms keyboard '''keymap''' '''consolefont''' block '''encrypt''' lvm2 filesystems fsck) |
... |
... |
||
}} |
}} |
||
− | {{ic|sd-encrypt}} フックを使用する |
+ | {{ic|sd-encrypt}} フックを使用する、systemd ベースの initramfs の設定は: |
{{hc|/etc/mkinitcpio.conf|2= |
{{hc|/etc/mkinitcpio.conf|2= |
||
... |
... |
||
− | HOOKS= |
+ | 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}} は両方において同じように指定します。 |
||
− | === encrypt フックを使う === |
||
+ | {{Tip|{{ic|sd-encrypt}} フックと [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]を使用する場合、これらのカーネルパラメータの指定は省略できます。[[dm-crypt/システム全体の暗号化#ブートローダーの設定]] を参照してください。}} |
||
− | ==== cryptdevice ==== |
||
− | このパラメータはコールドブート時に暗号化された root が含まれたデバイスのロックを解除するためにパスフレーズを要求するシステムプロンプトを作成します。どのデバイスに暗号化されたシステムが含まれているのか確認するために {{ic|encrypt}} フックによってパースされます: |
||
− | |||
− | 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 ==== |
==== root ==== |
||
+ | |||
− | {{ic|1=root=}} パラメータは実際の (暗号化を解除した後の) root ファイルシステムの {{ic|''device''}} を指定します: |
||
+ | {{ic|1=root=}} パラメータでは、実際の (暗号化の解除された) ルートファイルシステムの {{ic|''device''}} を指定します: |
||
root=''device'' |
root=''device'' |
||
− | * ファイルシステムが |
+ | * ルートファイルシステムが、暗号化の解除されたデバイスファイル上に直接フォーマットされている場合、このパラメータの引数は {{ic|/dev/mapper/''dmname''}} になります。 |
− | * LVM |
+ | * 最初に LVM がアクティブ化されていて、そこに[[dm-crypt/システム全体の暗号化#LUKS on LVM|暗号化されている論理ルートボリューム]]が存在している場合、引数は上記の形式と同じになります。 |
− | * |
+ | * ルートファイルシステムが、完全に[[dm-crypt/システム全体の暗号化#LVM on LUKS|暗号化されている LVM]] の論理ボリューム内に存在している場合、デバイスマッパーは一般に {{ic|1=root=/dev/''volumegroup''/''logicalvolume''}} となります。 |
− | {{Tip|[[GRUB]] を使用する場合は |
+ | {{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''}} は |
+ | * {{ic|''device''}} は、[[電源管理/サスペンドとハイバネート#ハイバネーション|suspend to disk (ハイバネーション)]] で使用される、暗号化の解除された (スワップ) ファイルシステムのデバイスファイルです。スワップが個別のパーティション上にある場合は、{{ic|/dev/mapper/swap}} という形式になります。[[dm-crypt/スワップの暗号化]] も参照してください。 |
+ | |||
+ | ==== encrypt フックを使う ==== |
||
+ | |||
+ | {{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 ==== |
||
− | このパラメータはキーファイルの場所を指定し、{{ic|''encrypt''}} フックでキーファイルを読み込んで {{ic|''cryptdevice''}} のロックを解除するために必要です。(鍵がデフォルトの場所にある場合を除き、以下を参照) キーファイルが特定のデバイスにファイルとして存在するか、特定の場所から始まるビットストリームであるか、initramfsにファイルとして存在するかによって、3つのパラメータセットを持つことができます。 |
||
− | デバイス内のファイルの場合、 |
+ | デバイス内のファイルの場合、形式は以下のようになります: |
cryptkey=''device'':''fstype'':''path'' |
cryptkey=''device'':''fstype'':''path'' |
||
− | * {{ic|''device''}} キーが存在する raw ブロックデバイス。 |
+ | * {{ic|''device''}}: キーが存在する raw ブロックデバイス。[[永続的なブロックデバイスの命名]]を使うことを強く推奨します。 |
− | * {{ic|''fstype''}} {{ic |
+ | * {{ic|''fstype''}}: {{ic|''device''}} のファイルシステムのタイプ (auto を指定することも可)。 |
− | * {{ic|''path''}} デバイス内のキーファイルの絶対パス。 |
+ | * {{ic|''path''}}: デバイス内のキーファイルの絶対パス。 |
− | 例: {{ic|1=cryptkey= |
+ | 例: {{ic|1=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=''device'':''offset'':''size'' |
||
− | ここで、オフセット |
+ | ここで、オフセットとサイズはバイト単位です。例えば、{{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|含められている]]ファイルの場合、形式は次のようになります[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L14]: |
|
cryptkey=rootfs:''path'' |
cryptkey=rootfs:''path'' |
||
97行目: | 140行目: | ||
例: {{ic|1=cryptkey=rootfs:/secretkey}} |
例: {{ic|1=cryptkey=rootfs:/secretkey}} |
||
− | また、{{ic|cryptkey}} が指定され |
+ | また、{{ic|cryptkey}} が指定されない場合、デフォルトで (initramfs 内の) {{ic|/crypto_keyfile.bin}} が指定されたものとみなされることに注意してください。[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L8] |
− | [[ |
+ | [[dm-crypt/デバイスの暗号化#キーファイル]] も参照してください。 |
− | ==== crypto ==== |
+ | ===== crypto ===== |
− | こ |
+ | これは、''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.*}} パラメータを使ってください。}} |
||
− | ==== |
+ | ==== 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. |
+ | ===== 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 ==== |
||
− | + | ===== rd.luks.key ===== |
|
− | + | 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=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/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化]] を参照してください。 |
||
+ | |||
+ | == 後期ユーザ空間でロックを解除する == |
||
+ | |||
+ | === 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}} にすることができ、キャッシュされているパスワードが自動的に使用されます。}} |
||
+ | |||
+ | {{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}} の値と同じにすることが望ましいでしょう。}} |
||
+ | |||
+ | ===== キーファイルでロックを解除する ===== |
||
+ | |||
+ | セカンダリファイルシステムの[[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 ジェネレータは、 |
+ | また、この systemd ジェネレータは、スタックされたブロックデバイスをブート時に自動的に処理します。 |
− | 例えば、[[RAID]] |
+ | 例えば、[[RAID]] 環境を作成し、そこに cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ [[LVM]] 論理ボリュームを作成することができます: |
{{hc|$ lsblk -f| |
{{hc|$ lsblk -f| |
||
223行目: | 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 |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
238行目: | 428行目: | ||
一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、{{ic|autodetect}} フックより前に {{ic|keyboard}} を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。[[mkinitcpio#通常のフック]] を参照してください。 |
一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、{{ic|autodetect}} フックより前に {{ic|keyboard}} を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。[[mkinitcpio#通常のフック]] を参照してください。 |
||
+ | |||
+ | {{TranslationStatus|dm-crypt/System configuration|2023-09-04|784929}} |
2024年12月20日 (金) 17:15時点における最新版
目次
初期ユーザ空間でロックを解除する
暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが initramfs に含まれている必要があります。ロックを解除するべきボリュームは、たいていカーネルパラメータで渡されます。
以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。
mkinitcpio
場合にもよりますが、以下の mkinitcpio フックの一部は有効化しておく必要があります:
busybox | systemd | ユースケース |
---|---|---|
encrypt
|
sd-encrypt
|
ルートパーティションが暗号化されている場合や、何らかの暗号化されているパーティションがルートパーティションのマウントよりも前に必要になる場合に必要です。その他の場合においては必要ありません。/etc/crypttab などのシステム初期化スクリプトが、ルート以外のパーティションのロックを解除してくれるからです。このフックは udev や systemd フックよりも後に配置しなければなりません。
|
keyboard
|
初期ユーザ空間でキーボードを動作させるために必要です。 | |
keymap
|
sd-vconsole
|
暗号化パスワードの入力において US キーマップ以外のサポートを提供します。このフックは、encrypt フックよりも前に配置しなければなりません。さもないと、暗号化パスワードの入力にデフォルトの US キーマップしか使えません。キーマップは /etc/vconsole.conf で設定してください (Linux コンソール/キーボード設定#永続的な設定 を参照してください)。
|
consolefont
|
初期ユーザ空間で代替のコンソールフォントをロードします。フォントは /etc/vconsole.conf で設定してください (Linux コンソール/キーボード設定#永続的な設定 を参照してください)。
|
必要なその他のフックは、システムのインストールに関するその他のマニュアルから明らかなはずです。
例
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
フックのどちらを使うかによります。root
と resume
は両方において同じように指定します。
root
root=
パラメータでは、実際の (暗号化の解除された) ルートファイルシステムの device
を指定します:
root=device
- ルートファイルシステムが、暗号化の解除されたデバイスファイル上に直接フォーマットされている場合、このパラメータの引数は
/dev/mapper/dmname
になります。 - 最初に LVM がアクティブ化されていて、そこに暗号化されている論理ルートボリュームが存在している場合、引数は上記の形式と同じになります。
- ルートファイルシステムが、完全に暗号化されている LVM の論理ボリューム内に存在している場合、デバイスマッパーは一般に
root=/dev/volumegroup/logicalvolume
となります。
resume
resume=device
device
は、suspend to disk (ハイバネーション) で使用される、暗号化の解除された (スワップ) ファイルシステムのデバイスファイルです。スワップが個別のパーティション上にある場合は、/dev/mapper/swap
という形式になります。dm-crypt/スワップの暗号化 も参照してください。
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
という形式になります。
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 バイトのキーファイルを読み込みます。
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 によって使用されるカーネルパラメータの一部を説明します。
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.name=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=name
LUKS パーティションが開かれたあとにマッピングされるデバイスの名前を指定します。XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX は LUKS パーティションの UUID です。これは、encrypt
の cryptdevice
の第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
キーファイルが他のデバイス上に存在する場合は:
rd.luks.key=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=/path/to/keyfile:UUID=ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ
UUID=ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ
の部分は、キーファイルの存在するデバイスの識別子に置き換えてください。
rd.luks.options
rd.luks.options=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX=options
または
rd.luks.options=options
UUID を指定した場合、そのデバイスに対してオプションを設定します。UUID を指定しなかった場合、他の場所 (例えば crypttab) で指定しなかった全デバイスに対してオプションを設定します。
このパラメータは crypttab のオプションフィールドに似ています。形式は同じです。オプションはコンマで区切られ、値のあるオプションは option=value
のように指定します。これは、encrypt
の cryptdevice
の第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.uuid
か rd.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
ここでは、暗号化されたボリュームは root
という名前で (/dev/mapper/root
に) マウントされます。対象のストレージデバイスの UUID でマウントされ、パスワードは使われず、TPM2 デバイスからキーが取得されます。
TPM2 デバイスを使用するにはパスワードのフィールドに none
を指定しなければならないことに注意してください。さもないと、与えられた値がパスワードか鍵として使用されてしまい、それがうまくいかなかった場合に TPM2 デバイスからキーを読み込もうとせずにパスワードプロンプトが表示してしまいます。
上記のようにデバイスを UUID で指定する場合、それが基底のストレージデバイス (つまり、暗号化されているデバイス自体) の UUID であるを確認してください (他の場所でルートファイルシステムとして指定される、復号さらた後のボリュームの UUID ではありません)。
rd.luks.data
デタッチされた LUKS ヘッダを使用する場合、暗号化されたデータが含まれるブロックデバイスを指定してください。ヘッダファイルの場所は rd.luks.options
で指定する必要があります。
詳細や方法は dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化 を参照してください。
後期ユーザ空間でロックを解除する
crypttab
/etc/crypttab
(encrypted device table) ファイルには、システムの起動時にロックを解除する暗号化デバイスのリストを記述します。fstab と似ています。このファイルを使うことで、暗号化したスワップデバイスやセカンダリファイルシステムを自動でマウントすることが可能です。
crypttab
は fstab
より前に読み込まれます。dm-crypt コンテナを、その内部に存在するファイルシステムよりも前にアンロックできるようにするためです。crypttab
は、システムの起動した後に読み込まれることに注意してください。よってこの方法は、ルートパーティションを暗号化する場合のように、mkinitcpio フックを使用して暗号化済みのパーティションのロックを解除する方法や、カーネルパラメータを使用して設定する方法の代わりではありません。crypttab
は、systemd-cryptsetup-generator
によってブート時に自動的に処理されます。
詳細は crypttab(5) を参照してください。以下にはいくつかの例を載せています。暗号化されたデバイスをマウントするために UUID を使用する方法については #ブート時にマウントする セクションを参照してください。
/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
に関する他の情報は、#必要に応じてマウントする を参照してください。
ブート時にマウントする
暗号化されたドライブをブート時にマウントしたい場合、デバイスの UUID を /etc/crypttab
に記述してください。UUID (パーティション) を lsblk -f
コマンドで得て、それを crypttab
内に以下の形式で追加してください:
/etc/crypttab
externaldrive UUID=2f9a8428-ac69-478a-88a2-4aa458565431 none timeout=180
最初のパラメータは、暗号化されたドライブに使用するデバイスマッパーの名前です。自由に指定してください。none
オプションは、起動中にパーティションのロックを解除するためのパスフレーズを入力するプロンプトをトリガーします。timeout
オプションは、ブート時に復号パスワードを入力するタイムアウトを秒単位で定義します。
キーファイルでロックを解除する
セカンダリファイルシステムのキーファイルが、暗号化されたルートファイルシステム内に保存されている場合、キーファイルはシステムの電源が落ちている間は安全であり、crypttab を使ってブート中にキーファイルを自動的に読み込んでロックを解除することができます。例えば、UUID によって指定された crypt をアンロックするには:
/etc/crypttab
home-crypt UUID=UUID-identifier /etc/cryptsetup-keys.d/home-crypt.key
そして、(/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#通常のフック を参照してください。