在CentOS服务器中,未加密的文件系统一旦被非法访问,存储的敏感数据就会直接暴露,使用LUKS结合dm-crypt实现文件系统加密,可以在不影响正常业务使用的前提下,为数据提供底层加密保护。

核心加密组件介绍
CentOS系统默认支持LUKS(Linux Unified Key Setup)加密标准,它基于dm-crypt内核模块实现,核心优势包括:
- 支持多种加密算法,默认使用AES-256-XTS,安全性经过长期验证
- 密钥管理灵活,可设置多个密码或密钥文件解锁加密分区
- 加密过程对上层应用透明,业务程序无需修改即可正常使用加密后的文件系统
加密分区创建步骤
1. 准备待加密的磁盘分区
首先使用fdisk或parted工具创建新的磁盘分区,假设我们新创建的分区为/dev/sdb1,注意不要对该分区进行格式化操作。
2. 初始化LUKS加密
执行以下命令对分区进行LUKS格式化,过程中需要设置加密密码:
# 初始化LUKS加密,会清空分区原有数据,操作前请确认分区无重要数据 cryptsetup luksFormat /dev/sdb1 # 执行后输入大写的YES确认操作,然后设置加密密码,重复输入两次
3. 打开加密分区并创建文件系统
加密分区初始化完成后,需要先解锁分区才能使用,解锁后的分区会映射到/dev/mapper/目录下:
# 解锁加密分区,映射名称为encrypted_data cryptsetup luksOpen /dev/sdb1 encrypted_data # 输入之前设置的加密密码,解锁成功后会出现/dev/mapper/encrypted_data设备 # 创建ext4文件系统 mkfs.ext4 /dev/mapper/encrypted_data # 创建挂载目录 mkdir -p /data/encrypted # 临时挂载分区 mount /dev/mapper/encrypted_data /data/encrypted
配置开机自动挂载
如果希望服务器重启后自动挂载加密分区,需要配置/etc/crypttab和/etc/fstab两个文件。
1. 配置crypttab文件
在/etc/crypttab中添加映射规则,如果使用密码文件解锁,需要先创建密钥文件:
# 创建密钥文件,设置仅root可读权限 dd if=/dev/urandom of=/root/encrypted_key bs=1024 count=4 chmod 400 /root/encrypted_key # 将密钥文件添加到LUKS分区 cryptsetup luksAddKey /dev/sdb1 /root/encrypted_key # 编辑/etc/crypttab,添加以下内容 # encrypted_data /dev/sdb1 /root/encrypted_key
/etc/crypttab的格式为:映射名称 设备路径 密钥文件路径,如果使用密码手动输入解锁,密钥文件路径可以留空。
2. 配置fstab文件
在/etc/fstab中添加挂载规则:
# 编辑/etc/fstab,添加以下内容 # /dev/mapper/encrypted_data /data/encrypted ext4 defaults 0 2
配置完成后重启服务器,系统会在启动过程中提示输入加密密码(如果未使用密钥文件),输入正确密码后即可自动挂载分区。
密钥管理与安全建议
- 不要将密钥文件和加密分区放在同一块磁盘上,避免磁盘整体丢失后密钥同时泄露
- 定期更换加密密码,可使用
cryptsetup luksChangeKey /dev/sdb1命令修改密码 - 如果需要移除LUKS加密,需要先备份分区数据,然后执行
cryptsetup luksErase /dev/sdb1清除加密信息,再重新格式化分区 - 备份LUKS分区头部信息,避免头部损坏导致数据无法解锁,备份命令为
cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/luks_header_backup
常见问题排查
如果解锁加密分区失败,可通过以下命令查看LUKS分区状态:
# 查看LUKS分区详细信息,包括加密算法、密钥槽状态 cryptsetup luksDump /dev/sdb1 # 测试密钥文件是否有效 cryptsetup luksOpen /dev/sdb1 encrypted_test --test-passphrase --key-file /root/encrypted_key
如果自动挂载失败,可检查/etc/crypttab和/etc/fstab的配置格式是否正确,设备路径是否和当前磁盘分区一致。