ディスク(デバイス)の暗号化は,紛失や盗難時にデータを流出防止のために重要な技術です.
本記事では,“Cryptsetup”を使用して,デバイスの暗号化を行う方法を示します
Cryptsetupの導入
・Ubuntu/Debian系
apt install cryptsetup
デバイスの暗号化方法
暗号化を行うデバイスは/dev/md0
です./dev/md0
は以前の記事で設定したRAID1のディスクです.
↓↓↓以前の記事はこちら↓↓↓
RAID済みのディスクを使用していますが,
通常のデバイスでも全く同様の手順で,暗号化可能です.
デバイスの暗号化方法として,「パスフレーズで暗号化する方法」と「鍵ファイルを用いて暗号化する方法」の2種類が代表的です.
本記事では,パスフレーズを用いる場合と鍵ファイルを用いる場合の2種類の方法を示します.
パスフレーズで暗号化
暗号化
パスフレーズで暗号化するために,下記コマンドを入力します.
大文字”YES”を入力した後,パスフレーズが要求されるため,任意の文字列を入力します.
cryptsetup luksFormat /dev/md0
WARNING!
========
This will overwrite data on /dev/md0 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/md0:
Verify passphrase:
上記コマンドでデバイスの暗号化が完了しました.
暗号化したデバイスにアクセス
次に,暗号化されたデバイスにアクセスする必要があります.
暗号化されたデバイスにアクセスするために下記コマンドで暗号化を解除してアクセス可能な状態にします.
cryptsetup open /dev/md0 cryptdata
Enter passphrase for /dev/md0:
ここで,cryptdataは暗号化されたデバイス名(ラベル)です.任意の名前を与えることができます.
暗号化が解錠されたことを確認するために,lsblk
コマンドでデバイスの状態を確認します.
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 14.6T 0 disk
└─sda1 8:1 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
└─cryptdata 253:3 0 14.6T 0 crypt
sdb 8:16 0 14.6T 0 disk
└─sdb1 8:17 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
└─cryptdata 253:3 0 14.6T 0 crypt
cryptsetup status <label>
コマンドでも暗号化デバイスを確認できます.
cryptsetup status cryptdata
/dev/mapper/cryptdata is active.
type: LUKS2
cipher: aes-xts-plain64
keysize: 512 bits
key location: keyring
device: /dev/md0
sector size: 512
offset: 32768 sectors
size: 31251458048 sectors
mode: read/write
暗号化されたデバイス名は,/dev/mapper/<label>
となります.
デバイスをフォーマット(デバイスを作成時のみ)
デバイスを使用可能な状態にするためにフォーマットします.
mkfs -t ext4 /dev/mapper/cryptdata
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 3906432256 4k blocks and 488304640 inodes
Filesystem UUID: *******-****-****-****-************
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
2560000000, 3855122432
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done
デバイスのフォーマットは,
暗号化デバイス作成時のみ行うことを注意してください
マウント
フォーマット済みのデバイスをマウントします.
mount /dev/mapper/cryptroot /mnt/raid1
df
Filesystem 1K-blocks Used Available Use% Mounted on
...
/dev/mapper/cryptroot 15501445668 28 14720142808 1% /mnt/raid1
再起動時に自動マウント
再起動を行うと,デバイスにアクセスするために再度パスフレーズを入力する必要があり不便です.再起動時も自動で解錠し,マウントすると便利になります.自動解錠にはパスフレーズではなく,鍵ファイルを使用します.
鍵ファイルを作成し,キーの追加
まず,ランダムな文字列から鍵ファイルを生成します.
dd bs=512 count=4 if=/dev/urandom of=/root/crypt.key
4+0 records in
4+0 records out
2048 bytes (2.0 kB, 2.0 KiB) copied, 0.000221897 s, 9.2 MB/s
暗号化デバイスのキーとして,鍵ファイルを追加します.
cryptsetup luksAddKey /dev/md0 /root/crypt.key
自動アンロック設定
まず,暗号化されたデバイスのUUIDを調べます.
blkid
...
/dev/md0: UUID="********-****-****-****-************" TYPE="crypto_LUKS"
...
/etc/crypttab
に暗号化解錠の設定を記述します.
/etc/crypttab
cryptdata UUID=********-****-****-****-************ /root/crypt.key
自動マウント
自動マウント設定を/etc/fstab
に記述します.
/etc/fstab
/dev/mapper/cryptdata /mnt/raid1 ext4 defaults 0 2
鍵ファイルを用いて暗号化
ここでは,パスフレーズの代わりに鍵ファイルを利用して暗号化する方法を示します.
鍵ファイルを使用した場合,/etc/crypttab
の設定ファイルを利用するとシステム起動時に自動的に暗号化を解錠できるため便利です.
パスフレーズよりも鍵ファイルの方がおすすめです
鍵ファイルの作成
下記コマンドで鍵ファイルを作成します.
dd bs=512 count=4 if=/dev/urandom of=/root/crypt.key
4+0 records in
4+0 records out
2048 bytes (2.0 kB, 2.0 KiB) copied, 0.000221897 s, 9.2 MB/s
鍵ファイルで暗号化
作成した鍵ファイルを用いてデバイスの暗号化を行います.
cryptsetup luksFormat /dev/md0 /root/crypt.key
WARNING: Device /dev/md0 already contains a 'ext4' superblock signature.
WARNING!
========
This will overwrite data on /dev/md0 irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
暗号化したデバイスにアクセス
下記コマンドのように,鍵ファイルを指定してデバイスを解錠します.
cryptsetup open /dev/md0 cryptdata --key-file /root/crypt.key
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 14.6T 0 disk
└─sda1 8:1 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
└─cryptdata 253:3 0 14.6T 0 crypt
sdb 8:16 0 14.6T 0 disk
└─sdb1 8:17 0 14.6T 0 part
└─md0 9:0 0 14.6T 0 raid1
└─cryptdata 253:3 0 14.6T 0 crypt
デバイスをフォーマット(デバイスを作成時のみ)
mkfs -t ext4 /dev/mapper/cryptdata
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 3906432256 4k blocks and 488304640 inodes
Filesystem UUID: ********-****-****-****-************
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
2560000000, 3855122432
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done
デバイスのフォーマットは,
暗号化デバイス作成時のみ行うことを注意してください
マウント
mount -t ext4 /dev/mapper/cryptdata /mnt/raid1/
起動時に自動でマウント
再起動時にデバイスに再度ロックがかかるため,解錠およびマウントを起動時に自動で実施する設定を行います.
自動アンロック
/etc/crypttab
に暗号化解錠の設定を記述します.
/etc/crypttab
cryptdata UUID=********-****-****-****-************ /root/crypt.key
自動マウント
自動マウント設定を/etc/fstab
に記述します.
/etc/fstab
/dev/mapper/cryptdata /mnt/raid1 ext4 defaults 0 2