分类: LINUX
2008-05-02 15:00:33
当Ubuntu Linux使用加密文件系统后,数据的安全能得到很好的保护。在这种情况下,即使把我们的机器送给黑客,只要他们没有密钥,黑客看到的数据只会是一堆乱码,毫无利用价值可言。
本文将详细介绍利用dm-crypt来创建加密文件系统的方法。与其它创建加密文件系统的方法相比,dm-crypt系统有着无可比拟的优越性:它的速度更快,易用性更强。除此之外,它的适用面也很广,能够运行在各种块设备上,即使这些设备使用了RAID和 LVM也毫无障碍。dm-crypt系统之所以具有这些优点,主要得益于该技术是建立在2.6版本内核的device-mapper特性之上的。 device-mapper是设计用来为在实际的块设备之上添加虚拟层提供一种通用灵活的方法,以方便开发人员实现镜像、快照、级联和加密等处理。此外, dm-crypt使用了内核密码应用编程接口实现了透明的加密,并且兼容cryptloop系统。
一、配置内核
dm -crypt利用内核的密码应用编程接口来完成密码操作。一般说来,内核通常将各种加密程序以模块的形式加载。对于256-bit AES来说,其安全强度已经非常之高,即便用来保护绝密级的数据也足够了。因此本文中我们使用256-bit AES密码,为了保证您的内核已经加载AES密码模块,请利用下列命令进行检查:
$ cat /proc/crypto |
name : aes module : aes type : cipher blocksize : 16 min keysize : 16 max keysize : 32 |
否则,我们可以利用modprobe来手工加载AES模块,命令如下所示:
$ sudo modprobe aes |
接下来安装dmsetup软件包,该软件包含有配置device-mapper所需的工具:
$ sudo apt-get install dmsetup cryptsetup |
$ ls -l /dev/mapper/control |
$ sudo modprobe dm-crypt |
$ sudo dmsetup targets |
crypt v1.1.0 striped v1.0.2 linear v1.0.1 error v1.0.1 |
这说明我们的系统已经为装载加密设备做好了准备。下面,我们先来建立一个加密设备。
二、建立加密设备
要创建作为加密设备装载的文件系统,有两种选择:一是建立一个磁盘映像,然后作为回送设备加载;二是使用物理设备。无论那种情况,除了在建立和捆绑回送设备外,其它操作过程都是相似的。
1.建立回送磁盘映象
如果你没有用来加密的物理设备(比如存储棒或另外的磁盘分区),作为替换,你可以利用命令dd来建立一个空磁盘映象,然后将该映象作为回送设备来装载,照样能用。下面我们以实例来加以介绍:
$ dd if=/dev/zero of=~/secret.img bs=1M count=100 |
$ sudo losetup /dev/loop/0 ~/secret.img |
2.设置块设备
准备好了物理块设备(例如/dev/sda1),或者是虚拟块设备(像前面那样建立了回送映象,并利用device-mapper将其作为加密的逻辑卷加载),我们就可以进行块设备配置了。
下面我们使用cryptsetup来建立逻辑卷,并将其与块设备捆绑:
$ sudo cryptsetup -y create myEncryptedFilesystem /dev/DEVICENAME |
$ sudo cryptsetup -y create myEncryptedFilesystem /dev/loop/0 |
$ sudo dmsetup ls |
myEncryptedFilesystem (221, 0) |
$ sudo mkfs.ext3 /dev/mapper/myEncryptedFilesystem |
$ sudo mkdir /mnt/myEncryptedFilesystem $ sudo mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem |
$ df -h /mnt/myEncryptedFilesystem Filesystem Size Used Avail Use% Mounted on /dev/mapper/myEncryptedFilesystem 97M 2.1M 90M 2% /mnt/myEncryptedFilesystem |
很好,我们看到装载的文件系统,尽管看起来与其它文件系统无异,但实际上写到/mnt/myEncryptedFilesystem /下的所有数据,在数据写入之前都是经过透明的加密处理后才写入磁盘的,因此,从该处读取的数据都是些密文。
三、卸载方法
要卸载加密文件系统,和平常的方法没什么两样:
$ sudo umount /mnt/myEncryptedFilesystem |
$ sudo cryptsetup remove myEncryptedFilesystem |
#!/bin/sh umount /mnt/myEncryptedFilesystem cryptsetup remove myEncryptedFilesystem |
/dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem ext3 noauto,noatime 0 0 |
#!/bin/sh cryptsetup create myEncryptedFilesystem /dev/DEVICENAME mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem |
#!/bin/sh losetup /dev/loop/0 ~/secret.img cryptsetup create myEncryptedFilesystem /dev/loop/0 mount /dev/mapper/myEncryptedFilesystem /mnt/myEncryptedFilesystem |
五、加密主目录
如果配置了PAM(Pluggable Authentication Modules,即可插入式鉴别模块)子系统在您登录时装载主目录的话,你甚至还能加密整个主目录。因为libpam-mount模块允许PAM在用户登录时自动装载任意设备,所以我们要连同openssl一起来安装该模块。命令如下所示:
$ sudo apt-get install libpam-mount openssl |
auth optional pam_mount.so use_first_pass |
session optional pam_mount.so |
现在,我们来设置PAM,告诉它需要装载哪些卷、以及装载位置。对本例而言,假设用户名是Ian,要用到的设备是/dev/sda1,要添加到/etc/security/pam_mount.conf文件中的内容如下所示:
volume Ian crypt - /dev/sda1 /home/Ian cipher=aes aes-256-ecb /home/Ian.key |
$ sudo sh -c "echo ' YOUR PASSPHRASE ' | openssl aes-256-ecb > /home/Ian.key" |
volume Ian crypt - /dev/sda1 /home/Ian cipher=aes - - |
CLOSE_SESSIONS yes |