【导读】本文将详尽介绍借助dm-crypt来创建加密文件系统的技巧。与其它创建加密文件系统的方法相比,dm-crypt系统有着无可比拟的优越性:它的速率更快,易用性更强。除此之外,它的适用面也很广,才能运行在各类块设备上,虽然这种设备使用了RAID和LVM也毫无障碍。
Linux使用加密文件系统后,数据的安全能得到挺好的保护。在这些情况下,虽然把我们的机器献给黑客,只要她们没有秘钥,黑客听到的数据只会是一堆乱码,毫无借助价值可言。
本文将详尽介绍借助dm-crypt来创建加密文件系统的方式。与其它创建加密文件系统的方式相比,dm-crypt系统有着无可比拟的优越性:它的速率更快,易用性更强。除此之外,它的适用面也很广,才能运行在各类块设备上,虽然这种设备使用了RAID和LVM也毫无障碍。dm-crypt系统之所以具有这种优点,主要得益于该技术是构建在2.6版本内核的device-mapper特点之上的。device-mapper是设计拿来为在实际的块设备之上添加虚拟层提供一种通用灵活的方式,以便捷开发人员实现镜像、快照、级联和加密等处理。此外,dm-crypt使用了内核密码应用编程插口实现了透明的加密linux 系统加密,但是兼容cryptloop系统。
一、配置内核
dm-crypt借助内核的密码应用编程插口来完成密码操作。通常说来,内核一般将各类加密程序以模块的方式加载。对于256-bitAES来说,其安全硬度早已十分之高,即使拿来保护机密级的数据也足够了。因而本文中我们使用256-bitAES密码,为了保证您的内核早已加载AES密码模块,请借助下述命令进行检测:
$cat/proc/crypto
假如见到类似下边的输出的话,说明AES模块早已加载:
name:aes
module:aes
type:cipher
blocksize:16
minkeysize:16
maxkeysize:32
否则,我们可以借助modprobe来手工加载AES模块,命令如下所示:
$sudomodprobeaes
接出来安装dmsetup软件包,该软件包含有配置device-mapper所需的工具:
$sudoapt-getinstalldmsetupcryptsetup
为检测dmsetup软件包是否早已构建了设备映象程序,键入下述命令:
$ls-l/dev/mapper/control
接出来加载dm-crypt内核模块:
$sudomodprobedm-crypt
dm-crypt加载后,它会用evice-mapper手动注册。假如再度检验的话,device-mapper已能辨识dm-crypt,但是把crypt添加为可用的对象:
$sudodmsetuptargets
假如一切顺利,如今你应当见到crypt的下述输出:
cryptv1.1.0
stripedv1.0.2
linearv1.0.1
errorv1.0.1
这说明我们的系统早已为装载加密设备做好了打算。下边,我们先来构建一个加密设备。
二、建立加密设备
要创建作为加密设备装载的文件系统,有两种选择:一是构建一个c盘映像,之后作为回送设备加载;二是使用数学设备。无论那个情况,不仅在构建和捆绑回送设备外,其它操作过程都是相像的。
1.构建回送c盘映象
假如你没有拿来加密的化学设备(例如储存棒或另外的c盘分区),作为替换,你可以借助命令dd来构建一个空c盘映象,之后将该映象作为回送设备来装载,照样能用。下边我们以实例来加以介绍:
$ddif=/dev/zeroof=~/secret.imgbs=1Mcount=100
这儿我们新建了一个大小为100MB的c盘映象,该映象名子为secret.img。要想改变其大小,可以改变count的值。
接出来,我们借助losetup命令将该映象和一个回送设备联系上去:
$sudolosetup/dev/loop/0~/secret.img
如今,我们早已得到了一个虚拟的块设备,其坐落/dev/loop/0,但是我们能否就像使用其它设备那样来使用它。
2.设置块设备
打算好了化学块设备(比如/dev/sda1),或则是虚拟块设备(像上面那样构建了回送映象linux删除命令,并借助device-mapper将其作为加密的逻辑卷加载),我们就可以进行块设备配置了。
下边我们使用cryptsetup来构建逻辑卷,并将其与块设备捆绑:
$sudocryptsetup-ycreatemyEncryptedFilesystem
/dev/DEVICENAME
其中,myEncryptedFilesystem是新建的逻辑卷的名称。而且最后一个参数必须是将用作加密卷的块设备。所以,假若你要使用上面构建的回送映象作为虚拟块设备的话,应该运行以下命令:
$sudocryptsetup-ycreatemyEncryptedFilesystem/dev/loop/0
无论是使用数学块设备还是虚拟块设备,程序就会要你输入逻辑卷的口令,-y的作用在于要你输入两次口令以确保无误。这一点很重要,由于一旦口令搞错,你都会把自己的数据锁住linux系统入门学习,这时谁也帮不了您了!
为了确认逻辑卷是否早已构建,可以使用下述命令进行检测一下:
$sudodmsetupls
只要该命令列举了逻辑卷,就说明早已成功构建了逻辑卷。不过按照机器的不同,设备号可能有所不同:
myEncryptedFilesystem(221,0)
device-mapper会把它的虚拟设备装载到/dev/mapper下边,所以,你的虚拟块设备应当是/dev/mapper/myEncryptedFilesystem,虽然用上去它和其它块设备没哪些不同,实际上它却是经过透明加密的。
就像化学设备一样,我们也可以在虚拟设备上创建文件系统:
$sudomkfs.ext3/dev/mapper/myEncryptedFilesystem
如今为新的虚拟块设备完善一个装载点,之后将其装载。命令如下所示:
$sudomkdir/mnt/myEncryptedFilesystem
$sudomount/dev/mapper/myEncryptedFilesystem/mnt/myEncryptedFilesystem
我们能否借助下边的命令查看其装载后的情况:
$df-h/mnt/myEncryptedFilesystem
FilesystemSizeUsedAvailUse%Mountedon
/dev/mapper/myEncryptedFilesystem97M2.1M90M2%/mnt/myEncryptedFilesystem
挺好,我们看见装载的文件系统,虽然看上去与其它文件系统无异,但实际上讲到/mnt/myEncryptedFilesystem/下的所有数据,在数据写入之前都是经过透明的加密处理后才写入c盘的,因而,从该处读取的数据都是些密文。
三、卸载方式
要卸载加密文件系统,和平时的方式没哪些两样:
$sudoumount/mnt/myEncryptedFilesystem
虽然早已卸载了块设备,在dm-crypt中依然视为一个虚拟设备。倘若不信,你可以再度运行命令sudodmsetupls来验证一下,你会看见该设备仍然会被列举。由于dm-crypt缓存了口令,所以机器上的其它用户不须要晓得口令才能重新装载该设备。为了防止这些情况发生linux 系统加密,你必须在卸载设备后从dm-crypt中显式的删掉该设备。命令具体如下所示:
$sudocryptsetupremovemyEncryptedFilesystem
随后,它将彻底消除,要想再度装载的话,你必须再度输入口令。为了简化该过程,我们可以借助一个简单的脚本来完成卸载和消除工作:
#!/bin/sh
umount/mnt/myEncryptedFilesystem
cryptsetupremovemyEncryptedFilesystem
四、重新装载
在卸载加密设备后,我们很可能还需作为普通用户来装载它们。为了简化该工作,我们须要在/etc/fstab文件中添加下述内容:
/dev/mapper/myEncryptedFilesystem/mnt/myEncryptedFilesystemext3noauto,noatime00
据悉,我们也可以通过构建脚本来替我们完成dm-crypt设备的创建和卷的装载工作,技巧是用实际设备的名称或文件路径来替换/dev/DEVICENAME:
#!/bin/sh
cryptsetupcreatemyEncryptedFilesystem/dev/DEVICENAME
mount/dev/mapper/myEncryptedFilesystem/mnt/myEncryptedFilesystem
假如你使用的是回送设备的话,你就能借助脚本来捆绑设备:
#!/bin/sh
losetup/dev/loop/0~/secret.img
cryptsetupcreatemyEncryptedFilesystem/dev/loop/0
mount/dev/mapper/myEncryptedFilesystem/mnt/myEncryptedFilesystem
假如你收到消息“ioctl:LOOP_SET_FD:Deviceorresourcebusy”,这说明回送设备很可能一直装载在系统上。我们可以借助sudolosetup-d/dev/loop/0命令将其删掉。
五、加密主目录
假如配置了PAM(PluggableAuthenticationModules,即可插入式鉴定模块)子系统在您登陆时装载主目录的话,你甚至能够加密整个主目录。由于libpam-mount模块容许PAM在用户登录时手动装载任意设备,所以我们要连同openssl一上去安装该模块。命令如下所示:
$sudoapt-getinstalllibpam-mountopenssl
接出来,编辑文件/etc/pam.d/common-auth,在其末尾添加下述一行:
authoptionalpam_mount.souse_first_pass
之后在文件/etc/pam.d/common-session末尾添加下述一行内容:
sessionoptionalpam_mount.so
如今,我们来设置PAM,告诉它须要装载什么卷、以及装载位置。对本例而言,假定用户名是Ian,要用到的设备是/dev/sda1,要添加到/etc/security/pam_mount.conf文件中的内容如下所示:
volumeIancrypt-/dev/sda1/home/Iancipher=aesaes-256-ecb/home/Ian.key
假如想使用c盘映象,你须要在此规定回送设备(例如/dev/loop/0),并确保在Ian登陆之前系统早已运行losetup。因此,你可以将losetup/dev/loop/0/home/secret.img装入/etc/rc.local文件中。由于该卷被加密,所以PAM须要秘钥来装载卷。最后的参数拿来告诉PAM秘钥在/home/Ian.key文件中,因此,通过使用OpenSSL来加密你的口令来构建秘钥文件:
$sudosh-c"echo
'
YOURPASSPHRASE
'
|opensslaes-256-ecb>
/home/Ian.key"
这时,提示你输入密码。注意,这儿的口令必需和想要的用户登入密码一致。缘由是当你登入时,PAM须要你提供这个密码,用以加密你的秘钥文件,之后按照包含在秘钥文件中的口令用dm-crypt装载你的主目录。
须要注意的是,这样做会把你的口令以明文的方式曝露在.history文件中,所以要及时利用命令history-c清楚你的历史记录。据悉,要想避开把口令储存在加密的秘钥文件中的话,可以让创建加密文件系统的口令和登陆口令完全一致。这样,在身分认证时,PAM只要把你的密码传给dm-crypt就可以了,而毋须从秘钥文件中抽取密码。因此,你可以在/etc/security/pam_mount.conf文件中使用下边的命令行:
volumeIancrypt-/dev/sda1/home/Iancipher=aes--
最后,为了保证在退出系统时手动卸载加密主目录,请编辑/etc/login.defs文件促使CLOSE_SESSIONS项配置如下:
CLOSE_SESSIONSyes
六、小结
数据加密是一种强而有力的安全手段,它能在各类环境下挺好的保护数据的绝密性。而本文介绍的UbuntuLinux下的加密文件系统就是一种十分有用的数据加密保护方法,相信它还能在保护数据绝密性相方面对您有所帮助。