4 暗号化ブロック・デバイスの作成

警告:

Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。

できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。

この章では、暗号化ブロック・デバイスを使用して格納データを保護する方法について説明します。

暗号化ブロック・デバイスについて

デバイス・マッパーは、dm-cryptデバイス・ドライバを使用して暗号化ブロック・デバイスの作成をサポートします。正しいパスワードを入力した場合にのみ、ブート時に暗号化デバイスのデータにアクセスできます。基礎となるブロック・デバイスは暗号化され、ファイル・システムではないため、dm-cryptを使用して、ディスク・パーティション、RAIDボリュームおよびLVM物理ボリュームを内容に関係なく暗号化できます。

Oracle Linuxをインストールする場合は、システムのブート元パーティション以外のシステム・ボリュームに対して暗号化を構成するオプションがあります。ブート可能なパーティションを保護する場合は、BIOSに組み込まれているパスワード保護メカニズムの使用またはGRUBパスワードの設定を検討してください。

LUKS暗号化の設定

cryptsetupユーティリティを使用して、デバイスにLinux Unified Key Setup (LUKS)暗号化を設定し、認証を管理します。

暗号化ボリュームのマップされたデバイスを設定するには:

  1. デバイスのLUKSパーティションを初期化し、初期キーを設定します。たとえば:

    sudo cryptsetup luksFormat /dev/sdd
    WARNING!
    ========
    This will overwrite data on /dev/sdd irrevocably.
    Are you sure? (Type uppercase yes): YES
    Enter LUKS passphrase: passphrase
    Verify passphrase: passphrase
  2. デバイスをオープンし、デバイス・マッピングを作成します。

    sudo cryptsetup luksOpen /dev/sdd cryptfs
    Enter passphrase for /dev/sdd: passphrase

    この例では、暗号化ボリュームは/dev/mapper/cryptfsでアクセスできます。

  3. /etc/crypttabの暗号化ボリュームにエントリを作成します。たとえば:

    # <target name>  <source device>  <key file>  <options>
    cryptfs          /dev/sdd         none        luks

    このエントリにより、ブート時にオペレーティング・システムからパスフレーズの入力を求めるプロンプトが表示されるようになります。

作成した暗号化ボリュームとそのデバイス・マッピングは、物理ストレージ・デバイスと同じ方法で構成および使用できます。たとえば、LVM物理ボリューム、ファイル・システム、スワップ・パーティション、自動ストレージ管理(ASM)ディスクまたはRAWデバイスとして構成できます。たとえば、物理デバイス(/dev/sdd)ではなく、マップされたデバイス(/dev/mapper/cryptfs)をマウントするには、/etc/fstabにエントリを作成します。

暗号化ボリュームのステータスを検証するには、次のコマンドを使用します。

sudo cryptsetup status cryptfs
/dev/mapper/cryptfs is active.
type: LUKS1
cipher:  aes-cbs-essiv:sha256
keysize: 256 bits
device:  /dev/xvdd1
offset:  4096 sectors
size:    6309386 sectors
mode:    read/write

デバイス・マッピングを削除する必要がある場合は、暗号化ボリュームに格納されたファイル・システムをアンマウントし、次のコマンドを実行します。

sudo cryptsetup luksClose /dev/mapper/cryptfs

詳細は、cryptsetup(8)およびcrypttab(5)の各マニュアル・ページを参照してください。

Btrfs、ext4およびSwapでのSSD構成の推奨事項

SSDをパーティション化するときは、プライマリ・パーティションと論理パーティションを1MB (1048576バイト)境界に配置してください。パーティション、ファイル・システム・ブロックまたはRAIDストライプが不適切に配置され、基礎となるストレージのページ(通常は4KBまたは8KB)の境界と重なる場合、デバイス・コントローラは、適切な配置が使用されている場合の2倍のページ数を変更する必要があります。

btrfsおよびext4ファイル・システムの場合、discardオプションをmountと組み合せて指定すると、ブロックが解放されるたびに、破棄(TRIM)コマンドが基礎となるSSDに送信されます。このオプションを使用すると、デバイスの動作寿命を延長できますが、キュー待機破棄をサポートしているSSDであっても、パフォーマンスにマイナスの影響があります。このかわりに、特に、オペレーティング・システムを再インストールする前や、新規のファイル・システムをSSDに作成する前に、fstrimコマンドを使用して、ファイル・システムで使用されていない空のブロックを破棄する方法をお薦めします。fstrimは、システム・パフォーマンスに与える影響が最小のときに実行するようスケジュールしてください。また、fstrimをファイル・システム全体ではなく特定の範囲のブロックに適用することもできます。

ノート:

SSDでのext4の最小ジャーナル・サイズである1024ファイル・システム・ブロックを使用すると、パフォーマンスが向上します。ただし、ジャーナル化を完全に無効にすることは、ファイル・システムの堅牢性を向上させるため、お薦めしません。

/sys/block/device/queue/rotationalの値が0の場合、btrfsによってデバイスのSSD最適化が自動的に有効になります。デバイスがSSDであることがbtrfsによって検出されない場合、ssdオプションをmountに指定することにより、SSD最適化を有効化できます。

ノート:

Xen Virtual Device (XVD)のrotationalの値が0であるため、btrfsでは、これらのデバイスのSSD最適化がデフォルトで有効になります。SSD最適化を無効にするには、nossdオプションをmountに指定します。

ssdオプションを設定するとdiscardも設定されるというわけではありません。

SSDでスワップ・ファイルまたはパーティションを構成した場合は、カーネルによりスワップへの予測書込みが実行される傾向(vm.swappinessカーネル・パラメータの値によって制御され、/proc/sys/vm/swappinessとして表示される)を抑えてください。vm.swappinessの値は0から100までの範囲であり、値が大きいほど、スワップに書き込まれる傾向が強くなります。デフォルト値は60です。SSDでスワップが構成されたときの推奨値は、1です。この値は、次のコマンドを使用して変更できます。
sudo echo "vm.swappiness = 1" >> /etc/sysctl.conf
sudo sysctl -p
...
vm.swappiness = 1