LUKS 是什么
LUKS 是 Linux 上的磁盘分区加密标准,由 cryptsetup 管理,LUKS2 是目前默认的格式。它对块设备做透明加密:写入自动加密、读取自动解密,因此文件系统与上层应用无感知。安装器通常提供「加密磁盘」选项;已装系统也可以对空白分区加密。数据盘丢失或被盗时,没有口令就无法读取内容,这是等保场景中数据保密性要求的常见落地手段。
基本信息
| 工具与格式 | cryptsetup,LUKS2(LUKS1 为旧格式) |
|---|---|
| 加密对象 | 块设备或 LVM 逻辑卷,不针对单个文件 |
| 开机解锁 | /etc/crypttab 定义映射名与来源,配合 /etc/fstab 挂载 |
| 性能影响 | 加密解密有可测量的开销,机械盘更明显,可用 aes-xts 与硬件加速缓解 |
| 权限要求 | root;luksFormat 会清空目标设备数据 |
典型使用场景
- 等保与保密要求:存放敏感数据的分区做静态加密,设备离线也读不出内容
- 笔记本与移动终端:设备丢失时防止数据被直接读取
- 数据盘单独加密:系统盘不加密,业务数据盘加密并按需解锁
- 多密钥托管:为同一分区添加多个密钥槽,日常用口令、应急用密钥文件
- 迁移前打底:整机搬迁时先加密数据分区,避免硬盘外送过程泄密
加密分区并配置开机解锁
加密分区并配置开机解锁
cryptsetup luksFormat /dev/vg0/data # 加密目标卷,会清空其中数据
cryptsetup luksOpen /dev/vg0/data data_crypt # 打开映射,出现 /dev/mapper/data_crypt
mkfs.xfs /dev/mapper/data_crypt # 在映射设备上建文件系统
mount /dev/mapper/data_crypt /mnt && ls /mnt # 先手工挂载验证
cryptsetup luksDump /dev/vg0/data # 查看 LUKS 头信息与密钥槽
# 写入开机自动解锁配置:
echo 'data_crypt UUID='$(blkid -s UUID -o value /dev/vg0/data)' none luks' >> /etc/crypttab
echo '/dev/mapper/data_crypt /data xfs defaults 0 0' >> /etc/fstab配置文件字段读法
| 位置 | 字段 | 含义 |
|---|---|---|
| /etc/crypttab | 第 1 列 映射名 | 解锁后生成的 /dev/mapper 名称 |
| /etc/crypttab | 第 2 列 来源 | 写 UUID= 比设备路径稳定,避免盘序变化 |
| /etc/crypttab | 第 3 列 密钥文件 | 填 none 表示开机交互输入口令 |
| /etc/crypttab | 第 4 列 选项 | luks 为默认,可加 discard、noauto 等 |
| /etc/fstab | 挂载源 | 必须写成 /dev/mapper/映射名 |
| /etc/fstab | 挂载点与类型 | 与 mkfs 时选择的文件系统保持一致 |
LUKS 头损坏或口令丢失等于数据不可恢复:加密前确认备份策略,并把恢复口令纳入密钥托管流程,不要只存在个人记忆里。
可以把密钥文件写进密钥槽实现自动解锁(cryptsetup luksAddKey),但要评估密钥文件本身的存放位置与权限,否则等于把锁挂在钥匙上。