`
天海浪人
  • 浏览: 36202 次
  • 性别: 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之加密文件系统篇>

分享到:
评论

相关推荐

    Ubuntu Linux之加密文件系统篇

    在Ubuntu Linux中,加密文件系统是保护数据隐私和安全的重要手段。本文主要讲解了如何使用dm-crypt技术创建加密文件系统。dm-crypt是Linux内核2.6版本引入的一个特性,它基于device-mapper,这是一个允许在底层块...

    ubunru系统文件加密方法

    ### Ubuntu系统文件加密方法详解 #### 一、引言 在Ubuntu系统中,为了保护敏感数据的安全性,文件加密是一项非常重要的技术。本文主要介绍如何使用GnuPG(GPG)这一强大的开源加密工具来进行文件加密与解密操作。...

    Ubuntu20.04.iso光盘镜像源文件

    这个ISO光盘镜像文件是安装该系统的必备工具,它包含了完整的Ubuntu 20.04系统环境和所有必要的软件包。通过下载此镜像文件,用户可以创建安装媒体,如CD、DVD或USB驱动器,然后在个人计算机上安装Ubuntu系统。 ...

    LUKS硬盘加密

    LUKS 硬盘加密 LUKS(Linux Unified Key Setup)是 Linux 硬盘加密的标准,它提供了一种通用的加密解决方案,支持多用户和多口令管理。LUKS 加密方法可以在不同的 Linux 发行版本中使用,提供了加密磁盘的格式标准...

    DES.rar_linux ubuntu 编译_linux 加密

    在本文中,我们将深入探讨如何在Ubuntu Linux操作系统中利用GCC编译器进行程序开发,并实现DES(Data Encryption Standard)加密算法。DES是一种广泛使用的对称密钥加密算法,用于保护数据的安全性。以下是对这个...

    加密锁驱动

    ".exe"扩展名表明这是一个可执行文件,用户可以通过运行这个程序来安装或更新加密锁的驱动。 加密锁驱动的工作原理通常是这样的:当加密锁插入计算机的USB端口,驱动程序会识别并与其通信,验证授权信息。如果信息...

    ubuntu文档

    4. **命令行操作**:Ubuntu文档会详细介绍Linux命令行基础,包括文件和目录管理、权限控制、进程管理以及使用`bash` shell的高级技巧。 5. **硬件兼容性**:理解如何确保Ubuntu与你的硬件设备(如打印机、扫描仪、...

    ubuntu_16_ansible.tar.gz

    这些文件共同构成了Ansible在Ubuntu 16.04上运行所需的完整环境,包括语言环境、基础库、加密库、网络通信和认证支持等。离线安装包的创建者已经确保了这些组件之间的正确依赖关系,使得用户可以方便地在没有网络的...

    PGP加密软件

    标题中的"PGP加密软件"指的是这款用于文件和通信加密的工具,它允许用户在发送敏感信息时确保数据的私密性。 **PGP的工作原理** PGP使用了一种称为公钥加密的技术。每个用户都有一个公钥和一个私钥。公钥是公开的...

    Ubuntu系统ssh安装与连接以及sftp文件传送全攻略

    ### Ubuntu系统ssh安装与连接以及sftp文件传送全攻略 #### 一、SSH与SFTP基础知识 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。它可以在不安全的网络环境中提供安全的远程登录服务。SFTP...

    ubuntu 20.04 ssh离线安装包

    9. **libgcrypt20_1.8.5-5ubuntu1_amd64.deb**:Gnu Crypto库,用于加密功能,SSH服务的加密部分可能用到。 10. **openssh-server_8.2p1-4_amd64.deb**:SSH服务器,允许远程用户通过SSH协议安全地访问系统。 在...

    C++编写的数据加密程序源代码(6个)

    C++编写的数据加密程序源代码(6个):CRC32校验、DES加密、MD5算法、rsa数字签名、RSA演示、简单移位

    绿盾文件加密软件V1

    用于文件加密,绿盾文件加密软件V1.870616.rar

    Ubuntu The Complete Reference

    - **加密技术应用**:利用 GPG (GNU Privacy Guard) 对文件进行加密,保障数据安全。 #### 9. Ubuntu 应用程序介绍 - **办公软件**:LibreOffice 是一款强大的办公套件,提供文字处理、电子表格等功能。 - **图形...

    linux 脚本加密文件

    "Linux 脚本加密文件"涉及到一个名为`shc`的实用程序,它允许我们将bash shell脚本转换为加密的可执行二进制文件,从而增加了一层安全防护。 `shc`(Shell Script Compiler)是一个用于将shell脚本转换为加密二进制...

    ubuntu18.4.3本地源签名加密制作成功图文教程.rar

    本教程将详细讲解如何在Ubuntu 18.4.3(Bionic Beaver)上创建并签名本地源,以及如何修改`sources.list`文件以实现离线升级和安装依赖包。 首先,理解`sources.list`文件的重要性。它是Ubuntu系统中Debian软件包...

    svn 服务器+sasl认证在ubuntu 10.04安装文档

    ### SVN服务器+SASL认证在Ubuntu 10.04上的安装与配置 #### 安装Subversion(SVN) 1. **安装Subversion:** 首先确保Ubuntu 10.04系统已安装Subversion。可以使用`sudo apt-get install subversion`命令进行安装...

    ubuntu下paramiko安装

    在Ubuntu操作系统中,Paramiko是一个重要的Python库,用于实现SSHv2协议,提供客户端和服务器端的功能,包括加密、身份验证、数据传输等。在进行远程控制、自动化运维或者网络编程时,Paramiko是一个非常实用的工具...

Global site tag (gtag.js) - Google Analytics