cryptsetup luksAddKey 和 luksRemoveKey 是LUKS多密钥槽管理的核心命令:必须先用 luksAddKey 添加新口令,再用 luksRemoveKey 删除旧口令,严禁直接覆盖或跳过添加而删除,否则可能导致无法解密;操作前需确认设备为 crypto_LUKS 格式、未挂载且路径正确(仅作用于原始设备如 /dev/sdb1,不可用于 /dev/mapper/xxx)。

cryptsetup luksAddKey 和 luksRemoveKey 是核心命令
LUKS 支持多密钥槽(key slot),每个槽可存一个独立口令。修改密码 ≠ 覆盖旧密码,而是先添加新口令、再删掉旧口令。直接覆盖会丢失所有访问途径,风险极高。
必须用 cryptsetup luksAddKey 添加新口令,再用 cryptsetup luksRemoveKey 删除旧口令。不能跳过添加直接删——否则可能把最后一个有效密钥槽也清空,导致分区彻底无法解密。
操作前务必确认当前口令有效,且设备未被挂载(umount 并 cryptsetup close 掉映射设备)。
执行时必须指定正确的设备路径
错误常发生在路径写错:比如把 /dev/sdb1 写成 /dev/sdb,或混淆了 LUKS 分区和它映射出的 /dev/mapper/xxx。只有原始加密设备(如 /dev/sdb1)才能接受 luksAddKey 操作。
- 用
lsblk -f确认 FSTYPE 为crypto_LUKS的设备名 - 用
cryptsetup isLuks /dev/sdb1验证该设备确实是 LUKS 格式 - 切勿对
/dev/mapper/xxx运行luksAddKey—— 会报错 “Device is not a valid LUKS device”
LUKS2 默认启用,但旧脚本可能默认用 LUKS1 参数
较新系统(如 RHEL 9、Kali 2024+、Debian 12+)默认创建 LUKS2 分区,但 cryptsetup luksFormat 若未显式指定 --type luks2,仍可能回退到 LUKS1。而 luksAddKey 在 LUKS2 上支持更多选项(如 --pbkdf argon2i),但兼容性没问题。
重点在于:无论 LUKS1 还是 LUKS2,luksAddKey 和 luksRemoveKey 都能正常工作。不需要额外加 --type 参数;但如果你明确知道是 LUKS2 且想优化 KDF 参数,可加 --pbkdf argon2id --iter-time 5000 提升抗暴力能力。
删密钥前务必验证新密钥可用
这是最容易翻车的环节:刚加完新口令就删旧口令,结果新口令输错一次没注意提示,删完才发现进不去。
安全做法是三步闭环:
- 运行
cryptsetup luksOpen /dev/sdb1 testmap,输入新口令,确认能成功映射 - 执行
ls /dev/mapper/testmap和cryptsetup status testmap验证状态 - 再运行
cryptsetup luksClose testmap,最后才cryptsetup luksRemoveKey /dev/sdb1删除旧口令
LUKS 密钥槽本身不存明文密码,只存派生密钥哈希。删掉一个槽不会影响其他槽,但删错唯一有效槽就真锁死了——没有恢复密钥或备份口令,基本只能重装。


















