Red Hat Training

A Red Hat training course is available for Red Hat Linux

4.8. 加密

4.8.1. 使用 LUKS 硬盘加密

磁盘格式的 Linux 统一密钥设置(或称为 LUKS)可让您加密 Linux 计算机中的分区。这对可移动计算机以及可移动介质尤为重要。LUKS 可允许使用多个用户密钥解密用于分区批加密的主密钥。

LUKS 概要

LUKS 能做什么
  • LUKS 能对全区设备加密,因此,非常适用于保护移动设备的内容,如可移动的储存媒体或笔记本电脑硬盘驱动器。
  • 加密区设备的基本内容可为任意内容。这对于加密 swap 设备十分有用。这对用于特定的格式化区设备数据储存的某些数据库也是很有用的。
  • LUKS 使用现有设备映射器的内核子系统。
  • LUKS 密码短语增强,可提供防止字典攻击。
  • LUKS 设备含有多个密钥槽,允许用户添加备用密钥或密码短语。
LUKS “不能” 做的是:
  • LUKS 不适用于需要很多(超过 8 个)用户对同一设备有不同访问密钥的程序。
  • LUKS 不适用于需要文件级别加密的程序。

4.8.1.1. 红帽企业版 Linux 中的 LUKS 实施

红帽企业版 Linux 6 采用 LUKS 执行文件系统加密。默认情况下不会在安装过程中选择加密文件系统的选项。如果您选择该选项加密您的硬盘,则每次您引导计算机时都会提示您输入密码短语。这个密码短语可为您用于分区解密的批加密密钥“解锁”。如果您选择要修改默认分区表,则您可以选择您要加密的分区。这是在分区表设置值设定的。
用于 LUKS (请参阅 cryptsetup --help)的默认密码是 aes-cbc-essiv:sha256 (ESSIV - Encrypted Salt-Sector Initialization Vector,加密密钥的 hash,是 Linux 系统中 dm-crpt 默认使用的 IV )。请注意,默认情况下,在 XTS 模式(aes-xts-plain64)下使用此安装程序 Anaconda 。 LUKS 的默认密钥长度为 256 位。 LUKS Anaconda (XTS 模式) 的默认密钥长度为 512 位。 可用的密码为:

4.8.1.2. 手动加密目录

警告

按照这个步骤执行将删除您要加密的分区中的所有数据。您将会丢失所有信息!在开始执行这个步骤前,请确保您在外部信源中备份了数据。
  1. 作为 root 用户,用 shell 提示符输入以下命令,进入运行等级 1:
    telinit 1
  2. 卸载您现有的 /home:
    umount /home
  3. 如果上一步的命令失败,那么使用 fuser 来查找占用 /home 的程序并将其终止:
    fuser -mvk /home
  4. 检验是否还有装载 /home
    grep home /proc/mounts
  5. 将随机数据填入您的分区:
    shred -v --iterations=1 /dev/VG00/LV_home
    此命令会以您设备的顺序写入速度执行,可能要花些时间才能完成。它是确保未经加密的数据不会保留在使用过的设备上,并混淆部分含有加密数据却又不是随机数据的设备。
  6. 初始化您的分区:
    cryptsetup --verbose --verify-passphrase luksFormat /dev/VG00/LV_home
  7. 打开新加密的设备:
    cryptsetup luksOpen /dev/VG00/LV_home home
  8. 确保设备存在:
    ls -l /dev/mapper | grep home
  9. 创建文件系统:
    mkfs.ext3 /dev/mapper/home
  10. 装载文件系统:
    mount /dev/mapper/home /home
  11. 确保文件系统可见:
    df -h | grep home
  12. 添加以下命令到 /etc/crypttab 文件:
    home /dev/VG00/LV_home none
  13. 编辑 /etc/fstab 文件,移除 /home 旧的入口,并添加以下命令行:
    /dev/mapper/home /home ext3 defaults 1 2
  14. 恢复默认的 SELinux 安全环境:
    /sbin/restorecon -v -R /home
  15. 重启机器:
    shutdown -r now
  16. /etc/crypttab 条目在启动时,您的电脑会询问您的 luks 密码短语。
  17. 作为 root 用户登录,并恢复您的备份。
现在您就有一个加密的分区,即便电脑处于关机的状态,可安全地放置您所有的数据。

4.8.1.3. 为现有设备添加新密码短语

使用以下命令,添加新的密码短语到现有的设备:
cryptsetup luksAddKey <device>
提示您输入现有密码短语进行验证后,将提示您输入新密码短语。

4.8.1.4. 从现有的设备中移除密码短语

使用以下命令,从现有设备中移除密码短语:
cryptsetup luksRemoveKey <device>
将提示您要删除的密码短语,然后是剩下用来验证的任意密码短语。

4.8.1.5. 在 Anaconda 中创建加密块设备

您可以在系统安装过程中创建加密块设备。这可允许您轻松使用加密分区配置系统。
要对块设备加密,则须在选择自动分区时检查 加密系统 (Encrypt System)复选框,或在创建独立分区、软件 RAID (Redundant Arrays of independent Disks,磁盘阵列)阵列或逻辑卷时,勾选 加密(Encrypt) 复选框。在您完成分区之后,系统会提示您输入加密的密码短语。要求此密码短语可访问加密设备。如果您有预先存在的 LUKS 设备,并有其在早期安装过程中所提供的密码短语,那么输入密码短语对话框中将也会含有复选框。检查此复选框表明,您将新的密码短语添加到预先存在的加密块设备中每个可用的槽。

注意

自动分区 屏幕上检查(Automatic Partitioning) 加密系统 (Encrypt System)复选框,然后选择 创建自定义分区(Create custom layout),这样就不会引起任何块设备进行自动加密。

注意

您可使用 kickstart 为每个新加密的块设备设置单独的密码。

4.8.2. 创建 GPG 密钥

GPG (GNU Privacy Guard,GNU 隐私卫士)用于识别您的身份,并对您的通信进行身份验证,包括那些您不认识的人。 GPG 允许任何通过读取 GPG 签名邮件来验证其身份的人使用。换句话说, 对于某些十分确定您所签名的通信实际上就是来源于您, GPG 允许那些人使用。 GPG 有用是因为它能防止第三方更改编码或中途拦截对话,更改信息。

4.8.2.1. 在 GNOME 中创建 GPG 密钥

要在 GNOME 中创建 GPG 密钥,则须遵循这些步骤:
  1. 安装 海马(Seahorse) 实用程序,更易于 GPG 密钥的管理:
    ~]# yum install seahorse
  2. 要创建密钥,则须从 应用程序(Applications)辅助程序(Accessories) 菜单,选择 密码和加密密钥(Passwords and Encryption Keys), 这就启动 Seahorse 应用程序。
  3. 文件(File) 菜单中选择 新文件(New) ,再选 PGP 密钥(PGP Key;Pretty Good Privacy,加密软体) 。然后点击 继续(Continue).
  4. 输入您的全名、电子邮箱以及可用于描述您的选择性注释(例如:约翰· C ·史密斯( John C. Smith), jsmith@example.com, 软件工程师(Software Engineer))。点击 创建(Create) 。然后会出现对话框,要求输入密钥的密码短语。选择一个强大又容易记的密码短语。点击 OK ,密钥就创建好了。

警告

如果您忘记了您的密码短语,那么您将无法解码数据。
要查找您的 GPG 密钥 ID,则须在新创建密钥旁的 密钥 ID(Key ID) 栏中查找。在大多数情况下,如果要求您输入密钥 ID ,那么在密钥 ID 之前加入 0x ,如 0x6789ABCD 。您应当备份您的私钥,并保存在安全的地方。

4.8.2.2. 在 KDE 中创建 GPG 密钥

要在 KDE(桌面环境)中创建 GPG 密钥,则须遵循这些步骤:
  1. 从主菜单中选择 应用程序(Applications)实用程序(Utilities)加密工具(Encryption Tool) ,启动 KGpg 程序。如果您从未使用过 KGpg 程序,那么此程序会指导您完成创建 GPG 密钥对的过程。
  2. 会出现对话框,提示您创建新的密钥对。输入您的姓名、电子邮箱以及选择是否添加注释。您也可为您的密钥选择有效期,以及密钥强度(位数)和算法。
  3. 在下一个对话框输入您的密码短语。此时,您的密钥会出现在 KGpg 的主窗口。

警告

如果您忘记了您的密码短语,那么您将无法解码数据。
要查找您的 GPG 密钥 ID,则须在新创建密钥旁的 密钥 ID(Key ID) 栏中查找。在大多数情况下,如果要求您输入密钥 ID ,那么在密钥 ID 之前加入 0x ,如 0x6789ABCD 。您应当备份您的私钥,并保存在安全的地方。

4.8.2.3. 使用命令行创建 GPG 密钥

  1. 使用以下 shell 命令:
    ~]$ gpg2 --gen-key
    这个命令生成由公钥和私钥组成的密钥对。其它人可使用您的公钥认证和(或者)解密您的会话。尽量广泛发布您的公钥,特别是对那些您知道要从您哪里接收认证会话的人,比如邮件列表。
  2. 一系列的提示会指导您完成此过程。若需要,按下 回车 (Enter)键,赋予默认值。第一个提示会询问您要选择怎样的密钥:
    Please select what kind of key you want:
    (1) RSA and RSA (default)
    (2) DSA and Elgamal
    (3) DSA (sign only)
    (4) RSA (sign only)
    Your selection?
    
    在几乎所有情况下,默认值都是正确的选择。RSA / RSA 密钥不仅允许您对通信签名,还允许您加密文件。
  3. 选择密钥长度:
    RSA keys may be between 1024 and 4096 bits long.
    What keysize do you want? (2048)
    
    默认值 2048 位,对于几乎所有的用户来说,都是足够的,而且有着极强的安全级别。
  4. 选择密钥的有效期。选择有效期,而不是使用 none 的默认值,这是很好的想法。例如,如果密钥中的电子邮箱无效了,那么有效期将提醒其他人停止使用此公钥。
    Please specify how long the key should be valid.
    0 = key does not expire
    d = key expires in n days
    w = key expires in n weeks
    m = key expires in n months
    y = key expires in n years
    key is valid for? (0)
    
    例如,输入一个 1y 值,会使密钥的有效期为一年。(如果您改变主意的话,您可以在密钥生成之后更改其有效期。)
  5. gpg2 应用程序询问签名信息之前,则会出现以下提示:
    Is this correct (y/N)?
    
    输入 y 完成此程序。
  6. 为您的 GPG 密钥输入您的姓名和电子邮箱。记住此程序是要验证您的个人真实身份。因此,包括您的真实姓名。如果您选择假的电子邮箱,那么其他人要找到您的公钥就更困难了。这会使您的通信身份验证很难进行。例如,如果您在邮件列表中将此 GPG 密钥用于您的个人介绍,那么在此列表中输入您使用的电子邮箱。
    使用注释字段添加别名或者其它信息。(有些人为不同目的使用不同的密钥,并使用注释互相识别,比如“Office”或者“Open Source Projects”。)
  7. 在确认的提示信息中,如果所有输入都是正确的,请输入 O 字母;或者使用其他选择来解决任何问题。最后,为您的安全密钥输入密码短语。 gpg2 程序会要求您输入两次密码短语,以确保您没有输入错误。
  8. 最后, gpg2 会产生随机数据,以尽可能地确保您的密钥是独一无二的。移动您的鼠标,输入随机密钥,或在系统运行此步骤期间执行其他任务来加速此进程。一旦完成此步骤,您的密钥就生成完毕,可以使用:
    pub  1024D/1B2AFA1C 2005-03-31 John Q. Doe <jqdoe@example.com>
    Key fingerprint = 117C FE83 22EA B843 3E86  6486 4320 545E 1B2A FA1C
    sub  1024g/CEA4B22E 2005-03-31 [expires: 2006-03-31]
    
  9. 密钥指纹是您密钥的简写“签名”。它允许您确认其他人是否接收过您的真实公钥,有没有进行篡改。您不需要写下此指纹。在任何时间要显示此指纹,则须使用此命令,替换您的电子邮箱:
    ~]$ gpg2 --fingerprint jqdoe@example.com
    您的 “GPG key ID” 由 8 个十六进制数字组成,用于识别公钥。在上述示例中, GPG 密钥 ID 是 1B2AFA1C 。在大多数情况下,如果要求您输入密钥 ID ,那么在密钥 ID 之前加入 0x ,如 0x6789ABCD

警告

如果您忘记了您的密码短语,则该密钥就无法使用,且使用该密钥加密的数据将会丢失。

4.8.3. 在公钥密码学中使用 openCryptoki

openCryptoki 是一个 Linux 下的 PKCS#11 开源实现,是一种“ 公钥加密标准 ”(PKCS,Public-Key Cryptography Standard),定义了通常称为令牌的加密设备的应用程序接口(API)。令牌可在硬件或软件中执行。此特点概述了 openCryptoki 系统是如何安装、配置,以及如何在 Red Hat Enterprise Linux 7 中使用。

4.8.3.1. 安装 openCryptoki 并启动服务

要在您的系统中安装 openCryptoki 基本工具包,包括用于检测的令牌的软件实现,则须作为 root 用户运行以下命令:
~]# yum install opencryptoki
根据您打算使用的硬件令牌的类型,您可能需要安装其他工具包以支持具体使用情况。例如,要获取对“ 可信计算平台模块 ”(TPM,Trusted Platform Module)设备的支持,您需要安装 opencryptoki-tpmtok 工具包。
关于如何使用 Yum 工具包管理器安装工具包的基本信息,请参阅《 Red Hat Enterprise Linux 7 系统管理员指南 》。
要启用 openCryptoki 服务,您需要运行 pkcsslotd 守护进程。作为 root 用户执行以下命令,就可启动当前会话的守护进程:
~]# systemctl start pkcsslotd
要确保在启动时可自动启用服务,则须运行以下命令:
~]# systemctl enable pkcsslotd
关于如何使用 systemd 来管理服务的更多信息,请参阅《 Red Hat Enterprise Linux 7 系统管理员指南 》。

4.8.3.2. 配置并使用 openCryptoki

启动时, pkcsslotd 守护进程会读取/etc/opencryptoki/opencryptoki.conf 配置文件,它可用于收集关于在系统工作时所配置的令牌以及其槽的信息。
此文件定义了使用键值对的独立槽。每个槽的定义可含有描述、可使用的令牌库的规格说明书,以及槽制造者的 ID 。另外,可对槽的硬件和固件的版本进行定义。关于文件格式的描述以及独立键和可分配给这些键的值的详细描述,请参阅 opencryptoki.conf(5) 手册页。
要在运行时修改 pkcsslotd 守护进程的行为,则须使用 pkcsconf 实用程序。此工具允许您显示和配置守护进程的状态,以及列出并修改当前所配置的槽和令牌。例如,要显示关于令牌的信息,则须发出以下命令(请注意, 所有需用 pkcsslotd 守护进程进行通信的非 root 用户必须是 pkcs11 系统组的成员):
~]$ pkcsconf -t
关于可用于 pkcsconf 工具的参数列表,请参阅 pkcsconf(1) 手册页。

警告

请牢记,只有完全可信的用户应可成为 pkcs11 组的成员,因为此组的所有成员有权限阻止其他 openCryptoki 服务的用户访问所配置的 PKCS#11 令牌。