侵入者が機密情報を盗むことができないように、ストレージデバイス(ハードディスク、ポータブルメモリスティック)上の重要なデータのセキュリティが必要です。このチュートリアルでは、Linuxルートファイルシステムとスワップ領域のセキュリティに焦点を当てています。デフォルトのLinux暗号化機能「LUKS」が使用されます。これには起動時にパスフレーズが必要です。したがって、次の目標は、起動時に暗号化されたボリュームにパスフレーズを自動的に提供することです。利用可能なDebianディストリビューションの古いリリースについては、同じトピックに関する記事がすでにいくつかあります。ただし、このチュートリアルでは、Debain 8(Jessie)バージョンがVirtualBoxVMにインストールされています。
DebianOSのインストール
このチュートリアルでは、Debian JessieがVMにインストールされ、詳細が次の図に示されています。同じ手順が「実際の」サーバーまたはデスクトップでも機能します。
VMにDebianネットインストーラーisoファイルを追加してvmを起動すると、インストーラープロンプトが表示されます。 [インストール]オプションを選択して、インストールプロセスを開始します。
次のいくつかの画面では、Debianの基本設定の入力を求められます。表示されたリストから目的の言語オプションを選択します。
次の図に示すように、国または地域を選択します。
キーボードの言語を構成します。
基本設定の後、インストーラーは構成用にさらにコンポーネントをロードします。
繰り返しになりますが、インストールプロセス中にさらに多くの基本設定が構成されます。
1.ホスト名の設定
2.ドメイン名の構成
3.「root」ユーザーのパスワードを設定します。
4.root以外の新しいユーザーを作成します。
5.タイムゾーンを設定します
6.そして最後に、最も重要な部分はディスクのパーティション分割です。
この記事では、ハードディスクを手動でパーティション分割する必要があります。したがって、上記のプロンプトで[手動]オプションを選択し、目的のハードディスクを選択してプロセスを開始します。
上図に示すように、DebianはVMにインストールされます。 Enterキーを押して、以下に示す選択したハードディスクのパーティション分割を開始します。
上記のメッセージを受け入れると、次の画面が表示されます。次のスクリーンショットに示すように、現在、ハードディスクにはパーティションがありません。
「Enter」を押して、仮想ハードディスクに最初のパーティションを作成します。
ハードディスク上に作成した最初のパーティションは、「/boot」マウントポイント用の「/dev/sda1」です。
パーティションにはプライマリタイプまたは論理タイプが選択されています。
新しいパーティションの場所が選択されます。
マウントポイント「/boot」は次のスクリーンショットに示されています。
最初のパーティションはハードディスク上に正常に作成されました。 Linuxカーネルは後で「/boot」パーティションに配置されます。
VMハードディスクに作成される2番目のパーティションはスワップであり、スワップパーティションのサイズはRAMサイズの2倍である必要があります。次のスクリーンショットに示すように、残りの空き領域がスワップ用に選択されています。
スワップパーティションのサイズを設定します。
次のスクリーンショットは、パーティションがスワップ領域として選択されていることを示しています。
別のパーティションもVMに作成されます。
Linuxプラットフォームのコアパーティションは、/(「ルート」マウントポイント)の残りのスペースに作成されます。次のスナップショットは、「ルート」パーティションのサイズを示しています。
ハードディスク上の新しいパーティションの[暗号化の物理ボリューム]オプションを選択します。
Linuxプラットフォームでパーティションを暗号化するには、次のスクリーンショットで強調表示されているオプションが必要です。
「暗号化用物理ボリューム」を選択した後のパーティション設定を次の図に示します。デフォルトの暗号化方式はdevice-mapper(dm-crypt)で、暗号化アルゴリズムは256キーサイズのAESです。
次の図に、仮想ハードディスク上にパーティションが正常に作成されたことを示します。
次のスクリーンショットで選択されているDebianでの暗号化されたボリュームの高度な構成を次に示します。
次のプロンプトは、暗号化されたボリュームの構成を開始する前に、現在のパーティションスキームをハードディスクに書き込む必要があることを示しています。
次のプロンプトは、Debianプラットフォームでの暗号化ボリュームの作成を示しています。
暗号化されたボリュームのデバイスを選択します。ブートパーティションの暗号化が許可されていないため、暗号化されたボリュームにブートデバイス「/ dev/sda1」を選択しないでください。
次のスクリーンショットに示すように、暗号化されたボリュームには「/ dev / sda3」のみが選択されており、これがディスクのルートパーティションです。
暗号化されたボリュームの構成後、[完了]を選択して変更を適用します。
ただし、暗号化されたボリュームにスワップパーティションが選択されていない場合は、次のエラーが表示されます。
したがって、暗号化されたボリュームには両方のパーティションを選択します。
スワップ暗号化ボリュームのパーティション設定を以下に示します。
次のプロンプトは、「sda2」(スワップ)でデータが消去されることを示しています。
「sda2」と「sda3」の消去データを以下に示します。
プロセスが終了したら、暗号化された両方のパーティションのパスフレーズを入力します。
同じパスフレーズを再入力します。
ディスク上の暗号化されたボリュームが正常に構成された後のパーティションテーブルを以下に示します。
パーティショニングプロセスを終了して、DebianOSのインストールを開始します。ただし、どのパーティションでもマウントポイント「/」がまだ選択されていないため、次のエラープロンプトが表示されます。
上記のエラープロンプトが表示されたら、暗号化されたボリュームを再構成してマウントポイントを設定します。この記事では、「sda3_crypt」はルートファイルシステムであり、「sda2_crypt」はスワップ領域です。
暗号化されたボリュームのマウントポイント「/」を選択します。
スワップ領域として「sda2_crypt」暗号化ボリュームを選択します。
次のスクリーンショットは、暗号化されたボリュームの最終的なパーティションテーブルを示しています。
パーティションのフォーマットを以下に示します。
フォーマットプロセスが完了すると、ベースシステムがインストールされます。
次のスクリーンショットは、Debianパッケージのアーカイブミラーの選択を示しています。
パッケージマネージャーの構成を以下に示します。
まだベースシステムまたはコアシステムのみがインストールされており、表示されたリストから他のパッケージをインストールできます。
リストからデスクトップ環境とその他のパッケージを選択します。
選択したパッケージのインストールを以下に示します。
Linuxブートローダー「GRUB」のインストールを次のスクリーンショットに示します。
デバイス(sda)がブートローダーのインストール用に選択されています。
最後に、インストールプロセスが完了しました。
再起動後、パスフレーズを入力してsda3ディスクを復号化します。
パスフレーズを入力して、スワップ領域であるsda2ディスクを復号化します。
インストールされたシステムに正常にログインします。
起動時にパスフレーズを入力するプロセスは、USBメモリスティックを使用して自動化されます。使用する代わりに
パスフレーズ、USBの秘密鍵は、暗号化されたボリュームを復号化します。 USBスティックをVMに接続し、「dmesg」コマンドを使用して見つけます。 VMで「/dev/sdb」として検出されます。
8192ランダムバイトの秘密鍵は、ddコマンドを使用してUSBスティックから抽出されます。
dd if=/dev/sdb of=/root/secret.key bs=512 skip=4 count=16
上記で生成された秘密鍵は、「cryptsetup」コマンドを使用して暗号化されたボリュームに追加されます。デフォルトでは、パスフレーズはスロット0に保持されます。したがって、スロット1が2番目の秘密鍵に使用されます。
「blkid」コマンドを実行して、ディスク上のボリュームの詳細を取得します。
blkid
このチュートリアルでは、ボリュームを復号化するための秘密鍵は/ dev/sda3にのみ追加されます。ただし、「/ dev / sda2」(スワップ)パーティションに追加することもできます。
cryptsetup luksAddKey /dev/sda3 /root/secret.key --key-slot 1
USBデバイス用の単純なudevルールがファイル/etc/udev/rules.d/99-custom-usb.rulesに作成されます。使用するシンボリックリンクは/dev/usbdeviceです。
SUBSYSTEMS=="usb", DRIVERS=="usb",SYMLINK+="usbdevice%n"
次のコマンドを使用してルールを再読み込みします。
udevadm control --reload-rules
USBデバイスを挿入して、カスタムルールを確認します。
USBデバイスから秘密鍵を読み取り、起動時にcryptsetupに提供するには、シェルスクリプトが必要です。スクリプトは「/usr/local/sbin/openluksdevices.sh」として作成され、http://www.oxygenimpaired.com/サイトから取得されます。
#!/bin/sh
############taken from following link#########
###http://www.oxygenimpaired.com/debian-lenny-luks-encrypted-root-hidden-usb-keyfile
TRUE=0
FALSE=1
# flag tracking key-file availability
OPENED=$FALSE
if [ -b /dev/usbdevice ]; then
# if device exists then output the keyfile from the usb key
dd if=/dev/usbdevice bs=512 skip=4 count=16 | cat
OPENED=$TRUE
fi
if [ $OPENED -ne $TRUE ]; then
echo "FAILED to get USB key file ..." >&2
/lib/cryptsetup/askpass "Try LUKS password: "
else
echo "Success loading key file for Root . Moving on." >&2
fi
sleep 2
スクリプトを実行できるように、スクリプトの権限を設定します。
chmod a+x /usr/local/sbin/openluksdevices.sh
fstab構成ファイルと同様に、crypttabファイルにはLinuxプラットフォーム上の暗号化されたボリュームに関する情報が含まれています。 sda3_crypt暗号化パーティションのシェルスクリプトを追加します。暗号化ボリュームの設定ファイル「/etc/crypttab」の内容を以下に示します。
sda3_crypt /dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc none luks,keyscript=/usr/local/sbin/openluksdevices.sh
「/etc/initramfs-tools/conf.d/cryptroot」ファイルに次の行を追加します。
CRYPTROOT=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc
「usb_storage」が「/etc/ initramfs-tools/modules」ファイルに追加されていることを確認してください。
次のシェルスクリプト(/etc/initramfs-tools/hooks/udevusbkey.sh)も外部ソースから取得されています。一時ファイルシステム「initrd」にカスタムudevルールを追加するために使用されます。
#!/bin/sh
# udev-usbkey script
###taken from
###http://www.oxygenimpaired.com/ubuntu-with-grub2-luks-encrypted-lvm-root-hidden-usb-keyfile
PREREQ="udev"
prereqs()
{
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
. /usr/share/initramfs-tools/hook-functions
# Copy across relevant rules
cp /etc/udev/rules.d/99-custom-usb.rules ${DESTDIR}/lib/udev/rules.d/
exit 0
スクリプトの権限を変更します。
chmod a+x /etc/initramfs-tools/hooks/udevusbkey.sh
GRUB2ブートローダーの構成にはいくつかの変更が必要です。ただし、構成ファイル「/boot/grub/grub.cfg」を直接変更することはできません。したがって、「/ etc / default/grub」構成ファイルの「GRUB_CMDLINE_LINUX_DEFAULT」パラメーターを変更します。以下に示すように、「rootdelay」と「cryptopts」は「GRUB_CMDLINE_LINUX_DEFAULT」パラメータに含まれています。
GRUB_CMDLINE_LINUX_DEFAULT="rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtainsConclusion
「update-grub」コマンドを実行して、「/ boot / grub/grub.cfg」構成ファイルの上記の変更を適用します。
上記のコマンドの後、次の変更が「/boot/grub/grub.cfg」構成ファイルに適用されました。
echo 'Loading Linux 3.16.0-4-686-pae ...'
linux /vmlinuz-3.16.0-4-686-pae root=UUID=b30cdb22-8e3c-4ffd-a0c7-af96b90ba016 ro rootdelay=20 cryptopts=target=sda3_crypt,source=/dev/disk/by-uuid/c37a8128-5ea9-45c6-8890-d52f3d452ccc,keyscript=/lib/cryptsetup/scripts/openluksdevices.sh
echo 'Loading initial ramdisk ...'
initrd /initrd.img-3.16.0-4-686-pae
「update-initramfs-u」を実行して、すべてのカーネルの一時ファイルシステムファイルを更新します。
再起動する前に、newleyで生成された「initrd.img」を解凍し、キースクリプトが「lib / cryptsetup / scripts」ディレクトリにコピーされ、カスタムudevルールが「lib / udev /rules.d/」ディレクトリにコピーされていることを確認します。
cd /tmp/
zcat /boot/initrd.img-3.16.0-4-686-pae | cpio -iv
Keyscriptはinitramfsスクリプトに正常に含まれています。
カスタムUSBルールもudevルールに含まれています。
セットアップ全体をテストする前に、VM設定にUSBデバイスを追加してください。
最後に、暗号化されたボリュームの秘密鍵が正常に読み込まれます。
この記事では、暗号化されたパーティションは、USBメモリデバイスに保持されている秘密鍵を使用して開かれます。自動シェルスクリプトは、起動時に暗号化されたボリュームの秘密鍵を提供するために使用されます。