linux文件系统加密采用luks方案对整块分区底层加密,数据写入前自动加密、读取时自动解密;操作前须用lsblk -f精准识别目标设备,确认未挂载并清空签名;luks2初始化推荐argon2id与5000ms迭代时间;加密后需解锁映射、格式化ext4、挂载使用;开机自动挂载可配密钥文件但须严格权限控制且保留离线密钥槽。

Linux文件系统加密不是给文件夹加个密码,而是让整块分区在底层就“锁住”。LUKS(Linux Unified Key Setup)是目前最主流、内核原生支持的磁盘加密方案——它不依赖上层软件,数据写入磁盘前自动加密,读取时自动解密,用户几乎无感,但一旦硬盘被拿走,没有正确密钥就只能看到一堆乱码。
先确认目标,别动错盘
新手最容易把加密命令误执行到系统盘上,导致无法开机。操作前务必用以下命令精准识别目标设备:
-
运行
lsblk -f:看清楚哪个是你要加密的分区(比如/dev/sdb1),而不是/dev/nvme0n1p2(/boot)或/dev/nvme0n1p3(根分区) -
检查是否挂载:
mount | grep sdb1:输出为空才安全;若有内容,先执行sudo umount /dev/sdb1 -
清空残留签名:
sudo wipefs -a /dev/sdb1:避免旧文件系统 superblock 干扰 LUKS 初始化
用LUKS2初始化加密容器
别用默认参数。LUKS2 比 LUKS1 更健壮,尤其推荐搭配 Argon2id 和合理迭代时间:
- 执行命令(替换
/dev/sdb1为你的实际设备):sudo cryptsetup luksFormat --type luks2 --pbkdf argon2id --iter-time 5000 --cipher aes-xts-plain64 --key-size 512 /dev/sdb1 - 输入大写 YES 确认,再设置一个强密码(建议 12 位以上,含大小写字母、数字、符号)
- 立即备份头部:
sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/sdb1-header.bak,存到U盘离线保管——头损坏=数据永久丢失
解锁、格式化、挂载使用
LUKS 加密后只是一个“锁着的盒子”,里面还没文件系统:
- 解锁并映射:
sudo cryptsetup open /dev/sdb1 mydata(映射名为mydata,仅限小写字母和短横线) - 格式化映射设备:
sudo mkfs.ext4 /dev/mapper/mydata(不推荐 Btrfs,存在兼容性风险) - 创建挂载点并挂载:
sudo mkdir -p /mnt/mydata && sudo mount /dev/mapper/mydata /mnt/mydata - 验证可用性:写入测试文件,然后
sudo umount /mnt/mydata && sudo cryptsetup close mydata,再重新 open/mount 看能否读回
配置开机自动挂载(非根分区适用)
对数据盘(如 /dev/sdb1),可通过密钥文件实现免输密码启动,但必须守住安全底线:
- 生成密钥文件:
sudo dd if=/dev/urandom of=/root/key-sdb1 bs=4K count=1 && sudo chmod 0400 /root/key-sdb1 - 将密钥加入第二密钥槽:
sudo cryptsetup luksAddKey /dev/sdb1 /root/key-sdb1 - 查 UUID:
sudo blkid /dev/sdb1,复制类似UUID=xxxx-xxxx的值 - 编辑
/etc/crypttab,添加一行:sdb1_crypt UUID=xxxx-xxxx /root/key-sdb1 luks,discard - 编辑
/etc/fstab,添加:/dev/mapper/sdb1_crypt /mnt/mydata ext4 defaults,x-systemd.device-timeout=30 0 2
密钥文件不能放在未加密的 /boot 分区里,权限必须是 0400,且至少保留一个离线密钥槽作为应急入口。不复杂但容易忽略。











