zfs_encrypt - ZFS ファイルシステムを暗号化する
zfs [-?]
zfs help subcommand | help | property property-name | permission
zfs help -l properties
zfs create -o encryption=on [-o keysource=raw | hex | passphrase,prompt | file://|pkcs11:|https://] ... dataset
zfs clone [-p] [-K] [-o property=value] ... snapshot filesystem|volume
zfs get [-r|-d depth][-Hp][-o all | field[,...]] [-s source[,...]] all | property[,...] filesystem|volume|snapshot ...
zfs key -l | {-a | [-r] filesystem|volume}
zfs key -u [-f] {-a | [-r] filesystem|volume}
zfs key -c [-o keysource=value] {-a | [-r] filesystem|volume}
zfs key -K {-a | [-r] filesystem|volume}
zfs mount
zfs mount [-vO] [-o options] -a | filesystem
zfs unmount [-f] -a | filesystem|mountpoint
zpool(1M) で説明されているように、zfs create -o encryption コマンドは、ZFS ストレージプール内で新しく作成された ZFS データセットを暗号化します。
暗号化とは機密保護のためにデータをエンコードするプロセスで、エンコードされたデータにデータ所有者がアクセスするには鍵が必要になります。暗号化ポリシーは ZFS データセットの作成時に設定できますが、ポリシーの変更はできません。詳細については、「ネイティブプロパティー」のセクションの encryption および keysource プロパティーの説明を参照してください。
データセットの暗号化は恒久的に継承され、データセットのクローン作成中に削除することはできません。複製されたデータセットストリームを受信したときに、暗号化が必要な場合は、宛先データセットで暗号化が有効になっている必要があります。そうでない場合、データは平文で格納されます。暗号化データセットの完全に複製されたストリームにより、新しく生成された鍵の下での暗号化データセットが生じます。ストリーム自体は暗号化されません。
ZFS 暗号化に関連する次のネイティブなプロパティーは、データセットに関する読み取り専用の統計情報で構成されています。これらのプロパティーは、設定も継承もできません。ネイティブプロパティーは、特に注記がないかぎり、すべてのデータセットタイプに適用されます。ZFS ネイティブプロパティーの完全な説明およびリストは、zfs(1M) を参照してください。
指定したデータセットに対する zfs key –c 操作によりラップ鍵を最後に変更した日付。鍵の変更操作が実行されていない場合、keychangedate には値がありません。一部のリリースでは誤って作成日と同じになっていました。
データセットの暗号化鍵のステータスを識別します。データセットの鍵を利用できるかどうかは、available または unavailable のステータスで示されます。暗号化が有効になっていないデータセットの場合、none が表示されます。
ファイルシステムの場合は、ファイルシステムが現在マウントされているかどうかを示します。このプロパティーは、yes または no になります。
このデータセットに対する zfs key –K または zfs clone –K 操作によりデータ暗号化鍵を最後に変更した日付。鍵の変更操作が実行されていない場合、rekeydate には値がありません。一部のリリースでは誤って作成日と同じになっていました。
次のプロパティーは、ファイルシステムの作成後には変更できないため、ファイルシステムの作成時に設定するようにしてください。zfs create または zpool create コマンドで設定されていない場合、これらのプロパティーは親データセットから継承されます。これらの機能がサポートされる前に親データセットが作成されたため、親データセットにこれらのプロパティーが存在しない場合、新しいファイルシステムではこれらのプロパティーにデフォルト値が設定されます。
暗号化されたデータセットに使用する暗号化アルゴリズムと鍵長を定義します。on の値は aes-128-ccm と同じです。デフォルト値は off です。encryption が off 以外の値に設定されている場合、checksum プロパティーは sha256+mac に設定され、readonly になります。
一般ユーザーは、create、mount、keysource、checksum、encryption などの適切な許可を委任されている場合に、暗号化されたファイルを作成して鍵の操作を管理できます。
次のプロパティーは、作成時に指定する必要があり、特殊コマンドを使用すると変更できます。
データセットの鍵をラップする鍵の形式と場所を定義します。zfs key –l コマンドを使用してデータセットを作成、マウント、または読み込むときに、この鍵が必要になります。
keysource プロパティーには、鍵の表示方法を指定する format と、鍵の取得先を特定する locator の 2 つの値を指定できます。
format には次の 3 つの値を指定できます。
raw: 生の鍵バイト
hex: 16 進数の鍵文字列
passphrase: 鍵を生成する文字列
locator には次の 2 つの値を指定できます。
prompt: データセットの作成またはマウント時に鍵またはパスフレーズの入力を要求
file:///filename: ファイルシステム内の鍵またはパスフレーズファイルの場所
pkcs11: PKCS#11 トークンでの鍵またはパスフレーズの場所を記述した URI
https://location: セキュアなサーバー上の鍵またはパスフレーズファイルの場所この方法を使用して鍵情報を平文で転送することは推奨されていません。URL に GET を付けると、keysource の形式部分で要求された内容に従って、鍵の値またはパスフレーズのみが返されます。
keysource で https:// ロケータを使用する場合は、サーバーが発行する証明書が libcurl および OpenSSL で信頼されているものである必要があります。独自のトラストアンカーまたは自己署名付き証明書を、/etc/openssl/certs にある証明書ストアに追加します。PEM 形式の証明書を /etc/certs/CA ディレクトリに配置し、svcadm refresh ca-certificates コマンドを実行します。
https:// のロケータを使用して鍵を作成する例については、「使用例」を参照してください。
ラップ鍵の値または鍵を変更するには、zfs key –c コマンドを実行する必要があります。鍵の場所のみを変更する (たとえば、ファイル名を変更する) 必要がある場合は、zfs set コマンドを keysource プロパティーとともに使用します。zfs set コマンドで鍵の場所だけが変更された場合、新しい場所は有効なラップ鍵を持っているかどうかなどの ZFS によるチェックは行われません。
keysource が指定も継承もされていない場合、デフォルトの keysource は、暗号化が有効なデータセットでは passphrase,prompt に、暗号化が無効なデータセットでは none に設定されます。
状態を変更するサブコマンドはすべて、元の形式でプールに永続的に記録されます。
ヘルプメッセージを表示します。
zfs コマンドの使用法情報を表示します。特定のコマンド、プロパティー、または委任アクセス権のヘルプを表示できます。特定のコマンドまたはプロパティーのヘルプを表示した場合、コマンド構文またはプロパティー値が表示されます。引数を何も付けずに zfs help を使用すると、zfs コマンドの完全なリストが表示されます。
zfs プロパティーに関する情報 (プロパティー値が編集可能および継承可能かどうか、指定可能な値など) が表示されます。
aes-128-ccm を使用する、暗号化が有効になった新しい ZFS ファイルシステムを作成します。サポートされている暗号化アルゴリズムのリストについては、暗号化プロパティーの説明を参照してください。
存在しない親データセットをすべて作成します。この方法で作成されたデータセットは、それぞれの親から継承した mountpoint プロパティーに従って自動的にマウントされます。コマンド行で –o オプションを使用して指定したプロパティーはすべて無視されます。ターゲットのファイルシステムがすでに存在する場合、処理は正常に完了します。
暗号化プロパティーを value に設定します。複数の –o オプションを指定できます。複数の –o オプション内で同じプロパティーを指定した場合は、エラーが発生します。
指定したスナップショットのクローンを作成します。詳細は、「クローン」のセクションを参照してください。ターゲットのデータセットは、ZFS 階層内の任意の場所に配置できます。作成されたデータセットは元のデータセットと同タイプになります。
存在しない親データセットをすべて作成します。この方法で作成されたデータセットは、それぞれの親から継承した mountpoint プロパティーに従って自動的にマウントされます。ターゲットのファイルシステムまたはボリュームがすでに存在する場合、処理は正常に完了します。
指定されたプロパティーを設定します。詳細は、zfs create を参照してください。
このデータセットの鍵チェーンに新しいデータ暗号化鍵を作成します。クローンに書き込まれたデータは、新しいデータ暗号化鍵を使用します。これは元のスナップショットとは異なる鍵です。
keysource プロパティーを、各データセット用に指定した値に設定します。keysource の場所のみを変更できます。ラップ鍵の値を変更する場合は、zfs key –c コマンドを使用します。
子データセットのサブツリー全体に対して、設定の有効な値を再帰的に適用します。有効な値は、プロパティーに応じて設定または継承できます。
指定したデータセットのプロパティーを表示します。
指定したデータセットのプロパティーを再帰的に表示します。
すべての子孫データセットを再帰的に表示しますが、再帰の深さは depth に制限されます。深さ 1 の場合は、データセットとその直接の子だけが表示されます。
スクリプトによる解析がより容易な形式で、出力を表示します。ヘッダーがすべて省略され、フィールドが任意の数のスペースではなく、タブ 1 つで明示的に区切られます。
1 つのデータセットと、その鍵を継承するすべてのデータセットのための暗号化鍵を読み込みます。このコマンドで指定される鍵は、データセットの暗号化に使用される実際の鍵ではありません。データセットのデータ暗号化鍵のセットのためのラップ鍵です。
暗号化されたデータセットとその鍵を継承するデータセットをロック解除するラップ鍵を読み込みます。このコマンドは、データセットの keysource プロパティーで定義された内容に基づいて鍵を読み込みます。
プールのインポート中、鍵の読み込み操作は、データセットのマウント時に実行されます。ブート中、ラップ鍵が使用可能で、keysource が prompt に設定されていない場合に、鍵読み込み操作は実行されます。
システム上のすべてのプール内のすべてのデータセットに適用します。
指定されたファイルシステムまたはボリュームの下にあるすべてのデータセットに再帰的に操作を適用します。
1 つのデータセットとその鍵を継承するすべてのデータセットのための暗号化鍵を読み込み解除します。
データセットをアンマウントしてから、1 つの暗号化されたデータセットとその鍵を継承するデータセットのためのラップ鍵の読み込み解除を試みます。成功した場合、データセットは、アクセスができなくなり、マウントが解除されます。
鍵の読み込み解除を試みる前に、データセットを強制的にアンマウントしようとします。指定しない場合、通常のアンマウントが試みられます。
システム上のすべてのプール内のすべてのデータセットに適用します。
指定されたファイルシステムまたはボリュームの下にあるすべてのデータセットに再帰的に操作を適用します。
ラップ鍵を変更します。新しい鍵の形式またはロケータが異なる場合、keysource プロパティーをコマンドの一部に含める必要があります。zfs key –c コマンドの一部として変更できるのは keysource プロパティーだけです。
1 つの暗号化されたデータセットの鍵とそれを継承するデータセットのためのラップ鍵を変更します。鍵の変更操作を行う前に、既存の鍵がすでに読み込まれている必要があります。ZFS は、既存のパスフレーズの入力を要求しません。
鍵変更操作の一部として変更するプロパティー。keysource プロパティーは、鍵変更操作の一部として変更できる唯一のオプションです。
keysource プロパティーを変更する権限が必要になります。
システム上のすべてのプール内のすべてのデータセットに適用します。
指定されたファイルシステムまたはボリュームの下にあるすべてのデータセットに再帰的に操作を適用します。
新しいデータ暗号化鍵を作成します。新しいデータ暗号化鍵は、このデータセットのすべての既存データ暗号化鍵と同じラップ鍵でラップされます。
このデータセットの新しいデータ暗号化鍵を作成します。この操作後に書き込まれたデータは、新しいデータ暗号化鍵を使用します。
システム上のすべてのプール内のすべてのデータセットに適用します。
指定されたファイルシステムまたはボリュームの下にあるすべてのデータセットに再帰的に操作を適用します。
ZFS ファイルシステムをマウントします。これは、ブートプロセスの一部として自動的に呼び出されます。zfs mount の構文についての完全な説明は、zfs(1M) を参照してください。
指定されたファイルシステムをマウントします。
暗号化されたデータセットの zfs mount 操作では、keysource プロパティー値によっては鍵の入力が求められる場合があります。これは、たとえば keysource ロケータが prompt に設定されている場合に起こることがあります。
現在マウントされている ZFS ファイルシステムをアンマウントします。これは、シャットダウンプロセスの一部として自動的に呼び出されます。zfs unmount の構文についての完全な説明は、zfs(1M) を参照してください。
指定されたファイルシステムをアンマウントします。このコマンドには、システム上の ZFS ファイルシステムのマウントポイントのパスを指定することもできます。
暗号化されたデータセットの場合、ファイルシステムがアンマウントされているときには、鍵の読み込みは解除されません。鍵を読み込み解除するには、zfs key を参照してください。
次の例は、keysource プロパティーのデフォルト値である passphrase プロンプトを使用して、暗号化されたデータセットを作成する方法を示しています。この例では、tank/home データセットは暗号化されていないものとします。
# zfs create -o encryption=on tank/home/bob Enter passphrase for 'tank/home/bob/': ********** Enter again: **********
次の例では、pktool(1) コマンドを使用して生の鍵をファイルに生成しています。次に、aes-256-ccm アルゴリズムと、pktool で生成された生の鍵のファイルを使用して、暗号化されたデータセット (tank/home/anne) を作成しています。
# pktool genkey keystore=file outkey=/media/stick/mykey \ keytype=aes keylen=256 # zfs create -o encryption=aes-256-ccm \ -o keysource=raw,file:///rmdisk/stick/mykey tank/home/anne
次の例は、https の場所に格納されているパスフレーズを取得する、暗号化された ZFS ファイルシステムを作成する方法を示しています。
# zfs create -o encryption=on \ -o keysource=passphrase,https://keys.example.com/keys/42 tank/home/fs1
この例は、PKCS#11 トークン内で生の鍵を生成する方法を示しています。次に、pktool から生成された生の PKCS#11 鍵を使用して、暗号化されたデータセットを作成します。
# pktool genkey keystore=pkcs11 keytype=aes keylen=128 label=fs2 Enter PIN for Sun Software PKCS#11 softtoken: xxxxx # zfs create -o encryption=on -o keysource=raw,pkcs11:object=fs2 \ tank/home/fs2 Enter PKCS#11 token PIN for 'tank/home/fs2': xxxxx
この例は、KMS トークン内で生の鍵を生成する方法を示しています。次に、pktool から生成された生の KMS 鍵を使用して、暗号化されたデータセットを作成します。
# pktool genkey keystore=pkcs11 keytype=aes keylen=256 token=KMS \ label=fs3 Enter PIN for KMS: xxxxx # zfs create -o encryption=aes-256-ccm \ -o keysource="raw,pkcs11:token=KMS;object=fs3" tank/home/fs3 Enter 'KMS' PKCS#11 token PIN for 'tank/home/fs3': xxxxx使用例 2 別の暗号化アルゴリズムを使用して、暗号化されたデータセットを作成する
この例では、すべての tank/home データセットが keysource プロパティーを継承しますが、tank/home/bob データセットは別の暗号化アルゴリズムを使用して作成されます。
# zpool create tank .... # zfs create -o encryption=on tank/home # zfs get keystatus tank/home NAME PROPERTY VALUE SOURCE tank/home keystatus available - # zfs create -o encryption=aes-256-ccm tank/home/bob使用例 3 encryption プロパティーおよび keysource プロパティーを継承する
この例では、すべての tank/home データセットが、encryption プロパティーおよび keysource プロパティーを継承します。
# zpool create -O encryption=on -o keysource=raw,file:///... tank ... # zfs create tank/home使用例 4 暗号化されたデータセットのラップ鍵および鍵ソースを変更する
次の例は、データセットのラップ鍵を、そのデータセットの keysource プロパティーで定義された新しい鍵に変更する方法を示しています。
# zfs create -o encryption=aes-256-ccm -o keysource=raw,file:///etc/keyfile \ tank/home/rory # zfs get keysource tank/home/rory NAME PROPERTY VALUE SOURCE tank/home/rory keysource raw,file:///etc/keyfile local # zfs key -c -o keysource=passphrase,prompt tank/home/rory Enter passphrase for 'tank/home/rory/': ********** Enter again: ********** # zfs get keychangedate tank/home/rory NAME PROPERTY VALUE SOURCE tank/home/rory keychangedate Thu Jun 28 14:32 2012 local
次の例は、データセットのラップ鍵の http の場所を変更する方法を示しています。
# zfs get keysource tank/home/bob NAME PROPERTY VALUE SOURCE tank/home/bob keysource passphrase,prompt local # zfs set keysource=passphrase,https://internal.example.com/keys/bob/zfs \ tank/home/bob
keysource プロパティーを変更するには、委任された key アクセス権および keychange アクセス権が必要です。
使用例 5 データセットの暗号化鍵を変更する次の例は、ユーザーおよび管理者が表示も管理もできないデータセットの暗号化鍵を変更する方法を示しています。データセットの暗号化鍵は、keysource プロパティーで指定された鍵でラップ (暗号化) されています。
# zfs key -K tank/project42 # zfs get rekeydate,creation tank/project42
鍵変更操作を実行するには、委任された keychange アクセス権が必要です。
使用例 6 暗号化されたデータセットのラップ鍵をカスタマイズする次の例は、ラップ鍵のサイズは encryption プロパティーで指定された鍵のサイズと一致する必要がないことを示しています。
# zfs create -o encryption=aes-128-gcm -o keysource=raw,file:///k256 \ /tank/home/amy
前述の例では、暗号化鍵のサイズが 128、ラップ鍵のサイズが 256 です。
# zfs create -o encryption=aes-256-gcm -o keysource=raw,file:///k192 \ /tank/home/rose
前述の例では、暗号化鍵のサイズが 256、ラップ鍵のサイズが 192 です。
次の終了ステータスが返されます。
正常終了。
エラーが発生した。
無効なコマンド行オプションが指定された。
属性についての詳細は、マニュアルページの attributes(5) を参照してください。
|
chmod(1), chown(1), pktool(1), ssh(1), mount(1M), zfs(1M), zpool(1M), chmod(2), chown(2), stat(2), write(2), attributes(5)
その他の ZFS 機能の詳細は、zfs_allow(1M)、zfs_share(1M)、zfs(1M)、およびOracle Solaris 11.3 での ZFS ファイルシステムの管理を参照してください。