在CentOS系统中,敏感数据如果直接存储在未加密的文件系统中,一旦服务器被非法入侵或者硬盘被物理窃取,数据就会完全暴露。启用文件系统加密可以从底层保障数据安全性,即使存储介质丢失,没有解密密钥也无法读取其中的内容。常用的加密方案是基于LUKS(Linux Unified Key Setup)标准,结合dm_crypt模块实现分区级别的加密,这种方式兼容性好,配置流程也相对成熟。

准备工作
在开始配置之前,需要先确认系统环境满足要求:
- 系统为CentOS 7及以上版本,已安装cryptsetup工具,若未安装可通过yum安装
- 准备一个空闲的磁盘分区或者整个空闲磁盘用于加密,注意操作会清空分区原有数据,需提前备份重要内容
- 确保有root权限,所有操作需要在root用户下执行
首先检查cryptsetup是否已安装,执行以下命令:
# 检查cryptsetup安装状态 rpm -qa | grep cryptsetup # 若未安装则执行安装命令 yum install -y cryptsetup
创建LUKS加密分区
假设我们要加密的空闲分区为/dev/sdb1,首先需要对分区进行LUKS格式化,这一步会初始化加密元数据并设置解密密码:
# 对目标分区进行LUKS格式化,执行后会提示输入密码,需牢记该密码 cryptsetup luksFormat /dev/sdb1 # 确认操作输入YES(大写) # 之后输入两次解密密码
格式化完成后,需要打开加密分区,将其映射为一个逻辑设备,后续对该逻辑设备的操作都会自动进行加解密:
# 打开加密分区,映射名称为encrypted_data,名称可自定义 cryptsetup luksOpen /dev/sdb1 encrypted_data # 执行后会提示输入之前设置的解密密码
打开成功后,会在/dev/mapper/目录下生成名为encrypted_data的设备文件,接下来对该设备创建文件系统:
# 创建ext4文件系统,也可根据需求选择xfs等其他文件系统 mkfs.ext4 /dev/mapper/encrypted_data
挂载加密文件系统
创建好文件系统后,就可以将其挂载到指定目录使用:
# 创建挂载目录 mkdir -p /data/encrypted # 挂载加密文件系统 mount /dev/mapper/encrypted_data /data/encrypted # 查看挂载状态 df -h | grep encrypted
挂载完成后,/data/encrypted目录下的所有文件写入时都会自动加密,读取时自动解密,对用户和应用程序来说是透明的。
配置开机自动挂载
默认情况下,重启系统后加密分区不会自动打开和挂载,需要手动配置实现开机自动解锁挂载,避免每次重启都需要手动输入密码。
首先生成密钥文件,避免明文密码暴露在配置文件中:
# 生成随机密钥文件 dd if=/dev/urandom of=/root/encrypted_key bs=512 count=4 # 设置密钥文件权限,仅root可读取 chmod 0400 /root/encrypted_key # 将密钥文件添加到LUKS分区的密钥槽中 cryptsetup luksAddKey /dev/sdb1 /root/encrypted_key # 执行后会提示输入原有的解密密码,验证通过后密钥会添加成功
然后配置/etc/crypttab文件,设置开机自动打开加密分区:
# 编辑crypttab文件 vi /etc/crypttab # 添加以下内容,格式为:映射名称 分区设备 密钥文件路径 encrypted_data /dev/sdb1 /root/encrypted_key
接着配置/etc/fstab文件,设置开机自动挂载加密文件系统:
# 编辑fstab文件 vi /etc/fstab # 添加以下内容,UUID可通过blkid /dev/mapper/encrypted_data获取 /dev/mapper/encrypted_data /data/encrypted ext4 defaults 0 0
配置完成后,重启系统验证是否自动挂载成功:
# 重启系统 reboot # 重启后检查挂载状态 df -h | grep encrypted
注意事项
- 解密密码和密钥文件需要妥善保存,一旦丢失无法恢复加密分区内的数据
- 加密会对读写性能有一定影响,通常性能损耗在5%到15%之间,对大多数业务场景影响不大
- 若需要移除加密,需要先备份分区内数据,然后关闭映射、删除加密元数据,再重新创建普通文件系统
- 不要对系统根分区直接进行LUKS加密,除非熟悉CentOS的initramfs配置,否则可能导致系统无法启动