admin管理员组

文章数量:1575460

LUKS(Linux Unified Key Setup)为Linux硬盘分区加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。

Crypsetup工具加密的特点:

  • 加密后不能直接挂载
  • 加密后硬盘丢失也不用担心数据被盗
  • 加密后必须做映射才能挂载

本教程简单介绍,如何在ubuntu 虚拟机使用这玩意。
首先,LUKS的加密是基于分区的。 其次,首次建立加密分区的时候LUKS会对分区进行格式化,里面的数据会没得。
建立好加密分区后首先要启动 这个加密分区,启动的过程需要输入密钥解密。解密完成后,再使用mount命令将分区挂载到某个目录下。

为虚拟机添加新的分区

个人的机子上没有空闲的分区,于是就通过虚拟机设置往虚拟机加了一块硬盘,这块5GB的硬盘就是新加的。

然后重启设备。
使用fdisk查看 是否添加硬盘成功。

sudo fdisk -l


从上面可以看到这个新加的硬盘没有分区表,而且设备名是/dev/sdb,接下里,往/dev/sdb添加新的分区。建立主分区,只建立一个分区。

fdisk /dev/sdb


查看分区建立是否成功。

fdisk -l

建立加密分区

使用cryptsetup命令格式化这个新的分区,同时设置好访问密钥,例如 123456.

cryptsetup  luksFormat /dev/sdb1

需要输入一个大写的 YES,因为这个操作会把该分区原来的数据删除掉。

使用加密分区

加密分区需要先解密,然后再挂载。
使用cryptsetup luksOpen /dev/sdb1 luks_test ,最后一个参数指明把这个分区映射到那个名字上。

映射成功的话,会在/dev/mapper/文件夹看到相应的东西。

如果是第一次使用这个分区,需要给这个分区指定文件系统,例如ext4

再把这个设备挂载在想要的目录上。

自动解密和挂载

有的时候,LUKS需要频繁的输入密码,这是很让人心烦的。此时可以使用LUKS的自动解密功能。这其实就是使用LUSK的多解密方式来做的:同一个分区可以使用多个密钥来解密。 当然,猜测它里面的实现方法肯定是有一个master-key ,其它密钥最后转换为统一的master-key来解密的。

首先,需要生成一个密钥文件,密钥的内容、长度随机任意。例如:在根目录下生成一个随机数文件,然后把这个文件内容当做密钥。

可以修改它的权限,使得只有root可以读取它。

接下来,为/dev/sdb1这个加密分区添加新的密钥:
最后两个参数 /dev/sdb1 /keyfile 根据实际情况变化。

然后,编辑/etc/crypttab文件:
首先查看这个我们的加密分区/dev/sdb1的UUID号52bf64de-8113-40a2-bb62-0d729476be46,这个号后面有用到。

编辑/etc/crypttab 文件:
添加这么一行:

sdb1_crypt UUID=52bf64de-8113-40a2-bb62-0d729476be46 /keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

其中sdb1_crypt 是想要把这个加密分区映射到/dev/mapper/下的文件夹 名称、UUID是上步得到的一串数字、/keyfile是刚刚生成的密钥文件、luks,uks,keyscript=/lib/cryptsetup/scripts/passdev 固定 表示用passdev那个程序来自动输入密码。

最后,编辑/etc/fstab文件,添加一行:/dev/mapper/sdb1_crypt /data_crypt ext4 defaults 0 0,这一行的意思是告诉OS在加载文件系统的时候,完成从设备/dev/mapper/sdb1_crypt 到目录/data_crypt 的映射,映射的文件系统是ext4.

此时,大功告成了!
只差最后一步,更新系统的引导ram镜像,使用update-initramfs -u 即可。

最后,重启系统。

最后

值得一提的是,这个LUKS的自动解密的功能需要把密钥文件保存在非加密文件分区,这是不安全的。
如果是远程使用这个LUKS,还是建议不要自动解密和自动挂载。设置自动解密,密钥文件会有泄露的风险,设置自动挂载而不设置自动解密则需要开启之初,到达登录界面之前手输密码,在到达登录界面前 远程无法访问到系统。
因此,远程访问时,就啥时候使用加密分区就啥时候挂载。

本文标签: UbuntuLUKS