Wikipediaによると、Linux Unified Key Setup(LUKS)は、2004年にClemens Fruhwirthによって作成されたディスク暗号化仕様であり、元々はLinuxを対象としていました。 LUKSは、デバイスマッパークリプト(dm-crypt
)を使用します )ブロックデバイスレベルで暗号化を処理するカーネルモジュールとして。
Linuxパーティションを暗号化するために開発されたさまざまなフロントエンドツールがあります。それらがプレーンパーティションであるか論理ボリューム(LV)であるかは関係ありません。このチュートリアルでは、これらのツールについて説明し、ディスク暗号化を構成する方法を示します。 10 GBのディスク(/dev/vdb
)を作成しました )このチュートリアルで使用します。
暗号化を構成するための適切なツールをインストールすることから始めましょう:
dnf install -y cryptsetup parted
cryptsetup
パッケージはcryptsetup
を提供します コマンド。これは暗号化を構成するために使用しますが、parted
パッケージはparted
を提供します パーティションを構成するためのコマンド。
lsblk
の実行 コマンドは現在の設定を表示します:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
/dev/vdb
のようなブロックデバイス全体を暗号化できます 、ただし、パーティションを作成すると、後で他のパーティションを追加できるため、柔軟性が高まります。
次に、次のコマンドを実行して、暗号化するパーティションを作成します。
[root@rhel8 ~]# parted /dev/vdb mklabel msdos
Information: You may need to update /etc/fstab.
[root@rhel8 ~]# parted /dev/vdb -s "mkpart primary 2048s -1"
[root@rhel8 ~]# parted /dev/vdb align-check optimal 1
1 aligned
lsblk
を実行している場合 ここでも、dev/vdb1
パーティションが追加されました:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
LUKSを使用したボリュームのフォーマット
次のプロセスは、dev/vdb1
を暗号化します 。続行するには、YES
と入力する必要があります 大文字でパスワードを2回入力します:
[root@rhel8 ~]# cryptsetup -y -v luksFormat /dev/vdb1
WARNING!
========
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for /dev/vdb1:
Verify passphrase:
Key slot 0 created.
Command successful.
次に、暗号化されたボリュームを開くためのターゲットが必要です。 mybackup
を使用しました 私のターゲットとして、しかしこのターゲットは何でも名前を付けることができます:
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup
Enter passphrase for /dev/vdb1:
Key slot 0 unlocked.
Command successful.
lsblk
を実行しています もう一度、次のように表示されます:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt
mybackup
も表示されます 暗号化されたボリュームのマッピング:
[root@rhel8 ~]# ls -l /dev/mapper/mybackup
lrwxrwxrwx. 1 root root 7 Sep 16 16:10 /dev/mapper/mybackup -> ../dm-2
暗号化されたボリュームにアクセスできるようになったので、データを保存する前にフォーマットする必要があります。 xfs(Red Hat Enterprise Linux 8のデフォルト)、ext3、ext4など、さまざまなファイルシステムタイプから選択できます。簡単にするために、ファイルシステムタイプとしてxfsを使用します。
[root@rhel8 ~]# mkfs.xfs /dev/mapper/mybackup
meta-data=/dev/mapper/mybackup isize=512 agcount=4, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=2618880, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
暗号化されたファイルシステムにデータを書き込むには、最初にそれをマウントする必要があります。 /mnt/my_encrypted_backup
を選択しました 私のデータのマウントポイントになる:
[root@rhel8 ~]# mkdir -p /mnt/my_encrypted_backup
次に、mount
を実行します コマンド:
[root@rhel8 ~]# mount -v /dev/mapper/mybackup /mnt/my_encrypted_backup/
mount: /mnt/my_encrypted_backup does not contain SELinux labels.
You just mounted an file system that supports labels which does not
contain labels, onto an SELinux box. It is likely that confined
applications will generate AVC messages and not be allowed access to
this file system. For more details see restorecon(8) and mount(8).
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
ここで、Security-Enhanced Linux(SELinux)の警告が表示されます。マウントポイントのSELinuxセキュリティコンテキストのラベルを変更する必要があります:
[root@rhel8 ~]# restorecon -vvRF /mnt/my_encrypted_backup/
Relabeled /mnt/my_encrypted_backup from system_u:object_r:unlabeled_t:s0 to system_u:object_r:mnt_t:s0
mount
の実行 コマンドは、警告がなくなったことをもう一度示します:
[root@rhel8 ~]# mount -v -o remount /mnt/my_encrypted_backup/
mount: /dev/mapper/mybackup mounted on /mnt/my_encrypted_backup.
lsblk
を実行しています 再び次の出力を生成します:
[root@rhel8 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
vda 252:0 0 30G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 29G 0 part
├─rhel-root 253:0 0 26.9G 0 lvm /
└─rhel-swap 253:1 0 2.1G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
└─vdb1 252:17 0 10G 0 part
└─mybackup 253:2 0 10G 0 crypt /mnt/my_encrypted_backup
LUKSの詳細を取得する
これで、LUKSヘッダー情報、データセグメントセクション、使用されたキースロットなどをダンプできます。
[root@rhel8 ~]# cryptsetup luksDump /dev/vdb1
LUKS header information
Version: 2
Epoch: 3
Metadata area: 12288 bytes
[……]
Digest: 49 5a 68 e9 b6 66 50 2d c8 22 8e b9 d5 fd 2c af
23 b7 47 f3 2f 62 ee 6a b8 7c 93 8f 19 fe d8 3c
LUKS暗号化ファイルシステムを自動的にマウントすると、セキュリティに影響があります。ラップトップユーザーにとって、これを行うことは賢明な選択ではありません。デバイスが盗まれた場合、暗号化されたパーティションに保存されていたデータも盗まれます。
上記のセキュリティへの影響に関係なく、自動マウントを設定する方法は次のとおりです。まず、キーファイルを保存するための適切なディレクトリを作成します。
[root@rhel8 ~]# mkdir /etc/luks-keys/; dd if=/dev/random of=/etc/luks-keys/mybackup_key bs=32 count=1
[root@rhel8 ~]#
次に、cryptsetup
を使用してキーを追加します ユーティリティ:
[root@rhel8 ~]# cryptsetup luksAddKey /dev/vdb1 /etc/luks-keys/mybackup_key
Enter any existing passphrase:
[root@rhel8 ~]#
次に、SELinuxコンテキストを復元する必要があります:
[root@rhel8 ~]# restorecon -vvRF /etc/luks-keys
Relabeled /etc/luks-keys from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
Relabeled /etc/luks-keys/mybackup_key from unconfined_u:object_r:etc_t:s0 to system_u:object_r:etc_t:s0
以前は、暗号化されたファイルシステムを開いて手動でマウントしていました。次に、自動化で同じことができるかどうかを確認する必要があります。ファイルシステムはすでにマウントされているため、最初にumount
する必要があります (アンマウント)それ:
[root@rhel8 ~]# umount /mnt/my_encrypted_backup
[root@rhel8 ~]# cryptsetup -v luksClose mybackup
Command successful.
ファイルをキーとして使用して、コマンドラインから暗号化されたパーティションを開いてみましょう。
[root@rhel8 ~]# cryptsetup -v luksOpen /dev/vdb1 mybackup --key-file=/etc/luks-keys/mybackup_key
Key slot 1 unlocked.
Command successful.
次に、/etc/crypttab
を構成する必要があります および/etc/fstab
起動時にディスクをマウントします。最初に/dev/vdb1
のUUIDが必要です (/dev/mapper/mybackup
ではありません )、次のように取得できます:
[root@rhel8 ~]# blkid /dev/vdb1
/dev/vdb1: UUID="46f89586-f802-44f1-aded-f80b16821189" TYPE="crypto_LUKS" PARTUUID="f92dbe33-01"
次に、/etc/crypttab
に次の行を入力します 暗号化されたファイルシステムを自動的に開くことができます:
mybackup UUID=46f89586-f802-44f1-aded-f80b16821189 /etc/luks-keys/mybackup_key luks
これで、/etc/fstab
を構成できるようになりました。 。このファイルに次の行(太字)を追加します:
[root@rhel8 ~]# vi /_etc_/fstab
#
# /etc/fstab
# Created by anaconda on Thu Aug 8 06:21:57 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
[...]
**/dev/mapper/mybackup /mnt/my_encrypted_backup xfs defaults 0 0**
そして最後に、mount -a
を使用して、マシンを再起動せずに自動マウントが機能するかどうかをテストできます。 :
[root@rhel8 ~]# mount -av
/ : ignored
/boot : already mounted
swap : ignored
/mnt/my_encrypted_backup : successfully mounted
この場合、/mnt/my_encrypted_backup
正常にマウントされました。次に、システムを再起動し、再起動時に自動マウントが機能することを確認します。
cryptsetup
に提供できる他のオプションがあります 、および速度とより安全なファイルシステムに関しては、それぞれにトレードオフがあります。オプションを調べて、状況に最適なものを選択してください。