Linux下利用LUKS对Ramdisk磁盘加密

Linux下利用LUKS对Ramdisk磁盘加密

​ 我知道对于Ramdisk的加密是没有意义并且很荒谬的,因为种种原因还是写了这篇文章,也算是把加密磁盘和Ramdisk的内容进行了汇总。

00 名词解释

a.Ramdisk

​ RAM磁盘也称为RAM驱动器。它是使用文件系统格式化的 RAM 的一部分。您可以将其挂载到 Linux 系统上的目录,并将其用作磁盘分区。

b.LUKS

​ LUKS(Linux Unified Key Setup)为linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果口令失密,我们可以迅速改变口令而无需重新加密真个硬盘。通过提供一个标准的磁盘上的格式,它不仅方便之间分布的兼容性,而且还提供了多个用户密码的安全管理。必须首先对加密的卷进行解密,才能挂载其中的文件系统。这个磁盘加密是最底层加密,如果强力去暴力破解,得到的结果就是文件损坏,将得不到自己想要得到的信息。(无法暴力破解)

01 创建Ramdisk

​ 第一种就是传统固定大小,需要指定文件系统并进行格式化的ramdisk,第二种是可变大小,直接使用VFS(Virtual file system, 虚拟文件系统)来操作文件而无需格式化的ramfs。第三种如同第二种的ramfs,但它能使用的空间不只限于RAM内,还可以使用交换分区(SWAP),称作tmpfs

以下将针对这三者分别介绍:

a.Ramdisk

​ ramdisk的配置存在于Linux的Kernel(内核),Linux缺省提供8个或16个ramdisk让用户挂载使用,每个ramdisk的路径可以使用以下指令来查看:

ls /dev/ram*

root@debian:~# ls /dev/ram*
/dev/ram0    /dev/ram1   /dev/ram11  /dev/ram13  /dev/ram15  /dev/ram3  /dev/ram5  /dev/ram7  /dev/ram9
/dev/ram10  /dev/ram12  /dev/ram14  /dev/ram2   /dev/ram4  /dev/ram6  /dev/ram8

​ 如果没看到/dev/ram相关设备,可能是因为你的Linux Kernel并没有加载brd(block ram disk)模块。可以运行sudo modprobe brd指令来加载。

​ 每个ramdisk默认的大小在不同的Linux系统上似乎都不太一样,但普遍不大,小于128MB,ramdisk的大小可以借由GRUB开机管理程序来设置Linux Kernel的参数来改变。可以使用文本编辑器打开/etc/default/grub,在GRUB_CMDLINE_LINUX中加入ramdisk_size参数,并设置ramdisk的大小的数值,以KB为单位。如果还有其他参数,以空隔分隔。如以下设置方式,可以让每个ramdisk拥有512MB的空间:

GRUB_CMDLINE_LINUX="ramdisk_size=512000"

​ 修改完毕后保存文件,再使用以下指令来更新GRUB。

sudo grub-mkconfig -o /boot/grub/grub.cfg

ramdisk必须要经过格式化之后来挂载使用,本文对磁盘加密用该方式进行,所以格式化和挂载在后面叙述。

**注意:**无论ramdisk是挂载还是卸载状态,一旦ramdisk经过格式化,就会占用掉文件系统所需的内存空间,如果有放置文件,会占用更多用来存放文件的内存空间。换句话说,ramdisk并不会在一开始格式化时就配置等量的内存空间,而是随着使用情况来慢慢增加。

b.ramfs

​ ramfs不像ramdisk那样一定得固定大小,在这里所讲的固定大小是指Linux缺省的16个ramdisk的大小都是固定的,用户可以自由挂载任意数量的ramfs,它们的大小会动态增长。且又因为ramfs是直接使用VFS(Virtual file system, 虚拟文件系统)来操作文件,因此无需格式化。

​ 如果要挂载ramfs,必须要使用一个目录,以/mnt/ramfs为例,先使用mkdir指令来创建目录:

mkdir /mnt/ramfs

​ 接着再使用mount指令来将ramfs挂载到/mnt/ramfs,可以使用以下指令:

 mount -t ramfs ramfs /mnt/ramfs

​ ramfs似乎是无法限制大小,请小心使用。

​ 卸载ramfs的方式和ramdisk一样,都可以使用umount指令,例如要卸载/mnt/ramfs目录:

sudo umount /mnt/ramfs

​ 卸载后,ramfs所占用的内存会自动释放出来。ramfs挂载的目录使用df指令无法正常显示,不太受控制,建议还是使用下面要提的tmpfs。

c.tmpfs

​ tmpfs和ramfs类似,只不过tmpfs还可以使用到交换分区(SWAP)的空间,这样就不用太担心tmpfs占用空间太大会使得RAM吃满造成系统出问题。

​ 1、如果要挂载tmpfs,必须要使用一个目录,以/mnt/tmpfs为例,先使用mkdir指令来创建目录:

sudo mkdir /mnt/ramdisk

​ 2、给这个目录足够的权限

sudo chmod 777 /mnt/ramdisk

​ 3、接着再使用mount指令来将tmpfs挂载到/mnt/tmpfs,可以使用以下指令:

sudo mount -t tmpfs myramdisk /mnt/ramdisk

​ 4、默认的tmpfs大小为总RAM的一半,如果要自订tmpfs的大小,可以加上-o size参数,例如以下将tmpfs指定为5GB:

sudo mount -t tmpfs -o size=5120m myramdisk /mnt/ramdisk

​ 6、检查是挂载成功

mount | tail -n 1

​ 7、卸载tmpfs的方式和ramdisk一样,都可以使用umount指令,例如要卸载/mnt/tmpfs目录:

umount /mnt/ramdisk

​ 8、可以使用以下指令来查看目前系统的挂载状况:

df -h -T

​ 如果tmpfs有放置文件,才会配置内存空间来存放文件。换句话说,tmpfs并不会在一开始挂载时就配置等量的内存空间,而是随着使用情况来慢慢增加。tmpfs似乎是使用内存的Cache空间,因此会造成tmpfs里明明就放置了愈来愈多的文件,但是系统所显示的可用内存量却没有减少,这点在使用tmpfs时需要注意。tmpfs所占掉的Cache空间,并不能够让其他进程拿去使用,也不会主动释放,除非将tmpfs内的文件删除,或是卸载tmpfs,才可以释放内存。

02 创建LUKS加密磁盘

1、创建RAM磁盘并划分分区

​ 使用以下命令创建一个大小为1GB的RAM磁盘**(对应01节的创建Ramdisk,如果已经创建好固定大小的ramdisk则第一条命令无需执行)**,然后在其上创建分区:

sudo modprobe brd rd_size=1048576

​ 使用fdisk /dev/ram0命令查看待分区磁盘,使用fdisk命令对该磁盘进行分区,分区可以根据自己情况在默认的16个分区选择,本次演示以ram0展示,命令如下:

sudo fdisk /dev/ram0

​ 选择m可以查看具体的操作

root@debian:~# fdisk /dev/ram0

Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): m

Help:

  DOS (MBR)
   a   toggle a bootable flag
   b   edit nested BSD disklabel
   c   toggle the dos compatibility flag

  Generic
   d   delete a partition
   F   list free unpartitioned space
   l   list known partition types
   n   add a new partition
   p   print the partition table
   t   change a partition type
   v   verify the partition table
   i   print information about a partition

  Misc
   m   print this menu
   u   change display/entry units
   x   extra functionality (experts only)

  Script
   I   load disk layout from sfdisk script file
   O   dump disk layout to sfdisk script file

  Save & Exit
   w   write table to disk and exit
   q   quit without saving changes

  Create a new label
   g   create a new empty GPT partition table
   G   create a new empty SGI (IRIX) partition table
   o   create a new empty DOS partition table
   s   create a new empty Sun partition table

​ 我们选择n,剩下的选择默认即可:

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-2097151, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2097151, default 2097151): 

​ 完成之后输入w进行保存

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
2、使用cryptsetup命令创建LUKS容器

​ 假设要将/dev/ram0p1分区加密并命名为myluksdisk(这个时候要输入大写的YES确认):(cryptsetup可以直接apt install)

sudo cryptsetup luksFormat /dev/ram0p1
3、打开LUKS容器以使其可用
sudo cryptsetup open /dev/ram0p1 myluksdisk
4、创建文件系统并挂载该磁盘
sudo mkfs.ext4 /dev/mapper/myluksdisk
sudo mkdir /mnt/myluksdisk
sudo mount /dev/mapper/myluksdisk /mnt/myluksdisk
5、进行读写操作并卸载磁盘
sudo touch /mnt/myluksdisk/test.txt
sudo umount -l /mnt/myluksdisk
sudo cryptsetup close myluksdisk

03 将docker运行在ramdisk

1、查找docker运行的目录

docker info | grep "Docker Root Dir"

2、停掉docker

systemctl stop docker

3、输出的结果进入到对应容器的目录

cd /var/lib/docker (这个是步骤一获取到的)
cd ..

4、移动容器内的内容到ramdisk

 mv docker/ /mnt/myluksdisk

5、与原始位置建立软连接

ln -s /mnt/myluksdisk/docker/  /var/lib/docker

6、启动docker

systemctl start docker

04、将mysql运行在内存中

1、下载

docker pull mysql:8.0.21

2、运行

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.21 

3、进入容器

docker exec -it xxx /bin/bash

4、登录,输入刚才的密码123456

mysql -u root -p

5、开启远程访问

use mysql;
grant all privileges on *.* to 'root'@'%';
flush privileges;
Linux下的磁盘加密技术有很多种,其中比较常用的是LUKSLinux Unified Key Setup)。LUKSLinux磁盘加密的一种标准,它可以对整个磁盘或者分区进行加密,保护数据的隐私性和安全性。 LUKS的工作原理是,在磁盘上创建一个加密容器,所有数据都保存在这个容器内部,容器本身是通过一个密钥进行加密的。在使用磁盘前,需要输入这个密钥进行解密,才能访问容器内部的数据。 下面是在Linux下使用LUKS磁盘进行加密的步骤: 1. 创建一个空的分区或整个磁盘,可以使用fdisk或parted命令进行分区操作。 2. 使用cryptsetup命令对分区或整个磁盘进行加密操作,如下所示: ```shell $ sudo cryptsetup luksFormat /dev/sda1 ``` 这个命令会提示输入加密密码,确认后会将/dev/sda1这个分区进行加密加密完成后需要使用下面的命令来打开该加密分区: ```shell $ sudo cryptsetup luksOpen /dev/sda1 my_encrypted_partition ``` 这个命令会提示输入加密密码,输入正确的密码后,会将/dev/sda1解密并挂载到/my_encrypted_partition目录下。 3. 格式化解密后的分区,可以使用mkfs.ext4或其他格式化命令: ```shell $ sudo mkfs.ext4 /dev/mapper/my_encrypted_partition ``` 4. 挂载解密后的分区: ```shell $ sudo mount /dev/mapper/my_encrypted_partition /mnt/my_encrypted_partition ``` 至此,整个加密分区已经成功挂载到/mnt/my_encrypted_partition目录下了。 5. 卸载并关闭加密分区: ```shell $ sudo umount /mnt/my_encrypted_partition $ sudo cryptsetup luksClose my_encrypted_partition ``` 以上就是使用LUKS磁盘进行加密的基本步骤。需要注意的是,在使用LUKS加密分区时,一定要妥善保管好加密密码,否则数据将无法访问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沈自在-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值