当前位置:网站首页 >  攻略

Linux系统LUKS磁盘加密全流程实操指南

时间:2026年06月13日 13:19:14 来源:易频IT社区

环境准备与工具安装

在开始操作之前,请确保你拥有一台运行Linux(Ubuntu 20.04/22.04或CentOS 7/8)的服务器或本地计算机,并且拥有一块未挂载数据可被覆盖的独立磁盘(本指南中以/dev/sdb为例)。操作将清空该磁盘上的所有数据,请务必提前确认磁盘设备名称无误。

LUKS(Linux Unified Key Setup)是Linux标准的磁盘加密规范。我们需要使用cryptsetup工具来完成所有操作。更新软件源并安装该工具:

对于基于Debian/Ubuntu的系统,请执行以下命令:

```bash sudo apt-get update sudo apt-get install -y cryptsetup ```

对于基于RHEL/CentOS的系统,请执行以下命令:

```bash sudo yum install -y cryptsetup ```

安装完成后,使用以下命令检查内核是否支持dm_crypt模块:

```bash sudo modprobe dm_crypt lsmod | grep dm_crypt ```

如果输出包含dm_crypt相关信息,说明环境准备就绪。

磁盘分区操作

在进行加密之前,通常需要先对磁盘进行分区。虽然可以直接加密整块原始磁盘,但创建分区是更规范的做法。这里使用fdisk工具对/dev/sdb进行分区:

```bash sudo fdisk /dev/sdb ```

进入交互界面后,按照以下步骤输入按键(注意:输入字母后按回车确认):

  1. 输入 m 并回车,查看帮助菜单(可选)。
  2. 输入 g 并回车,创建一个新的GPT分区表(这是现代标准)。
  3. 输入 n 并回车,添加一个新分区。
  4. 直接按回车,默认分区号为1。
  5. 直接按回车,默认使用第一个扇区。
  6. 直接按回车,默认使用最后一个扇区(使用整个磁盘)。
  7. 输入 p 并回车,打印分区表确认无误。
  8. 输入 w 并回车,将分区表写入磁盘并退出。

此时,系统已经识别出/dev/sdb1分区。我们可以使用lsblk命令查看:

```bash lsblk /dev/sdb ```

LUKS加密分区格式化

接下来是核心步骤:使用LUKS对分区/dev/sdb1进行加密格式化。此步骤将设置加密密码,该密码是解密数据的唯一钥匙,请务必牢记。

执行以下命令:

```bash sudo cryptsetup -y -v luksFormat /dev/sdb1 ```

参数详解:

  • -y:要求输入两次密码以验证一致性,防止手误。
  • -v:显示详细操作过程。
  • luksFormat:指定动作是对设备进行LUKS格式化。

执行命令后,系统会提示WARNING!,要求输入大写的YES确认操作,然后输入密码。请输入高强度密码(建议包含大小写字母、数字及特殊符号,长度至少16位)。输入完成后,工具会显示加密算法(默认为aes-xts-plain64)和密钥长度等信息。

为了验证加密是否成功,可以使用以下命令查看LUKS头信息:

```bash sudo cryptsetup luksDump /dev/sdb1 ```

映射加密设备与文件系统创建

加密后的分区不能直接存储文件,需要先将其“打开”(映射)为一个虚拟块设备。我们可以将/dev/sdb1映射为/dev/mapper/secure_data

执行映射命令:

```bash sudo cryptsetup luksOpen /dev/sdb1 secure_data ```

系统会提示输入之前设置的LUKS密码。验证成功后,映射设备/dev/mapper/secure_data即被创建。你可以通过ls -l /dev/mapper/查看。

现在,我们需要在这个映射设备上创建文件系统(例如ext4)。注意:文件系统是建立在解密后的透明层之上的。

```bash sudo mkfs.ext4 /dev/mapper/secure_data ```

该过程会格式化虚拟设备,输出格式化进度。完成后,该设备就可以像普通分区一样被挂载使用了。

挂载与权限配置

创建挂载点目录并将加密盘挂载:

```bash sudo mkdir -p /mnt/secure_data sudo mount /dev/mapper/secure_data /mnt/secure_data ```

使用df -h命令可以看到/mnt/secure_data已成功挂载。此时,写入/mnt/secure_data的任何数据都会在底层被实时加密存储。

Linux系统LUKS磁盘加密全流程实操指南

为了方便当前用户读写,建议修改目录所有者(将your_username替换为实际用户名):

```bash sudo chown your_username:your_username /mnt/secure_data ```

让我们进行一次简单的读写测试:

```bash echo "This is a top secret file." | sudo tee /mnt/secure_data/secret.txt cat /mnt/secure_data/secret.txt ```

如果能够正常读取内容,说明加密卷工作正常。

开机自动挂载配置(进阶)

默认情况下,重启后映射关系会丢失,需要手动输入密码挂载。如果需要开机自动挂载,需要配置/etc/crypttab/etc/fstab。由于这涉及将密码存储在服务器上(通常不推荐生产环境这样做,除非有TPM芯片),这里介绍手动输入密码开机挂载的标准配置方法。

获取分区的UUID(使用UUID比设备名更稳定):

```bash sudo blkid /dev/sdb1 ```

输出类似:/dev/sdb1: UUID="xxxx-xxxx" TYPE="crypto_LUKS"。记下这个UUID。

编辑/etc/crypttab文件:

```bash sudo nano /etc/crypttab ```

在文件末尾添加以下内容(字段之间用Tab或空格分隔):

```text secure_data UUID=xxxx-xxxx none luks ```

字段解释:

  • secure_data:映射名称,自定义。
  • UUID=xxxx-xxxx:替换为上一步查到的LUKS分区UUID。
  • none:表示密钥文件为无(即启动时询问密码口令)。
  • luks:指定设备类型。

保存并退出。接着编辑/etc/fstab以实现文件系统的自动挂载:

```bash sudo nano /etc/fstab ```

在文件末尾添加:

```text /dev/mapper/secure_data /mnt/secure_data ext4 defaults 0 2 ```

保存并退出。配置完成后,在下次重启时,系统启动过程会暂停并提示输入/dev/sdb1的密码,输入正确后会自动挂载到/mnt/secure_data

卸载与锁定

在使用完毕或需要维护时,安全地关闭加密卷至关重要。不要直接拔电或强制重启。

卸载文件系统:

```bash sudo umount /mnt/secure_data ```

如果提示“目标忙”,可以使用lsof /mnt/secure_data查看占用进程并关闭,或者使用sudo umount -l /mnt/secure_data进行懒卸载。

移除设备映射(锁定加密卷):

```bash sudo cryptsetup luksClose secure_data ```

执行后,/dev/mapper/secure_data消失,数据重新变为不可读的密文状态。

密钥管理补充

为了防止密码遗忘,LUKS支持添加多个密钥槽。你可以生成一个密钥文件作为备用解锁方式。

生成一个随机密钥文件:

```bash sudo dd if=/dev/urandom of=/root/secret_key bs=1024 count=1 sudo chmod 400 /root/secret_key ```

将此密钥文件添加到LUKS分区(需要输入原密码):

```bash sudo cryptsetup luksAddKey /dev/sdb1 /root/secret_key ```

以后,除了输入密码,你也可以使用该文件解锁:

```bash sudo cryptsetup luksOpen /dev/sdb1 secure_data --key-file /root/secret_key ``>

至此,你已经掌握了Linux系统下从磁盘分区、LUKS加密格式化、挂载使用到自动挂载配置及安全关闭的全套实操流程。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图