「Dm-crypt/システム設定」の版間の差分
Kusanaginoturugi (トーク | 投稿記録) (カテゴリの修正) |
|||
(5人の利用者による、間の24版が非表示) | |||
1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
− | [[Category: |
+ | [[Category:保存データ暗号化]] |
− | [[Category:ファイルシステム]] |
||
[[en:dm-crypt/System configuration]] |
[[en:dm-crypt/System configuration]] |
||
+ | [[es:Dm-crypt (Español)/System configuration]] |
||
− | [[Dm-crypt]] に戻る。 |
||
+ | [[pt:Dm-crypt (Português)/System configuration]] |
||
+ | [[ru:Dm-crypt (Русский)/System configuration]] |
||
+ | {{Tip| |
||
− | {{Tip|リモートで root などのブートファイルシステムのロックを解除する必要がある場合 (ヘッドレスマシンや遠隔地のサーバーなど)、[[Dm-crypt/特記事項#root などのパーティションのリモート解除]]の指示に従って下さい。}} |
||
+ | * ルートファイルシステムや他の初期ブートにおけるファイルシステムをリモートでアンロックする必要がある場合 (ヘッドレスマシンや遠隔地のサーバなど) は、[[dm-crypt/特記事項#root などのパーティションのリモート解除]] の指示に従ってください。 |
||
+ | * コマンドの出力を挿入できる[[テキストエディタ]]を使用し、[[永続的なブロックデバイスの命名#永続的な命名の方法|適切な lsblk や blkid コマンド]]を使うことで、設定ファイルにおける UUID や PARTUUID などの入力作業を容易にできます (例えば、[[nano]] での {{ic|Ctrl+t}}、[[Vim]] や [[Neovim]] での {{ic|:read}}、[[mcedit]] での {{ic|Alt+u}})。あるいは、[[アプリケーション一覧/ユーティリティ#ターミナルマルチプレクサ|ターミナルマルチプレクサ]]を使用して、そのコピーペースト機能を使用することもできます。 |
||
+ | }} |
||
+ | == 初期ユーザ空間でロックを解除する == |
||
− | == mkinitcpio == |
||
− | システムの暗号化をする場合、[[mkinitcpio]] を正しく設定した後に initial ramdisk を再生成する必要があります。特にシナリオによっては、以下のフックを有効しなくてはなりません: |
||
+ | 暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが [[initramfs]] に含まれている必要があります。ロックを解除するべきボリュームは、たいてい[[カーネルパラメータ]]で渡されます。 |
||
− | * {{ic|encrypt}}: always needed when encrypting the root partition, or a partition that needs to be mounted ''before'' root. It is not needed in all the other cases, as system initialization scripts like {{ic|/etc/crypttab}} take care of unlocking other encrypted partitions. |
||
− | * {{ic|shutdown}}: recommended before ''mkinitcpio 0.16'' to ensure controlled unmounting during system shutdown. It is still functional, but not deemed necessary [https://mailman.archlinux.org/pipermail/arch-dev-public/2013-December/025742.html anymore]. |
||
− | * {{ic|keymap}}: provides support for foreign keymaps for typing encryption passwords; it must come ''before'' the {{ic|encrypt}} hook. |
||
− | * {{ic|keyboard}}: needed to make USB keyboards work in early userspace. |
||
− | ** {{ic|usbinput}}: deprecated, but can be given a try in case {{ic|keyboard}} does not work. |
||
+ | 以下のセクションでは、mkinitcpio の設定方法と、必要なカーネルパラメータのリストを載せています。 |
||
− | Other hooks needed should be clear from other manual steps followed during the installation of the system. |
||
− | == |
+ | === mkinitcpio === |
− | 暗号化された root パーティションを起動できるようにするには、以下のカーネルパラメータのサブセットを設定する必要があります: 設定する方法は[[カーネルパラメータ]]の使用している[[ブートローダー]]の手順を見て下さい。例えば [[GRUB#Root 暗号化|GRUB]] を使用しているならブート設定を生成する前に {{ic|/etc/default/grub}} にパラメータを追加するのが良いでしょう。 |
||
+ | 場合にもよりますが、以下の [[mkinitcpio#HOOKS|mkinitcpio フック]]の一部は有効化しておく必要があります: |
||
− | === cryptdevice === |
||
− | This parameter will make the system prompt for the passphrase to unlock the device containing the encrypted root on a cold boot. It is parsed by the {{ic|encrypt}} hook to identify which device contains the encrypted system: |
||
+ | {| class="wikitable" |
||
− | cryptdevice=''device'':''dmname'' |
||
+ | ! 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 イメージの生成時に外部キーボードが接続されていなければ、そのキーボードは初期ユーザ空間では動作しなくなってしまいます。}} |
||
− | * {{ic|''device''}} は暗号化されたデバイスのパスです。[[永続的なブロックデバイスの命名]]を使うことを推奨します。 |
||
+ | |- |
||
− | * {{ic|''dmname''}} is the '''d'''evice-'''m'''apper name given to the device after decryption, which will be available as {{ic|/dev/mapper/''dmname''}}. |
||
+ | |style="text-align: center;white-space:nowrap;"| {{ic|keymap}} |
||
− | * If a LVM contains the [[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|encrypted root]], the LVM gets activated first and the volume group containing the logical volume of the encrypted root serves as ''device''. It is then followed by the respective volume group to be mapped to root. The parameter follows the form of {{ic|cryptdevice<nowiki>=</nowiki>''/dev/vgname/lvname'':''dmname''}}. |
||
+ | |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#通常のフック|その他のフック]]は、システムのインストールに関するその他のマニュアルから明らかなはずです。 |
||
− | === root === |
||
+ | |||
− | {{ic|1=root=}} パラメータは実際の (暗号化を解除した後の) root ファイルシステムの {{ic|''device''}} を指定します: |
||
+ | {{Note|{{ic|/etc/mkinitcpio.conf}} に変更を加えたときは [[initramfs を再生成する]]のを忘れないでください。}} |
||
+ | |||
+ | ==== 例 ==== |
||
+ | |||
+ | {{ic|encrypt}} フックを使用する典型的な {{ic|/etc/mkinitcpio.conf}} の設定としては、以下のようになります: |
||
+ | |||
+ | {{hc|/etc/mkinitcpio.conf|2= |
||
+ | ... |
||
+ | HOOKS=(base '''udev''' autodetect modconf kms keyboard '''keymap''' '''consolefont''' block '''encrypt''' lvm2 filesystems fsck) |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | {{ic|sd-encrypt}} フックを使用する、systemd ベースの initramfs の設定は: |
||
+ | |||
+ | {{hc|/etc/mkinitcpio.conf|2= |
||
+ | ... |
||
+ | HOOKS=(base '''systemd''' autodetect modconf kms keyboard '''sd-vconsole''' block '''sd-encrypt''' lvm2 filesystems fsck) |
||
+ | ... |
||
+ | }} |
||
+ | |||
+ | === カーネルパラメータ === |
||
+ | |||
+ | 必要な[[カーネルパラメータ]]は、{{ic|encrypt}} フックと {{ic|sd-encrypt}} フックのどちらを使うかによります。{{ic|root}} と {{ic|resume}} は両方において同じように指定します。 |
||
+ | |||
+ | {{Tip|{{ic|sd-encrypt}} フックと [[systemd#GPT パーティションの自動マウント|GPT パーティションの自動マウント]]を使用する場合、これらのカーネルパラメータの指定は省略できます。[[dm-crypt/システム全体の暗号化#ブートローダーの設定]] を参照してください。}} |
||
+ | |||
+ | ==== root ==== |
||
+ | |||
+ | {{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 フックを使う ==== |
− | This parameter is required by the ''encrypt'' hook for reading a keyfile to unlock the ''cryptdevice''. It can have two parameter sets, depending on whether the keyfile exists as a file or a bitstream starting on a specific location. |
||
+ | {{Note|[[sd-encrypt]] フックと比べて、{{ic|encrypt}} フックは以下をサポートしていません: |
||
− | For a file the format is: |
||
+ | * [[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''}} is the raw block device where the key exists. |
||
− | *{{ic|''fstype''}} |
+ | * {{ic|''fstype''}}: {{ic|''device''}} のファイルシステムのタイプ (auto を指定することも可)。 |
− | *{{ic|''path''}} |
+ | * {{ic|''path''}}: デバイス内のキーファイルの絶対パス。 |
− | + | 例: {{ic|1=cryptkey=LABEL=usbstick:vfat:/secretkey}} |
|
+ | |||
+ | デバイス上のビットストリームの場合、キーの場所は次のように指定されます: |
||
For a bitstream on a device the key's location is specified with the following: |
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 バイトのキーファイルを読み込みます。 |
||
− | Example: {{ic|cryptkey<nowiki>=</nowiki>/dev/sdZ:0:512}} reads a 512 bit keyfile starting at the beginning of the device. |
||
+ | |||
+ | {{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'' |
||
+ | |||
+ | 例: {{ic|1=cryptkey=rootfs:/secretkey}} |
||
+ | |||
+ | また、{{ic|cryptkey}} が指定されない場合、デフォルトで (initramfs 内の) {{ic|/crypto_keyfile.bin}} が指定されたものとみなされることに注意してください。[https://gitlab.archlinux.org/archlinux/packaging/packages/cryptsetup/-/blob/main/hooks-encrypt#L8] |
||
+ | |||
+ | [[dm-crypt/デバイスの暗号化#キーファイル]] も参照してください。 |
||
+ | |||
+ | ===== crypto ===== |
||
+ | |||
+ | これは、''dm-crypt'' プレーンモードのオプションを ''encrypt'' フックに渡すための固有のパラメータです。 |
||
+ | |||
+ | 以下の形式を取ります: |
||
+ | |||
+ | crypto=''hash'':''cipher'':''keysize'':''offset'':''skip'' |
||
+ | |||
+ | 引数は、''cryptsetup'' のオプションと直接関連します。[[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照してください。 |
||
+ | |||
+ | ''plain'' のデフォルトオプションのみで暗号化されたディスクの場合、{{ic|crypto}} 引数を指定しなければなりませんが、各エントリは空白のままにすることができます: |
||
+ | |||
+ | crypto=:::: |
||
+ | |||
+ | 引数の具体的な例は以下の通りです: |
||
+ | |||
+ | crypto=sha512:twofish-xts-plain64:512:0: |
||
+ | |||
+ | ==== systemd-cryptsetup-generator を使う ==== |
||
+ | |||
+ | ''systemd-cryptsetup-generator'' は、暗号化されたデバイスのロックを解除するために、[[カーネルパラメータ]]のサブセットと {{ic|/etc/crypttab}} を読み込む [[systemd]] ユニットジェネレータです。このジェネレータに関する詳細やサポートされている全オプションについては、{{man|8|systemd-cryptsetup-generator}} man ページを参照してください。 |
||
+ | |||
+ | ''systemd-cryptsetup-generator'' は、{{ic|sd-encrypt}} [[Mkinitcpio#HOOKS|mkinitcpio フック]]や {{ic|systemd}} [[Dracut#Dracut モジュール|dracut モジュール]]が使用される [[Arch ブートプロセス#initramfs|initramfs の段階]]で実行されます。 |
||
+ | |||
+ | 以下では、''systemd-cryptsetup-generator'' によって使用される[[カーネルパラメータ]]の一部を説明します。 |
||
+ | |||
+ | {{Tip| |
||
+ | * {{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| |
||
+ | * {{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.*}} も使用しないでください。}} |
||
+ | |||
+ | ===== rd.luks.uuid ===== |
||
+ | |||
+ | {{Tip|{{ic|rd.luks.name}} を使用する場合、{{ic|rd.luks.uuid}} は省略できます。}} |
||
+ | |||
+ | rd.luks.uuid=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' |
||
+ | |||
+ | ブート時に復号するデバイスの [[UUID]] をこのフラグで指定します。 |
||
+ | |||
+ | デフォルトでは、マッピングされたデバイスは、{{ic|/dev/mapper/luks-''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''}} に配置されます。''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' は LUKS パーティションの UUID です。 |
||
+ | |||
+ | ===== rd.luks.name ===== |
||
+ | |||
+ | {{Tip|このパラメータを使用する場合、{{ic|rd.luks.uuid}} は省略できます。}} |
||
+ | |||
+ | rd.luks.name=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''name'' |
||
+ | |||
+ | LUKS パーティションが開かれたあとにマッピングされるデバイスの名前を指定します。''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'' は LUKS パーティションの UUID です。これは、{{ic|encrypt}} の {{ic|cryptdevice}} の第2パラメータと等価です。 |
||
+ | |||
+ | 例えば、{{ic|1=rd.luks.name=12345678-9abc-def0-1234-56789abcdef0=root}} を指定すると、UUID {{ic|12345678-9ABC-DEF0-1234-56789ABCDEF0}} のロック解除された LUKS デバイスは、{{ic|/dev/mapper/root}} に配置されます。 |
||
+ | |||
+ | ===== rd.luks.key ===== |
||
+ | |||
+ | UUID で指定されたデバイスを復号する際に用いるパスワードファイルの場所を指定します。{{ic|encrypt}} フックの {{ic|cryptkey}} パラメータにあるようなデフォルトの場所は存在しません。 |
||
+ | |||
+ | キーファイルが [[mkinitcpio#BINARIES と FILES|initramfs 内に含まれている]]場合は: |
||
+ | |||
+ | rd.luks.key=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''/path/to/keyfile'' |
||
+ | |||
+ | あるいは |
||
+ | |||
+ | rd.luks.key=''/path/to/keyfile'' |
||
+ | |||
+ | {{Tip|キーファイルが {{ic|/etc/cryptsetup-keys.d/''name''.key}} として含まれている場合、{{ic|rd.luks.key}} パラメータは完全に省略できます。}} |
||
+ | |||
+ | キーファイルが他のデバイス上に存在する場合は: |
||
+ | |||
+ | rd.luks.key=''XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX''=''/path/to/keyfile'':UUID=''ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ'' |
||
+ | |||
+ | {{ic|1=UUID=''ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ''}} の部分は、キーファイルの存在するデバイスの識別子に置き換えてください。 |
||
+ | |||
+ | {{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 |
||
+ | |||
+ | # /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 マネージャの設定を再読み込みし、新しく生成された {{ic|systemd-cryptsetup@''name''.service}} を[[開始]]してください。 |
||
+ | |||
+ | {{hc|# cryptsetup status ''name''|2= |
||
+ | /dev/mapper/''name'' is active. |
||
+ | type: ... |
||
+ | cipher: ... |
||
+ | keysize: ... bits |
||
+ | key location: ... |
||
+ | device: /dev/sdxN |
||
+ | sector size: ... |
||
+ | offset: ... sectors |
||
+ | size: ... sectors |
||
+ | mode: ... |
||
+ | flags: ... |
||
+ | }} |
||
+ | |||
+ | {{ic|systemd-cryptsetup@''name''.service}} に関する他の情報は、[[#必要に応じてマウントする]] を参照してください。 |
||
+ | |||
+ | {{Tip|GPT と特定のパーティションタイプ UUID を使用する場合、systemd で一部のマウントポイントに対しては crypttab と fstab を使わなくても済みます。詳細は、[[systemd#GPT パーティションの自動マウント]]。}} |
||
+ | |||
+ | ==== ブート時にマウントする ==== |
||
+ | |||
+ | 暗号化されたドライブをブート時にマウントしたい場合、デバイスの UUID を {{ic|/etc/crypttab}} に記述してください。UUID (パーティション) を {{ic|lsblk -f}} コマンドで得て、それを {{ic|crypttab}} 内に以下の形式で追加してください: |
||
+ | |||
+ | {{hc|/etc/crypttab|2= |
||
+ | 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 ジェネレータは、スタックされたブロックデバイスをブート時に自動的に処理します。 |
||
+ | |||
+ | 例えば、[[RAID]] 環境を作成し、そこに cryptsetup を使い、暗号化されたブロックデバイス内にそれぞれのファイルシステムを持つ [[LVM]] 論理ボリュームを作成することができます: |
||
+ | |||
+ | {{hc|$ 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 |
||
+ | }} |
||
+ | これは、ブート時にパスフレーズが要求し、自動的にマウントします。 |
||
− | [[Dm-crypt/デバイスの暗号化#キーファイル]]を参照。 |
||
+ | 対応する正しい crypttab (例えば {{ic|crypto_LUKS}} デバイスの UUID) と fstab ({{ic|/dev/vgraid/lvraid}}) エントリを指定すれば、{{ic|/etc/crypttab}} の処理はルート以外のマウントにのみ適用されるので、mkinitcpio フック/設定を追加する必要がありません。例外として、{{ic|mdadm_udev}} フックが''すでに''使われている場合 (例:ルートデバイス用) です。この場合、正しい root raid が最初に選ばれるように {{ic|/etc/madadm.conf}} と initramfs を更新する必要があります。 |
||
− | === crypto === |
||
− | This parameter is specific to pass ''dm-crypt'' plain mode options to the ''encrypt'' hook. |
||
+ | ==== 必要に応じてマウントする ==== |
||
− | It takes the form |
||
− | {{bc|<nowiki>crypto=</nowiki><hash>:<cipher>:<keysize>:<offset>:<skip>}} |
||
+ | 以下のコマンドを使用する代わりとして |
||
− | 引数は ''cryptsetup'' のオプションと直接関連します。[[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]]を見て下さい。 |
||
+ | # cryptsetup open UUID=... externaldrive |
||
− | For a disk encrypted with just ''plain'' default options, the {{ic|crypto}} arguments must be specified, but each entry can be left blank: |
||
− | {{bc|<nowiki>crypto=::::</nowiki>}} |
||
− | A specific example of arguments is |
||
− | {{bc|<nowiki>crypto=sha512:twofish-xts-plain64:512:0:</nowiki>}} |
||
+ | 以下のように {{ic|/etc/crypttab}} 内にエントリが存在する場合は、{{ic|systemd-cryptsetup@externaldrive.service}} を[[開始]]することができます: |
||
− | == crypttab == |
||
− | The {{ic|/etc/crypttab}} (or, encrypted device table) file contains a list of encrypted devices that are to be unlocked when the system boots, similar to [[fstab]]. This file can be used for automatically mounting encrypted swap devices or secondary filesystems. |
||
+ | {{hc|/etc/crypttab|output= |
||
− | It is read ''before'' [[fstab]], so that dm-crypt containers can be unlocked before the filesystem inside is mounted. Note that crypttab is read ''after'' the system has booted, so it is not a replacement for unlocking via [[#mkinitcpio|mkinitcpio]] hooks and [[#ブートローダー|boot loader options]] in the case of an [[Dm-crypt/システム全体の暗号化|encrypted root]] scenario. The boot time processing of crypttab is done by the {{ic|systemd-cryptsetup-generator}} automatically, i. e. there is no need to activate it. |
||
+ | externaldrive UUID=... none noauto |
||
+ | }} |
||
+ | この方法では、正確な crypttab オプションを覚えておく必要はありません。必要であれば、パスフレーズのプロンプトが表示されます。 |
||
− | 詳しくは crypttab の [http://linux.die.net/man/5/crypttab man page] を見て下さい。デバイスの UUID を使って設定する方法は [[#起動時にマウント]] を見て下さい。 |
||
+ | 対応するユニットファイルは {{man|8|systemd-cryptsetup-generator}} によって自動的に生成されます。生成されたユニットファイルは全て以下のコマンドで一覧表示できます: |
||
− | {{Warning|For ''dm-crypt'' [[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション|plain mode]] ({{ic|--type plain}}) devices, systemd issues in the crypttab processing logic exist: |
||
− | * For {{ic|--type plain}}) devices with a keyfile, it is necessary to add the {{ic|1=hash=plain}} option to crypttab due to a [https://bugs.freedesktop.org/show_bug.cgi?id=52630 systemd incompatibility]. '''Do not''' use {{ic|systemd-cryptsetup}} manually for device creation to work around it! |
||
− | * It may further be required to add the {{ic|plain}} option explicitly to force systemd-cryptsetup to recognize a {{ic|--type plain}}) device at boot. [https://github.com/systemd/systemd/issues/442 GitHub issue in question.]}} |
||
+ | $ systemctl list-unit-files | grep systemd-cryptsetup |
||
− | {{hc|/etc/crypttab|<nowiki> |
||
− | # Example crypttab file. Fields are: name, underlying device, passphrase, cryptsetup options. |
||
− | # Mount /dev/lvm/swap re-encrypting it with a fresh key each reboot |
||
− | 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. |
||
− | 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. |
||
− | home /dev/lvm/home |
||
− | # Mount /dev/sdb1 as /dev/mapper/backup using LUKS, with a passphrase stored in a file. |
||
− | backup /dev/sdb1 /home/alice/backup.key |
||
− | </nowiki>}} |
||
+ | == トラブルシューティング == |
||
− | === 起動時にマウント === |
||
+ | === システムがブート時に固まる/パスワードプロンプトが表示されない === |
||
− | If you want to mount an encrypted drive at boot time, just enter the device's UUID in {{ic|/etc/crypttab}}. You get the UUID (partition) by using the command {{ic|lsblk -f}} and adding it to |
||
+ | [[Plymouth]] を使用する場合、適切なモジュール ([[Plymouth#mkinitcpio]] を参照) を使用するか、Plymouth を無効化してください。正しく設定しないと Plymouth によってパスワードプロンプトが隠れてしまい、システムを起動できなくなります。 |
||
− | {{hc|/etc/crypttab|<nowiki> |
||
− | externaldrive UUID=2f9a8428-ac69-478a-88a2-4aa458565431 none luks,timeout=180 |
||
− | </nowiki>}} |
||
+ | === キーボードやファイルシステム上のキーファイルをロック解除に利用できない === |
||
− | The first parameter is your preferred device mapper's name for your encrypted drive. The option {{ic|none}} will trigger a prompt during boot to type the passphrase for unlocking the partition. The {{ic|timeout}} option defines the timeout in seconds for entering the decryption password while booting. |
||
− | A [[Dm-crypt/デバイスの暗号化#キーファイル|keyfile]] can also be set up and referenced instead of {{ic|none}}. This results in an automatic unlocking, if the keyfile is accessible during boot. Since LUKS offers the option to have multiple keys, the chosen option can also be changed later. |
||
+ | キーボードや、initramfs の生成時に存在しないファイルシステム上のキーファイルを使って LUKS デバイスのロックを解除する場合、対応するモジュールを mkinitcpio の {{ic|MODULES}} 配列に追加する必要があるかもしれません。この作業は、キーボードが USB ハブ経由で接続されている場合にも必要かもしれません。この問題に関する詳細は [[mkinitcpio#MODULES]] を参照してください。追加するべきキーボードやファイルシステムのモジュール名を探し当てる方法については [[mkinitcpio/Initramfs の最小化#モジュールの選別]] を参照してください |
||
− | Use the device mapper's name you've defined in {{ic|/etc/crypttab}} in {{ic|/etc/fstab}} as shown here: |
||
+ | 一般に、initramfs の生成時に PC に接続されていないキーボードに関しては、{{ic|autodetect}} フックより前に {{ic|keyboard}} を配置する必要があります。さもないと、現在接続されているハードウェアに必要なモジュールしか initramfs に追加されません。[[mkinitcpio#通常のフック]] を参照してください。 |
||
− | {{hc|/etc/fstab|<nowiki> |
||
− | /dev/mapper/externaldrive /mnt/backup ext4 defaults,errors=remount-ro 0 2 |
||
− | </nowiki>}} |
||
+ | {{TranslationStatus|dm-crypt/System configuration|2023-09-04|784929}} |
||
− | Since {{ic|/dev/mapper/externaldrive}} already is the result of a unique partition mapping, there is no need to specify an UUID for it. In any case, the mapper with the filesystem will have a different UUID than the partition it is encrypted in. |
2024年6月8日 (土) 13:47時点における最新版
目次
初期ユーザ空間でロックを解除する
暗号化されているルートボリュームを起動するには、初期ユーザ空間でそのボリュームのロックを解除するために必要なツールが 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/特記事項#Encrypted system using a detached LUKS header[リンク切れ: セクションが存在しません] を参照してください。
後期ユーザ空間でロックを解除する
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#通常のフック を参照してください。