GNU/Linux >> Linux の 問題 >  >> Linux

LUKSの構成:Linux Unified Key Setup

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に提供できる他のオプションがあります 、および速度とより安全なファイルシステムに関しては、それぞれにトレードオフがあります。オプションを調べて、状況に最適なものを選択してください。


Linux
  1. Stratisを使用したLinuxでのローカルストレージの構成

  2. RockyLinux8でOpenVPNサーバーをセットアップする

  3. LinuxでSSHを使い始める

  1. Linuxサーバーでのブロックストレージの構成

  2. Linux で「パスワードなし」の ssh ログイン用に SSH キーをセットアップする方法

  3. Linux で SSH の「公開/秘密鍵」ログイン用の SSH キーをセットアップする方法

  1. Linuxで暗号化されたファイルボルトを作成する

  2. Tripwireを使用したLinuxでのセキュリティ監視

  3. Linux での Kensington Slimblade の構成