跳转至

cryptsetup加解密

cryptsetup 使用说明:磁盘加密与解密

简介:

cryptsetup 是一个用于管理 Linux 磁盘加密的命令行工具,它允许你创建加密卷,保护数据安全。 本文档将介绍 cryptsetup 的常用命令,以及使用密码和密钥文件进行加密和解密的方法。

重要提示:

  • 操作前,请务必备份重要数据,因为加密操作可能导致数据丢失。
  • 需要 root 权限或使用 sudo 执行大多数 cryptsetup 命令。
  • 务必妥善保管你的密码和密钥文件。 丢失它们将导致数据无法恢复。

基本命令:

命令 作用
cryptsetup luksFormat 初始化加密设备,创建 LUKS 加密容器。(也可用于忘记密码后的摧毁重建)
cryptsetup luksOpen 打开(解密)加密设备,将其映射到 /dev/mapper/ 下的虚拟设备。
cryptsetup luksClose 关闭(锁定)已打开的加密设备。
cryptsetup luksDump 查看 LUKS 设备的详细信息。
cryptsetup luksAddKey 添加新的密钥槽,用于添加备用密码或密钥文件。
cryptsetup luksRemoveKey 移除指定的密钥。
cryptsetup luksChangeKey 替换已有的密码。
cryptsetup status 列出设备信息.
cryptsetup --version 显示 cryptsetup 版本信息。

使用密码加密和解密:

  1. 初始化加密设备:

    sudo cryptsetup luksFormat /dev/sdX
    
    • /dev/sdX 是你要加密的块设备 (例如:/dev/sdb1)。
    • 此命令会提示你输入密码。 请选择一个强密码并牢记。
    • 打开加密设备:
    sudo cryptsetup luksOpen /dev/sdX <映射名称>
    
    • <映射名称> 是你为解密后的设备指定的名称 (例如: myvolume)。 解密后的设备将出现在 /dev/mapper/<映射名称>
    • 此命令会提示你输入密码。
    • 使用解密的设备:

    1
    2
    3
    sudo mkfs.ext4 /dev/mapper/<映射名称>   # 创建文件系统 (例如 ext4)
    sudo mkdir -p /mnt/myvolume       # 创建挂载点
    sudo mount /dev/mapper/<映射名称> /mnt/myvolume  # 挂载文件系统
    
    4. 关闭加密设备:

    sudo umount /mnt/myvolume
    sudo cryptsetup luksClose <映射名称>
    

使用密钥文件加密和解密:

  1. 生成密钥文件:

    1
    2
    3
    openssl rand -out /path/to/keyfile -aes-256 32
    chmod 400 /path/to/keyfile
    sudo chown root:root /path/to/keyfile
    
    • /path/to/keyfile 是密钥文件的路径 (例如:/root/secret.key)。
    • 强烈建议将密钥文件存储在安全的位置,并限制访问权限。
    • 使用密钥文件初始化加密设备:
    sudo cryptsetup luksFormat /dev/sdX --key-file /path/to/keyfile
    
  2. 使用密钥文件打开加密设备:

    sudo cryptsetup luksOpen /dev/sdX <映射名称> --key-file /path/to/keyfile
    
    4. 使用解密的设备: (同上,密码方式的步骤 3) 5. 关闭加密设备: (同上,密码方式的步骤 4)

混合使用密码和密钥文件:

可以同时使用密码和密钥文件来解锁加密设备。 首先使用密码初始化设备,然后添加密钥文件作为额外的解锁方式。

  1. 使用密码初始化加密设备: (同上,密码方式的步骤 1)
  2. 添加密钥文件作为密钥槽:

    sudo cryptsetup luksAddKey /dev/sdX --key-file /path/to/keyfile
    

    此命令会提示你输入密码来验证身份。

现在,你可以使用密码或密钥文件来解锁设备。

安全建议和最佳实践:

  • 密钥文件安全: 密钥文件的安全性至关重要。 请采取以下措施:
    • 权限控制: 确保只有授权的用户可以读取密钥文件 ( chmod 400 )。
    • 存储位置: 将密钥文件存储在安全的位置。不要将其存储在加密的设备本身上!
    • 备份: 备份密钥文件到多个安全位置。
    • 不要在脚本中硬编码密钥文件路径: 将路径作为参数传递,或者从环境变量中读取。
    • 删除不再需要的密钥文件: 安全删除,避免被恢复。 使用 shred 命令可以安全地覆盖文件内容。
  • 密码安全:
    • 选择强密码。 长度至少为 12 个字符,包含大小写字母、数字和符号。
    • 不要在多个地方使用相同的密码。
    • 定期更改密码。
  • 自动化脚本:
    • 在自动化脚本中,避免硬编码密码或密钥文件路径。 使用环境变量或配置文件。
    • 确保脚本以安全的方式处理密钥文件和密码。
    • 添加错误处理和日志记录。
  • 测试: 在生产环境中使用之前,请在测试环境中彻底测试加密和解密流程。
  • 更新: 保持 cryptsetup 和其他系统组件的更新,以确保你拥有最新的安全补丁。

示例脚本 (极其简化,需要根据实际情况修改):

#!/bin/bash

KEYFILE="/root/my_secret.key" # 更改为实际路径
DEVICE="/dev/sdb1"           # 更改为实际设备
MAPPED_NAME="myvolume"        # 更改为映射名称
MOUNT_POINT="/mnt/myvolume"  # 更改为挂载点

# 创建密钥文件
openssl rand -out "$KEYFILE" -aes-256 32
chmod 400 "$KEYFILE"

# 格式化设备 (小心!)
sudo cryptsetup luksFormat "$DEVICE" --key-file "$KEYFILE"

# 打开设备
sudo cryptsetup luksOpen "$DEVICE" "$MAPPED_NAME" --key-file "$KEYFILE"

# 创建文件系统并挂载
sudo mkfs.ext4 /dev/mapper/"$MAPPED_NAME"
sudo mkdir -p "$MOUNT_POINT"
sudo mount /dev/mapper/"$MAPPED_NAME" "$MOUNT_POINT"

# ... 进行操作 ...

# 卸载并关闭
sudo umount "$MOUNT_POINT"
sudo cryptsetup luksClose "$MAPPED_NAME"

echo "Done."