cryptsetup文件系统加密

 

今天做了SYC攻防题的文件系统挂载部分,在找到挂载最内层的final文件时发现mount无法识别,这也许就是一个加密的文件系统吧,还好~在龟速的 网络环境下查阅到了losetup循环挂载系统命令,但是有关这个命令网络上我能查到的资料实在太少太少,于是就只好寻求man的帮助,实验一番后毫无所 获,再次查看manul,看到其中提了另一个工具cryptsetup,就是它了,一个及其强大的命令,再次查阅了一部分资料,成功挂在了final文件 系统找到了key.
附上cryptsetup的参考资料,确实非常强大
http://www.sudu.cn/info/html/edu/20080425/300892.html
横线内的内容转自以上网站
==============================================
当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如果看到类似下面的输出的话,说明AES模块已加载:
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为检查dmsetup软件包是否已建立了设备映象程式,键入下列命令:
$ ls -l /dev/mapper/control接下来加载dm-crypt内核模块:
$ sudo modprobe dm-cryptdm-crypt加载后,他会用evice-mapper自动注册。如果再次检验的话,device-mapper已能识别dm- crypt,并且把crypt 添加为可用的对象:
$ sudo dmsetup targets如果一切顺利,目前你应该看到crypt的下列输出:
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这里我们新建了一个大小为100 MB的磁盘映象,该映象名字为secret.img。要想改动其大小,能改动count的值。               
接下来,我们利用losetup命令将该映象和一个回送设备联系起来:
$ sudo losetup /dev/loop/0 ~/secret.img目前,我们已得到了一个虚拟的块设备,其位于/dev/loop/0,并且我们能够如同使用其他设备那样来使用他。
2.设置块设备
准备好了物理块设备(例如/dev/sda1),或是虚拟块设备(像前面那样建立了回送映象,并利用device-mapper将其作为加密的逻辑卷加 载),我们就能进行块设备设置了。
下面我们使用cryptsetup来建立逻辑卷,并将其和块设备捆绑:
$ sudo cryptsetup -y create myEncryptedFilesystem   /dev/DEVICENAME   其中,myEncryptedFilesystem 是新建的逻辑卷的名称。并且最后一个参数必须是将用作加密卷的块设备。所以,如果你要使用前面建立的回送映象作为虚拟块设备的话,应当运行以下命令:

$ sudo cryptsetup -y create myEncryptedFilesystem  /dev/loop/0无论是使用物理块设备还是虚拟块设备,程式都会要你输入逻辑卷的口令,-y的作用 在于要你输入两次口令以确保无误。这一点非常重要,因为一旦口令弄错,你就会把自己的数据锁住,这时谁也帮不了你了!
为了确认逻辑卷是否已建立,能使用下列命令进行检查一下:
$ sudo dmsetup ls只要该命令列出了逻辑卷,就说明已成功建立了逻辑卷。不过根据机器的不同,设备号可能有所不同:
myEncryptedFilesystem  (221, 0)device-mapper会把他的虚拟设备装载到/dev/mapper下面,所以,你的虚拟块设备应该是/dev/mapper /myEncryptedFilesystem ,尽管用起来他和其他块设备没什么不同,实际上他却是经过透明加密的。
如同物理设备相同,我们也能在虚拟设备上创建文件系统:
$ 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即便已卸载了块设备,在dm-crypt中仍然视为一个虚拟设备。如若不信,你能再次运行命令 sudo dmsetup ls来验证一下,你会看到该设备依然会被列出。因为dm-crypt缓存了口令,所以机器上的其他用户不必知道口令就能重新装载该设备。为了避免这种情况 发生,你必须在卸载设备后从dm-crypt中显式的删除该设备。命令具体如下所示:
$ sudo cryptsetup remove myEncryptedFilesystem此后,他将完全清除,要想再次装载的话,你必须再次输入口令。为了简化该过程,我们能利用一个简单的脚本来完 成卸载和清除工作:
#!/bin/sh
umount /mnt/myEncryptedFilesystem
cryptsetup remove myEncryptedFilesystem
四、重新装载

在卸载加密设备后,我们非常可能还需作为普通用户来装载他们。为了简化该工作,我们需要在/etc/fstab文件中添加下列内容:
/dev/mapper/myEncryptedFilesystem  /mnt/myEncryptedFilesystem  ext3 noauto,noatime 0 0此外,我们也能通过建立脚本来替我们完成dm-crypt设备的创建和卷的装载工作,方法是用实际设备的名称或文件路径来替换/dev /DEVICENAME:
#!/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如果你收到消息 “ioctl: LOOP_SET_FD: Device or resource busy”,这说明回送设备非常可能仍然装载在系统上。我们能利用sudo losetup -d /dev/loop/0命令将其删除。
五、加密主目录
如果设置了PAM(Pluggable Authentication Modules,即可插入式鉴别模块)子系统在你登录时装载主目录的话,你甚至还能加密整个主目录。因为libpam-mount模块允许PAM在用户登 录时自动装载任意设备,所以我们要连同openssl一起来安装该模块。命令如下所示:
$ sudo apt-get install libpam-mount openssl接下来,编辑文件/etc/pam.d/common-auth,在其末尾添加下列一行:
auth    optional        pam_mount.so use_first_pass然后在文件/etc/pam.d/common-session末尾添加下列一行内容:
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如果想使用磁盘映象,你需要在此规定回送设备(比如/dev/loop/0),并确保在Ian登录之前系统已运行 losetup。为此,你能将 losetup /dev/loop/0 /home/secret.img放入/etc/rc.local文件中。因为该卷被加密,所以PAM需要密钥来装载卷。最后的参数用来告诉PAM密钥在 /home/Ian.key文件中,为此,通过使用OpenSSL来加密你的口令来建立密钥文件:
$ sudo sh -c "echo

YOUR PASSPHRASE

| openssl aes-256-ecb >
/home/Ian.key"这时,提示你输入密码。注意,这里的口令必需和想要的用户登录密码一致。原因是当你登录时,PAM需要你提供这个密码,用以 加密你的密钥文件,然后根据包含在密钥文件中的口令用dm-crypt装载你的主目录。
需要注意的是,这样做会把你的口令以明文的形式暴露在.history文件中,所以要及时利用命令history -c清晰你的历史记录。此外,要想避免把口令存放在加密的密钥文件中的话,能让创建加密文件系统的口令和登录口令完全一致。这样,在身份认证时,PAM 只要把你的密码传给dm-crypt就能了,而不必从密钥文件中抽取密码。为此,你能在/etc/security/pam_mount.conf文件中 使用下面的命令行:
volume Ian crypt - /dev/sda1 /home/Ian cipher=aes - -最后,为了确保在退出系统时自动卸载加密主目录,请编辑/etc/login.defs文件使得CLOSE_SESSIONS项设置如下:
CLOSE_SESSIONS yes
六、小结
数据加密是一种强而有力的安全手段,他能在各种环境下非常好的保护数据的机密性。而本文介绍的Ubuntu Linux 下的加密文件系统就是一种非常有用的数据加密保护方式,相信他能够在保护数据机密性相方面对你有所帮助。

一、cryptsetup文件系统加密的更多相关文章

  1. cryptsetup文件系统加密

    今天做了SYC攻防题的文件系统挂载部分,在找到挂载最内层的final文件时发现mount无法识别,这也许就是一个加密的文件系统吧,还好-在龟速的 网络环境下查阅到了losetup循环挂载系统命令,但是 ...

  2. 移动设备如何打开RMS加密的文档

    关键字:RMS. AZure RMS.IPhone.Android.Office365.Sharepoint.Exchange 最近总是碰到要求用苹果手机及安卓手机阅读RMS加密文档的需求,经过查找相 ...

  3. hadoop 透明加密

    hadoop 透明加密 hadoop 透明加密 kms transparent 2015年04月09日 18:12:20 糖糖_ 阅读数:12248 标签: transparenthadoop kms ...

  4. Which cryptsetup

    Which cryptsetup Rpm –qf ‘which cryptsetup’ 安装加密工具: 设置加密分区 Crptsetup luksFormat Echo –n “xuegod123”  ...

  5. 配置kali linux

    在7月底的时候,安全加介绍Fireeye出品的 免费恶意软件分析工具FlareVM,还可进行逆向工程和渗透测试 .今天是看到绿盟科技的一篇介绍Kali Linux配置的文章,这个工具也进入了 渗透测试 ...

  6. 基于AWS的云服务架构最佳实践

    ZZ from: http://blog.csdn.net/wireless_com/article/details/43305701 近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关 ...

  7. Mac OS X 背后的故事

    Mac OS X 背后的故事 作者: 王越  来源: <程序员>  发布时间: 2013-01-22 10:55  阅读: 25840 次  推荐: 49   原文链接   [收藏]   ...

  8. H2的MVStore

    翻译自http://www.h2database.com/html/mvstore.html 转载请著名出处,及译者信息. 第一次翻译,诸多不妥请谅解,谢谢. 概述 MVStore是一个持久化的.日志 ...

  9. Windows8 各种版本区别对比详解

    微软的 Windows8 操作系统提供了4个不同的版本,分别是 Windows RT.Windows 8 标准版.Windows 8 Pro 专业版 以及 Windows 8 Enterprise 企 ...

随机推荐

  1. ASP.NET Web API2返回值处理流程

    关于WebApi2控制器方法的四种返回类型请参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/getting-start ...

  2. GET与POST类型接口

    工作当中经常用到这两种类型的接口,一直对它们两个的区别一知半解,并不能从原理上说出区别. GET和POST最直观的区别应该就是GET将url包含在参数当中,POST通过request body(请求主 ...

  3. Django配置404页面

    一.settings配置 1.首先需要在settings中将DEBUG由原来的True改为False DEBUG = False 2.需要设置 ALLOWED_OSTS = ["*" ...

  4. HTTP状态码表

    HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码.所有状态码的第一个数字代表了响应的五种状态之一. 1xx消息 这一类型的状态码,代表请求已被 ...

  5. SQL拼接字符串时单引号转义问题 单引号转义字符

    要拼接一个单引号到已有字符串前后, 开始以为(错误)可以用  \ 转义,如下: '\''+ str+'\'' 看颜色就知道是不行的. 正确方法是两个单引号就转义为单引号,如下: ''''+str+'' ...

  6. pycharm设置主题

    步骤很简单: 1.下载皮肤主题(jar) 去 http://www.themesmap.com/ 选择自己喜欢的主题下载 2.导入皮肤主题 导入方法:file–>Import Setting–& ...

  7. kubeadm的安装步骤(HA)

    准备3台主节点:km1/km2/km3 1.编辑kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfigur ...

  8. mongoDB 集合(表)操作

    mongoDB 集合(表)操作 集合命名规则 使用 utf8 字符(通常不会起中文名字) 不能含有 "\0" 字符 不要以 system. 开头(否咋会覆盖系统集合开头) 不要和关 ...

  9. 帝国CMS Table '***.phome_ecms_news_data_' doesn't exist

      帝国CMS刷新内容页出现以下错误 1 Table 'www.536831.com.phome_ecms_news_data_' doesn't exist select keyid,dokey,n ...

  10. filebeat+logstash配置

    一. filebeat.yml的配置 filebeat.prospectors:- input_type: log paths: - /tmp/logs/optimus-activity-api.lo ...