`
天海浪人
  • 浏览: 35579 次
  • 性别: Icon_minigender_1
  • 来自: 济南
最近访客 更多访客>>
社区版块
存档分类
最新评论

ubuntu文件加密

阅读更多

    

 
 

 

    当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-crypt

 

dm-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 下的加密文件系统就是一种非常有用的数据加密保护方式,相信它能够在保护数据机密性相方面对您有所帮助。

 

 

<本文转载自chinaitlab:玩转Ubuntu Linux之加密文件系统篇>

分享到:
评论

相关推荐

    Toxi / Oxy Pro 便携式气体检测仪参考手册 使用说明书

    Toxi Oxy Pro 便携式气体检测仪参考手册 使用说明书

    科傻模拟网优化操作-教程书

    官方的的说明书资料,部分视频说明在这里: https://www.bilibili.com/video/BV1Fz4y1d7rn/?spm_id_from=333.999.0.0&vd_source=13dc65dbb4ac9127d9af36e7b281220e

    node-v8.14.0-x64.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    2023商业银行数据资产体系白皮书,主要介绍了“三位一体”数据资产体系的构成与工作机制,以及商业银行数据资产体系建设实践

    2023商业银行数据资产体系白皮书 目录 第 1 章 数据资产化与数据要素市场化相辅相成,相互促进 第 2 章 数据资产化是企业数据治理向上演进的必经之路 第 3 章 数据资产体系发展概述 第 4 章 “三位一体”数据资产体系的构思 4.1“三位一体”数据资产体系的构成与工作机制 数据资产管理 数据资产运营 数据资产评价 数据资产体系工作机制 4.2“三位一体”数据资产体系的相互作用关系 4.3“三位一体”数据资产体系的构建 4.4“三位一体”数据资产体系的优势 第 5 章 商业银行数据资产体系建设实践 5.1商业银行开展数据资产体系建设的背景和目标 5.2商业银行数据资产体系建设的工作步骤 5.3上海银行数据资产体系建设实践的主要成果 第 6 章 数据要素流通市场赋能企业数据资产化 6.1全国多层次数据要素市场的建设 6.2上海数据交易所赋能企业数据资产化 6.3数据要素流通交易市场赋能企业数据资产化的展望 第 7 章 未来演进与展望

    基于微信小程序的助农扶贫小程序

    大学生毕业设计、大学生课程设计作业

    车辆销售数据Python爬取并做数据分析,项目源码注解清晰一看就懂.zip

    车辆销售数据Python爬取并做数据分析,项目源码注解清晰一看就懂

    毕业设计:基于SSM的mysql-学生社团管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_学生社团管理系统(源码 + 数据库 + 说明文档) 第2章 主要技术和工具介绍 1 2.1 JSP语言 1 2.2 MySQL数据库 1 2.3 jsp技术 2 2.4ssm简介 3 第3章 系统分析 1 3.1可行性分析 1 3.1.1经济可行性 1 3.1.2技术可行性 1 3.1.3操作可行性 1 3.2需求分析 1 3.3业务流程分析 2 3.4数据流程分析 3 第4章 系统设计 5 4.1系统结构设计 5 4.2功能模块设计 5 4.3数据库设计 6 4.3.1数据库设计概述 6 4.3.1概念设计 6 4.3.2表设计 7 第5章 系统实现 15 5.1基本任务 15 5.2登录模块的实现 15 5.2.1首页实现 15 5.2.2管理员后台登录 16 5.3用户模块的实现 19 5.3.1注册模块及登录的实现 19 5.2.2入团模块的实现 21 5.2.3场地预约模块的实现 22 5.4管理员模块的实现 24 5.4.1系统用户管理模块的实现 24 5.4.2活动公告管理模块的实现 26 5.5社团模块的实现 28 5.5.1活动信息

    大健康零售业务O2O数字化战略规划方案.pptx

    大健康零售业务O2O数字化战略规划方案.pptx

    数据中台项目主要岗位及其职责和任务

    数据中台项目主要岗位及其职责和任务

    node-v8.0.0-linux-armv7l.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    流程制造行业数字化智能工厂总体规划建设方案.pptx

    流程制造行业数字化智能工厂总体规划建设方案.pptx

    c语言学生成绩管理系统源码.zip

    c语言学生成绩管理系统源码.zip

    DEV-C++-5.11下载链接

    DEV-C++-5.11下载链接

    电器租赁小程序.zip

    电器租赁小程序.zip

    学生成绩管理系统 数据结构与算法课程设计 C++.zip

    学生成绩管理系统 数据结构与算法课程设计 C++

    知乎小程序算法.zip

    知乎小程序算法.zip

    基于R语言SIR传染病传播的SIR模型,很全,可直接应用仿真模拟.rar

    基于R语言SIR传染病传播的SIR模型,很全,可直接应用仿真模拟.rar

    node-v6.13.0.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v10.11.0-darwin-x64.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    项目申报系统(Struts2+Spring+Hibernate+Jsp+Mysql5).zip

    广东工业大学工程管理

Global site tag (gtag.js) - Google Analytics