ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

LUKSを使用して増設ディスクを暗号化してみた!

こんにちは、ニフクラ技術支援チームです。

クラウドサービスの利用において、セキュリティの確保はとても重要なテーマです。
ニフクラのサービス基盤は、自社での設計・運用の実施により、高度なセキュリティパフォーマンスを維持していますが、こちらで紹介しているように、OS層・アプリケーション層のセキュリティ確保については、お客様の責任範囲となります。

今回はセキュリティ確保の一手段として、Linux環境でのLUKS (Linux Unified Key Setup-on-disk-format) を利用した増設ディスク暗号化手順をご紹介します。

LUKSについてはこちらをご参照ください。
第18章 LUKS を使用したブロックデバイスの暗号化(外部サイトへのリンクです)

前提条件

本記事は、以下の前提知識がある方を想定しています。

  • ニフクラの基本的なコントロールパネルの操作、サービスを利用する知識 (サーバー作成、ネットワーク構築など)

  • Linuxの基本的な操作、設定に関する知識

検証概要

以下の流れで作業を実施します。
※本検証は空の増設ディスクに対する手順となります。

(1) 増設ディスク領域の暗号化を実施
暗号化キーファイルを作成し、増設ディスク領域の暗号化

(2) 増設ディスクの自動マウント設定
OS起動時に増設ディスクを自動マウントして復号化

③ (3) 動作確認
OSを再起動し、自動マウント・復号・ファイルアクセスを確認

利用リソース

検証に利用したリソースは以下の通りです。

リソース 数量 備考
サーバー 1
増設ディスク 1 100GB
ファイアウォール 1
Red Hat Enterprise Linux 8.3 1

検証準備

リソース作成

リソースの作成については、設定項目・設定値は省略させていただきます。
作成方法は以下を参照してください。

(1) SSHキーの作成

クラウドヘルプ(SSHキー)

(2) ファイアウォールグループの作成

クラウドヘルプ(ファイアウォールグループの新規作成)
クラウドヘルプ(ファイアウォール:ルールの追加)

(3) サーバーの作成

クラウドヘルプ(サーバーの作成)

(4) ディスクの作成

クラウドヘルプ(ディスクの作成)
クラウドユーザーガイド(追加したディスクの設定方法(マウント手順):Linux系OSの場合))

暗号化の設定

(1) 増設ディスク領域の暗号化を実施

1.LUKSを使用するためにはcryptsetupパッケージが必要なため、yumコマンドでインストールを実施

# yum install cryptsetup cryptsetup-libs

2.デバイス一覧を表示し、暗号化を実施するデバイス名を確認

# parted -l
 Model: VMware Virtual disk (scsi)
 Disk /dev/sdb: 107GB
 Sector size (logical/physical): 512B/512B
 Partition Table: msdos
 Disk Flags: 

 Number  Start   End    Size   Type     File system  Flags
 1      1049kB  107GB  107GB  primary

3.ランダムデータでキーファイルを作成

# dd if=/dev/random bs=32 count=1 of=/root/random_data_keyfile1
 1+0 records in
 1+0 records out
 32 bytes copied, 8.9564e-05 s, 357 kB/s

※実装時にはキーファイルの配置場所をセキュリティポリシーおよび運用ポリシーと照らし合わせて検討する必要があります。

4.キーファイルの権限変更(所有者のみread許可)

# chmod 400 /root/random_data_keyfile1

5.パーティションを暗号化
パーティション上書きの警告が出るので、YESを入力します。
これでパーティションがLUKSパーティションとなり、暗号化されます。
※以下のことに注意し実施
・この手順は空のディスクに対して実施する手順です。
・この操作で消えてしまったデータは復旧できません。

# cryptsetup luksFormat /dev/sdb1 /root/random_data_keyfile1
WARNING!
========
This will overwrite data on /dev/sdb1 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES

6.暗号化したLUKS パーティションのロック解除
ロック解除と同時にLUKSパーティションが/dev/mapper配下にデバイスマッパー名にてマッピングされます。

# cryptsetup open --type luks /dev/sdb1 sdb1_encrypted --key-file /root/random_data_keyfile1

コマンド構成
# cryptsetup open --type 【暗号化モード】 【デバイスファイル名】 【デバイスマッパー名】 --key-file 【キーファイル名】

7./dev/mapper配下にマッピングされていることを確認

# ls /dev/mapper
control sdb1_encrypted ←ファイルができていたら暗号化領域を使用可能

8.マッピングされたデバイスに対して、xfsでファイルシステムを作成

# mkfs.xfs /dev/mapper/sdb1_encrypted

9.マウントポイント作成

# mkdir /mnt/disk1

10.マッピングされたデバイスをマウント

# mount /dev/mapper/sdb1_encrypted /mnt/disk1

ここまでの設定で、増設ディスクの暗号化設定は完了です。
注意点として、この状態だとOS起動の度に再度「cryptsetup Open~」を実行し、手動でロック解除とマウントを行う必要があります。
そのため、起動時に自動的にマウントする必要がある場合は、以降の手順を実施し、OS再起動後の自動ロック解除・マウントを行うように設定します。

(2) 増設ディスクの自動マウント設定

1./etc/crypttabにパーティションのロック解除の設定を追加

# echo "sdb1_encrypted /dev/sdb1 /root/random_data_keyfile1" >> /etc/crypttab

コマンド構成
# echo "【デバイスマッパー名】 【デバイスファイル名】 【キー名】" >> /etc/crypttab

2./etc/fstabにマウント設定を追加

# echo "/dev/mapper/sdb1_encrypted /mnt/disk1 xfs defaults 0 0" >> /etc/fstab

動作確認

(1) OS再起動確認

OS再起動後に、デバイスが自動でロック解除されることと、自動でマウントされることを確認します。

1.OS再起動

# reboot

2./dev/mapper配下にマッピングされていることを確認

# ls /dev/mapper
control sdb1_encrypted ←ファイルができていたら暗号化領域を使用可能

3.デバイスのマウント状況を確認
デバイスが/mnt/disk1配下にマウントされていることを確認

# df -hT
Filesystem                 Type      Size  Used Avail Use% Mounted on
devtmpfs                   devtmpfs  1.8G     0  1.8G   0% /dev
tmpfs                      tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs                      tmpfs     1.9G  8.9M  1.9G   1% /run
tmpfs                      tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda3                  xfs        28G  2.1G   26G   8% /
/dev/sda1                  xfs       507M  236M  271M  47% /boot
tmpfs                      tmpfs     371M     0  371M   0% /run/user/0
/dev/mapper/sdb1_encrypted xfs       100G  746M  100G   1% /mnt/disk1

(2) アクセス確認

暗号化対象の増設ディスクにアクセスし書き込みができることを確認します。

1.test.txt というファイルを作成

# echo "This is a test" > /mnt/disk1/test.txt

2.作成したファイルを表示

# ls /mnt/disk1
test.txt ←ファイルが作成されたことを確認

# cat /mnt/disk1/test.txt
This is a test ←ファイルが表示されたことを確認

OS再起動後のパーティションの自動ロック解除および、自動マウントされることが確認できました。
また、書き込みができることも確認できました。
以上で、本検証は終了となります。

まとめ

本記事では、増設ディスクの暗号化を「LUKS」を使用して実施しました。OS標準の機能を使って、比較的簡単にディスクの暗号化が出来ることがご理解いただけたかと思います。

増設ディスクを暗号化しておくと、キーファイルのないサーバーではデータへのアクセスができなくなるので、誤って別のサーバにアタッチし、他のサーバからデータの中身が見えてしまう…といった事故を防ぐことができます。

本記事を、セキュリティ確保にお役立てていただけると幸いです。

なお、Windows環境でも同様の検証を実施しています。別ブログ記事『BitLockerを使用して増設ディスクを暗号化してみた!』もあわせてごらんください。

注意事項

本記事については検証結果の1つとなります。実際に検討される場合は、事前にそれぞれの要件を鑑みて実装するか確認してください。
本記事ではOS上の操作についても記載していますが、ニフクラではOS以上はご利用者様の責任範囲となりますのでご留意ください。
本記事に記載されている会社名、製品名等の固有名詞は各社の商号、登録商標または商標です。
本記事の他社サイトへのリンクにつきまして、リンク切れの際はご容赦ください。