新手配置linux全盘加密luks并实现开机自动解密,核心是分清“安装时加密”和“装好后加密”两种场景:前者在ubuntu/fedora/centos/uos安装界面勾选“加密此分区”,由安装程序自动完成luksformat与initramfs配置,启动时安全输入密码;后者需手动对非根数据盘(如/dev/sdc1)执行luksformat、open、格式化,并通过/etc/crypttab与/etc/fstab配置自动挂载,或用密钥文件+update-initramfs实现免密启动,同时必须备份luks头、添加备用密钥槽并定期检查状态。

新手配置Linux全盘加密LUKS并实现开机自动解密,核心是分清“安装时加密”和“装好后加密”两种场景——前者在系统安装阶段完成,后者需手动操作非根分区。对新手而言,优先推荐安装时启用LUKS全盘加密,既安全又省去复杂配置;若已装好系统,可对独立数据盘(如/dev/sdb1)加密并配置自动挂载,避免动根分区风险。
一、安装阶段直接启用LUKS全盘加密(最稳妥)
这是新手最该选的路径:在Ubuntu、Fedora、CentOS或UOS等发行版安装界面中,跳过“擦除磁盘自动安装”,进入手动分区步骤:
- 新建一个未格式化的主分区(如/boot),再建一个大的逻辑分区(如/或/home所在分区)
- 选中该逻辑分区,勾选“加密此分区”或“Use as: Physical volume for encryption”
- 设置强密码(建议12位以上,含大小写字母+数字+符号),确认后安装程序会自动执行
cryptsetup luksFormat并配置initramfs - 安装完成后,每次启动都会在GRUB之后、系统加载前弹出LUKS密码输入界面——这是正常且安全的设计
二、已装系统下为数据盘加密并开机自动挂载(实用进阶)
适用于已有系统,想加密一块额外硬盘(如SSD或USB盘),不碰系统盘。整个过程无需重启,但需提前备份数据:
- 确认设备名:
lsblk找到目标分区(如/dev/sdc1),确保未挂载、无重要数据 - 初始化LUKS容器:
sudo cryptsetup luksFormat --type luks2 /dev/sdc1,输入大写YES,设主密码 - 映射并格式化:
sudo cryptsetup open /dev/sdc1 mydata→sudo mkfs.ext4 /dev/mapper/mydata - 创建挂载点:
sudo mkdir -p /mnt/mydata && sudo mount /dev/mapper/mydata /mnt/mydata - 配置自动挂载:用
sudo blkid /dev/sdc1查UUID,编辑/etc/crypttab添加:mydata UUID=xxxx-xxxx none luks,discard
再编辑/etc/fstab添加:/dev/mapper/mydata /mnt/mydata ext4 defaults,x-systemd.device-timeout=30 0 2
三、实现真正免输密码开机自动解密(需权衡安全)
注意:完全免密会降低安全性,仅建议用于可信物理环境(如家用NAS、内网服务器)。关键在于把密钥文件放进initramfs:
- 生成密钥文件:
sudo dd if=/dev/urandom of=/root/keyfile.bin bs=512 count=4 && sudo chmod 0400 /root/keyfile.bin - 绑定到LUKS:
sudo cryptsetup luksAddKey /dev/sdc1 /root/keyfile.bin(输主密码验证) - 修改
/etc/crypttab第三列为密钥路径:mydata UUID=xxxx-xxxx /root/keyfile.bin luks,discard - 更新initramfs:
Ubuntu/Debian执行sudo update-initramfs -u;
RHEL/Fedora执行sudo dracut -f - 重启测试:拔掉键盘也能顺利挂载,说明生效
四、密钥管理不能省——新手常忽略的三件事
LUKS不是设完密码就高枕无忧。新手务必做这三步,否则可能丢数据:
-
备份LUKS头:执行
sudo cryptsetup luksHeaderBackup /dev/sdc1 --header-backup-file /root/sdc1-luks-header.bak,头损坏=数据永久丢失 -
加一个备用密钥槽:用
sudo cryptsetup luksAddKey /dev/sdc1再设一个不同密码,防主密码遗忘 -
定期检查密钥槽状态:运行
sudo cryptsetup luksDump /dev/sdc1,确认KeySlot0和KeySlot1都是ENABLED,没被误删











