注意:

在 Oracle Linux 上使用 LUKS 加密驱动器

简介

Oracle Linux 包括设备映射器加密 (dm-crypt) 和 Linux 统一密钥设置 (Unified Key Setup,LUKS),用于在块设备上处理加密。

在本练习中,我们将重点介绍使用 LUKS 对设备进行加密的前端工具,它利用 Linux 内核随附的设备映射器支持提供的 dm-crypt 模块。

目标

要求

具有可用磁盘和完全修补的 Oracle Linux 安装的系统。

设置实验室环境

注意:使用免费实验室环境时,请参见 Oracle Linux Lab Basics 了解连接和其他使用说明。

  1. 如果尚未连接,请打开一个终端并通过 ssh 连接到 ol-node01 实例。

    ssh oracle@<ip_address_of_instance>
    
  2. 验证块存储卷是否存在。

    lsblk -f
    

    空闲实验环境的输出显示两个块设备:sda(包含基本 OS)和 sdb(此实验使用)。使用 -f 选项可显示文件系统类型 (FSTYPE) 和块普遍唯一标识符 (UUID)。

安装加密程序包

  1. 如果系统上尚不可用,请安装 cryptsetup 工具。

    检查是否已安装 cryptsetup

    sudo dnf list --installed cryptsetup
    

    如果未安装,请安装 cryptsetup

    sudo dnf -y install cryptsetup
    

    注:免费实验室环境已安装了 cryptsetup 工具。

使用 LUKS 加密卷

LUKS 和 dm-crypt 可用于块设备、RAID、LVM 物理卷,甚至交换。加密后,这些设备上的数据只能在引导时或挂载时使用正确的凭证进行访问。

空闲实验环境为此步骤提供了一个预先分区的磁盘 /dev/sdb1

  1. 加密磁盘。

    sudo cryptsetup -y -v luksFormat /dev/sdb1
    

    输入 YES 继续并提供两次口令短语。口令短语必须包含:

    • 至少 8 个字符
    • 1 位
    • 1 个大写字母
    • 1 个特殊字符
    • 非字典的单词

    重要提示:请务必记住键入的密码,因为以后将使用该密码。

    输出示例:

    [oracle@ol-node01 ~]$ sudo cryptsetup -y -v luksFormat /dev/sdb1
      
    WARNING!
    ========
    This will overwrite data on /dev/sdb1 irrevocably.
      
    Are you sure? (Type 'yes' in capital letters): YES
    Enter passphrase for /dev/sdb1: 
    Verify passphrase: 
    Key slot 0 created.
    Command successful.
    
  2. 打开加密的卷。

    此步骤需要一个可以命名任何内容的目标。我们将使用 mysecrets

    sudo cryptsetup -v luksOpen /dev/sdb1 mysecrets
    

    输入请求时在上一步中创建的相同口令短语。

    输出示例:

    [oracle@ol-node01 ~]$ sudo cryptsetup -v luksOpen /dev/sdb1 mysecrets
    Enter passphrase for /dev/sdb1: 
    Key slot 0 unlocked.
    Command successful.
    
  3. 再次检查块设备。

    lsblk -f
    

    设备 /dev/sdb1 现在将 FSTYPE 显示为 crypto_LUKS ,并显示加密设备卷的映射 mysecrets

设置加密卷的格式

将数据添加到加密卷之前,需要对其进行格式化。您可以选择不同的文件系统,例如 xfs、ext3、ext4 等。

  1. 创建文件系统。

    sudo mkfs.xfs /dev/mapper/mysecrets
    

挂载加密的卷

  1. 创建挂载点。

    sudo mkdir -p /u01/my_secret_storage
    
  2. 挂载卷。

    sudo mount -v /dev/mapper/mysecrets /u01/my_secret_storage
    

    输出显示 SELinux 警告。

    输出示例:

    [oracle@ol-node01 ~]$ sudo mount -v /dev/mapper/mysecrets /u01/my_secret_storage/
    mount: /u01/my_secret_storage 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/mysecrets mounted on /u01/my_secret_storage.
    

    这需要重新标记挂载点的 SELinux 安全上下文。

    sudo restorecon -vvRF /u01/my_secret_storage
    

    再次运行 mount 命令。

    sudo mount -v -o remount /u01/my_secret_storage
    
  3. 显示已挂载的卷。

    lsblk
    

    输出示例:

    [oracle@ol-node01 ~]$ lsblk
    NAME               MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
    sda                  8:0    0 46.6G  0 disk  
    |-sda1               8:1    0  100M  0 part  /boot/efi
    |-sda2               8:2    0    1G  0 part  /boot
    `-sda3               8:3    0 45.5G  0 part  
      |-ocivolume-root 252:0    0 35.5G  0 lvm   /
      `-ocivolume-oled 252:1    0   10G  0 lvm   /var/oled
    sdb                  8:16   0   50G  0 disk  
    `-sdb1               8:17   0    2G  0 part  
      `-mysecrets      252:2    0    2G  0 crypt /u01/my_secret_storage
    

显示 LUKS 卷详细信息

查看 LUKS 标头、数据段、密钥插槽和版本信息。

  1. 转储 LUKS 详细信息。

    sudo cryptsetup luksDump /dev/sdb1
    

    输出示例:

    LUKS header information
    Version:       	2
    Epoch:         	3
    Metadata area: 	16384 [bytes]
    Keyslots area: 	16744448 [bytes]
    UUID:          	4ccea398-5864-45a9-b274-173c8ebc3356
    Label:         	(no label)
    Subsystem:     	(no subsystem)
    Flags:       	(no flags)
      
    Data segments:
      0: crypt
    	offset: 16777216 [bytes]
    	length: (whole device)
    	cipher: aes-xts-plain64
    	sector: 512 [bytes]
      
    Keyslots:
      0: luks2
    	Key:        512 bits
    	Priority:   normal
    	Cipher:     aes-xts-plain64
    	Cipher key: 512 bits
    	PBKDF:      argon2i
    	Time cost:  10
    	Memory:     1048576
    	Threads:    4
    	Salt:       ee d2 c7 5b 05 43 0f 0a 12 60 da b5 87 19 4a 6f 
    	            06 57 a2 31 b1 dd bb 60 74 53 95 b2 ca 2f ad 4b 
    	AF stripes: 4000
    	AF hash:    sha256
    	Area offset:32768 [bytes]
    	Area length:258048 [bytes]
    	Digest ID:  0
    Tokens:
    Digests:
      0: pbkdf2
    	Hash:       sha256
    	Iterations: 243628
    	Salt:       89 6c 8b aa 37 af 58 e9 26 49 c5 e5 db 2d 54 ea 
    	            f8 7a c2 89 0e ab ed 48 74 a5 23 d7 b0 e6 9c 87 
    	Digest:     4a 2b 25 76 c5 85 1a 6c a9 28 0c ee d0 c7 76 eb 
    	            e1 4c ee 9c 5b 9a e2 d0 95 6e 1f 6e bb 1b 03 d1 
    

有关详细信息,请参阅 cryptsetup(8) 手册页、Oracle 文档或上游常见问题解答

详细信息

请参阅其他相关资源:

更多学习资源

docs.oracle.com/learn 上浏览其他实验室,或者在 Oracle Learning YouTube 频道上访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心