はじめに
Linuxで暗号化を行いたい。 LUKS
か eCryptfs
が使われる。
今回は、LUKS
を用いて、ディスクの暗号化と復号化の手順をメモ。
環境
- macOS上のPrallelsのUbuntu22.04
$ uname -a
Linux ubuntu03 5.15.0-94-generic #104-Ubuntu SMP Tue Jan 9 15:26:57 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
- ディスク構成は、HDD2台で、1台はOS、もう1台が今回暗号化するディスク(
/dev/sdb
)
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
- マウント先は、
/mnt/crypt
とする
手順
マウント先の作成
$ sudo mkdir -p /mnt/crypt
暗号化
ディスクを丸ごと暗号化
-
YES
を大文字で入力する - 暗号化のパスフレーズを入力する
$ sudo cryptsetup luksFormat /dev/sdb
WARNING!
========
This will overwrite data on /dev/sdb irrevocably.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sdb:
Verify passphrase:
- 暗号化してもブロックデバイスとしてはぱっと見の変化なし
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
ディスクを復号化してマッピング
- 暗号化でつかったパスフレーズを入力する
- マッピング名を指定する、今回は
cryptdisk
がマッピング名 -
/dev/mapper/cryptdisk
にマッピングされる
$ sudo cryptsetup open /dev/sdb cryptdisk
Enter passphrase for /dev/sdb:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt
$ ll /dev/mapper
total 0
:
:
lrwxrwxrwx 1 root root 7 Feb 11 01:38 cryptdisk -> ../dm-1
lrwxrwxrwx 1 root root 7 Feb 11 01:22 vg0-lv0 -> ../dm-0
パーティションの作成
$ sudo mkfs.ext4 /dev/mapper/cryptdisk
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 520192 4k blocks and 130048 inodes
Filesystem UUID: e5731e7a-14f3-4e23-a31d-bb264b1d37ed
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
マウント
$ sudo mount /dev/mapper/cryptdisk /mnt/crypt
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt /mnt/crypt
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/mapper/vg0-lv0 60G 5.7G 51G 11% /
/dev/sda2 2.0G 250M 1.6G 14% /boot
/dev/sda1 1.1G 6.4M 1.1G 1% /boot/efi
/dev/mapper/cryptdisk 2.0G 24K 1.9G 1% /mnt/crypt
テストファイルの書き込み
- 1GBのテストファイルを書き込む
$ cd /mnt/crypt/
$ sudo dd if=/dev/random of=./test.dat bs=1M count=1024 status=progress
964689920 bytes (965 MB, 920 MiB) copied, 2 s, 482 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.24187 s, 479 MB/s
dev@ubuntu03:/mnt/crypt$ ls -alht
total 1.1G
-rw-r--r-- 1 root root 1.0G Feb 11 02:14 test.dat
drwxr-xr-x 3 root root 4.0K Feb 11 02:14 .
drwx------ 2 root root 16K Feb 11 01:55 lost+found
drwxr-xr-x 3 root root 4.0K Feb 11 01:54 ..
テストファイルのハッシュの採取
$ md5sum test.dat
ca12c1a7e0b7c805e01f13d93ffea3ea test.dat
マッピングの解除
- マウント解除し、その後、マッピング解除する
- マウントしていると close できないので注意
$ sudo cryptsetup close cryptdisk
Device cryptdisk is still in use.
- マウント解除前の状況
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/mapper/vg0-lv0 60G 5.7G 51G 11% /
/dev/sda2 2.0G 250M 1.6G 14% /boot
/dev/sda1 1.1G 6.4M 1.1G 1% /boot/efi
/dev/mapper/cryptdisk 2.0G 1.1G 821M 56% /mnt/crypt
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt /mnt/crypt
- マウント解除
$ sudo umount /dev/mapper/cryptdisk
- マウント解除後の状況
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/mapper/vg0-lv0 60G 5.7G 51G 11% /
/dev/sda2 2.0G 250M 1.6G 14% /boot
/dev/sda1 1.1G 6.4M 1.1G 1% /boot/efi
- マッピングの解除
$ sudo cryptsetup close cryptdisk
- マッピング解除後の状況
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
復号化
ディスクを丸ごと復号化
$ sudo cryptsetup open /dev/sdb cryptdisk
Enter passphrase for /dev/sdb:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt
マウント
$ sudo mount /dev/mapper/cryptdisk /mnt/crypt
$ df -h
Filesystem Size Used Avail Use% Mounted on
:
:
/dev/mapper/vg0-lv0 60G 5.7G 51G 11% /
/dev/sda2 2.0G 250M 1.6G 14% /boot
/dev/sda1 1.1G 6.4M 1.1G 1% /boot/efi
/dev/mapper/cryptdisk 2.0G 1.1G 821M 56% /mnt/crypt
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
:
:
sda 8:0 0 64G 0 disk
├─sda1 8:1 0 1G 0 part /boot/efi
├─sda2 8:2 0 2G 0 part /boot
└─sda3 8:3 0 60.9G 0 part
└─vg0-lv0 253:0 0 60.9G 0 lvm /
sdb 8:16 0 2G 0 disk
└─cryptdisk 253:1 0 2G 0 crypt /mnt/crypt
$ cd /mnt/crypt
$ ls -alth
total 1.1G
-rw-r--r-- 1 root root 1.0G Feb 11 02:14 test.dat
drwxr-xr-x 3 root root 4.0K Feb 11 02:14 .
drwx------ 2 root root 16K Feb 11 01:55 lost+found
drwxr-xr-x 3 root root 4.0K Feb 11 01:54 ..
テストファイルのハッシュの比較
-
md5
がca12c1a7e0b7c805e01f13d93ffea3ea
かどうか確認する
$ md5sum test.dat
ca12c1a7e0b7c805e01f13d93ffea3ea test.dat
さいごに
かんたんでしたね