linux luks自动加密和挂载磁盘详解
作者:搬砖的梦先生
1、描述
cryptsetup是linux下的一个分区加密工具,它通过调用内核中的"dm-crypt"来实现磁盘加密的功能。
从安全的角度来看,对敏感数据进行加密以保护其免受窥探和黑客的攻击是很重要的。 Linux 统一密钥设置(Linux Unified Key Setup)(LUKS)是一个很好的工具,也是 Linux 磁盘加密的通用标准。因为它将所有相关的设置信息存储在分区头部中,所以它使数据迁移变得简单。
要使用 LUKS 配置加密磁盘或分区,我们需要使用 cryptsetup 工具。
使用cryptsetup对分区进行了加密后,这个分区就不再允许直接挂载。LUKS也是一种基于device mapper 机制的加密方案。如果要使用这个分区,必须对这个分区做一个映射,映射到/dev/mapper这个目录里去,我们只能挂载这个映射才能使用。然而做映射的时候是需要输入解密密码的。
2、创建加密磁盘分区
例如:我们现在对现有的 /home目录进行加密
执行lsblk ,我们可以看到home目录对应的磁盘是sda3,全路径即是:/dev/sda3
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 477G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot ├─sda3 8:3 0 397.7G 0 part /home ├─sda4 8:4 0 70G 0 part / └─sda5 8:5 0 7.7G 0 part [SWAP] sdb 8:16 1 7.5G 0 disk └─sdb1 8:17 1 7.5G 0 part
我们需要去umount home目录
umount 可能报错:目录繁忙。
解决方案:关闭正在执行的任务,任何执行目录、存储目录涉及到home的任务。
$ umount /home
再次执行lsblk ,我们可以看到磁盘sda3的挂载home没有了
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 477G 0 disk ├─sda1 8:1 0 600M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot ├─sda3 8:3 0 397.7G 0 part ├─sda4 8:4 0 70G 0 part / └─sda5 8:5 0 7.7G 0 part [SWAP] sdb 8:16 1 7.5G 0 disk └─sdb1 8:17 1 7.5G 0 part
3、luks加密
安装加密软件,一般服务器自带
$ yum install cryptsetup -y
cryptsetup [其他参数] luksFormat 需要加密的磁盘
常用参数:
| 参数名称 | 描述 |
|---|---|
| –cipher | 加密方式 |
| –key-size | 密钥长度 |
| –hash | 散列算法 |
| –iter-time | 迭代时间,单位为毫秒。值越大,暴力 破解越难,打开加密盘的时间也越久 |
我们这里使用默认值,执行的过程中,命令会警告你将会清除磁盘上的所有数据,并要求你输入两次密码
注意:下面的YES必须输入大写的
$ cryptsetup luksFormat /dev/sda3 WARNING! ======== 这将覆盖 /dev/sda3 上的数据,该动作不可取消。 Are you sure? (Type 'yes' in capital letters): YES 输入 /dev/sda3 的口令: 确认密码:
4、打开luks加密盘
命令如下:
cryptsetup 加密类型Open 加密磁盘 映射名称
执行该命令后就会将 /dev/sda3 解密,并映射成 /dev/mapper/home
$ cryptsetup luksOpen /dev/sda3 home 输入 /dev/sda3 的口令:
5、操作和配置luks加密盘
## 在加密的分区上创建一个 XFS 文件系统 $ mkfs.xfs /dev/mapper/home $ mount /dev/mapper/home /home $ touch /mnt/secret
6、开机自动解密和挂载加密盘
生成随机字符串,熵越大越好
$ dd if=/dev/urandom bs=1 count=1024 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev HFqidAwFgdivQ6HEKNjcXQqTrynvfN/xQiicdR2TOgGEpRhqIqF8cS7Iwid6Y/3BO697gv0KM/0iJFQLQ7YNLneqdYJwKlPhRMQnnEHroRluU30H5XfyqXnxFDTjYSJ0mA459QO4Zj7PM7klsAydwI8Umf+muMhkC9V69DepzIYZmzzdPIlAxB2r0aSJ6CILjaTsU4HD8Q7Vy1luGMrYpCHiWTB1vtRbI6UeElylnkWh3vqxQJd/lGG2v3L2er7i1ag3u5STsfd6XjDEzuHwfkBmE91tpH48OoS+/D6V9I8bqrF+q2EQlnOFuWVBOldGlG52UPYRvuF7HiznzEoOqa+MA8mK+R0foLss3hmpq1wqKjkIeFxQpW69acAgvO3yF8AMaxvYd3WlFP4ZBtq400pYC470ZEhbJYWK8HKvQlo2tb2Z5z5beF+IWiY0ejqmgjIjH9px6u94PqHCooy92duihTZdGEYw9RfcahDoouliikR1uG2jYI9CxiFRxVRn1MMcuI2yg87kjIk5eqSt0glJxvEjudDORHvpGeamSHqeZ6KvcYVEFrml1leDKJWIbF8bwk3TxwYB/vw74FUZ9gHIM25T+KgfwsGMYsrVh0TcweCkuEwSX4RSmY6/pILrLx/RXyWbvOjlA+PjVz1id5JWtF57+jEYwIVomPniBXKrh8YAjqduPr1dCNzetf6N1OAR5P5CzDok5W6QrHdazUZ2XzD8TD0CysKBsEorv8csOEnrT6wEi5HfNVyWBndoNQOtVzroB8CAAZB0hZYC9OEMop9GVChWgRkUA/Pd0MjYTahR7p9r1plvPPcv13zADXWPZNRTM4roM2XoJt7qpfCpgpDbQlmE7uPrmy612o+z6RMg18PC7+6oaSHsy7ATb4qpg5mNcoGEUfBCdZchnymygIAsHzn3+wlm+cpgK1X/DHNrWsUmwRZbAWg7PQIS1qeyM70uLZ8KlLgHUJWY9WeqMJpnHL6ln156iOERppfBW+N5JJZrvfPxYUa8oVc0epk/ZIabQ+sWBF4odav2psLAB94haC3WXU8OqKWZrggi8/HK4mCc0INPrOEmNXRQtl76sMYsqlRzcJQxD/kjz5VTqjHk4Zhr90Kf0GW46uXu9epLo0uSDev/toSUgxvBp8QN6SBpxfUcHqjlY5tpxrNIuFK0ZwiYGQAfynhrLWymVNoD8hoQoE9IFC57Yk+iqdOrCK1Tac6rMns6bcxakSovHvpsThfwuY7qJhrcCm1zx5WRCriRjj7vYEuE6LPent+lY2v9ImcJX9SE1MjuTyQXKwVrQehBvpJ76VZ35PAldoQR5vSN86mGmnhnZ4uRyMgPh4RfuKqR0C5WzBWOeA=
将随机内容写入到一个文件,并设置文件权限,只允许 root 读写
$ vim /root/luks_pass $ chmod 600 /root/luks_pass
设置开机自动解密 luks 分区:
$ vim /etc/crypttab # <name> <device> <password> <options> home /dev/sda3 /root/luks_pass
把密码添加到luks加密中,这一步必须执行才能使密码生效:
$ cryptsetup luksAddKey /dev/sda3 /root/luks_pass 输入任意已存在的口令:
注释老的home自动挂载,设置新的 home 自动挂载点:
$ vim /etc/fstab # # /etc/fstab # Created by anaconda on Tue Jun 20 10:39:43 2023 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # UUID=715d159b-2612-439d-8da9-4f003aebe3be / xfs defaults 0 0 UUID=fbbb9210-1b17-485b-b95d-5e550e3b7be8 /boot xfs defaults 0 0 UUID=D918-3920 /boot/efi vfat umask=0077,shortname=winnt 0 2 # 注释掉老的home挂载信息 # UUID=7ee7cabf-8627-46b0-b40c-2c329926e775 /home xfs defaults 0 0 UUID=de06acc9-4238-4de4-bc67-b754c2c0e993 none swap defaults 0 0 #配置新的home挂载信息 /dev/mapper/home /home xfs defaults 0 0 ~
7、查看加密盘
$ cryptsetup status home /dev/mapper/home is active. type: LUKS2 cipher: aes-xts-plain64 keysize: 512 bits key location: keyring device: /dev/sda3 sector size: 512 offset: 32768 sectors size: 833939456 sectors mode: read/write
8、关闭加密盘
$ umount /mnt $ cryptsetup close home
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
