如何加密目录/分区与eCryptfs在Debian 8(Jessie)

eCryptfs是适用于Linux的POSIX兼容的企业级堆叠密码文件系统。 您可以使用它来加密分区以及不使用自己分区的目录,无论底层文件系统,分区类型等。本教程将介绍如何使用eCryptfs加密Debian Jessie上的目录。

1初步说明

在本教程中,我将加密我的主目录/ home / falko / ,它位于/ partition(即/ home / falko /是一个普通目录,不使用自己的分区)。

2安装eCryptfs

eCryptfs可以轻松安装如下:

apt-get -y install ecryptfs-utils

3加密目录

我现在将加密我的主目录/ home / falko / 。 由于该目录中已经存在(未加密)文件,所以我必须备份它们,以便稍后将它们还原到加密/ home / falko /目录中(否则这些填充不能被访问/读取,而目录是加密):

cp -pfr /home/falko/ /tmp/

现在我可以使用文件系统类型ecryptfs加载目录/ home / falko /

mount -t ecryptfs /home/falko /home/falko

当您第一次这样做时,您将不得不回答几个问题:

root@server1:/tmp# mount -t ecryptfs /home/falko /home/falko
Select key type to use for newly created files:
1) tspi
2) passphrase
Selection: <-- 2
Passphrase: <-- Enter a secure password
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32
2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: <-- Press ENTER
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: <-- Press ENTER
Enable plaintext passthrough (y/n) [n]: <-- Press ENTER
Enable filename encryption (y/n) [n]: <-- Press ENTER
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=bd28c38da9fc938b
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? : <-- yes
Would you like to append sig [bd28c38da9fc938b] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : <-- yes
Successfully appended new sig to user sig cache file
Mounted eCryptfs
root@server1:/home/administrator#

看看输出

mount

你应该看到/ home / falko /现在加密了:

让我们将备份还原到现在加密的目录/ home / falko / ,然后删除备份:

cp -pfr /tmp/falko/ /home/
rm -fr /tmp/falko/

为了测试的目的,我们将一些其他文件,例如/ etc / hosts复制到/ home / falko /来检查它是否真的得到加密:

cp /etc/hosts /home/falko

/ home / falko /安装有ecryptfs文件系统类型时,应该可以读取/ home / falko / hosts的内容

cat /home/falko/hosts

现在卸载/ home / falko / ...

umount /home/falko

...然后再次阅读/ home / falko / hosts ,你应该得到一些隐秘的东西:

cat /home/falko/hosts

4如何在引导时自动挂载加密分区

当然,我们不想每次都挂载/ home / falko /手动 - 如果可以在启动时自动安装,这将是更好的。 为此,我们需要一个密码文件,出于安全考虑,我希望这个密码文件位于USB密钥上。

插入USB钥匙并运行

fdisk -l

找出其设备名称和文件系统类型:

root@server1:~# fdisk -l

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00035e35

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        3793    30461952   83  Linux
/dev/sda2            3793        3917      992257    5  Extended
/dev/sda5            3793        3917      992256   82  Linux swap / Solaris

Disk /dev/sdb: 8086 MB, 8086617600 bytes
255 heads, 63 sectors/track, 983 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e439f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         983     7895916    b  W95 FAT32
root@server1:~#

在我的情况下,设备名称是/ dev / sdb1 ,它使用FAT32文件系统。

我们将USB钥匙装入/ mnt / usb

mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb

看看输出

mount

...你应该看到它已经安装了文件系统类型vfat (FAT32) - 稍后我们将需要这个信息我们的/ etc / fstab文件:

root@server1:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=124251,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=202132k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/sdb1 on /mnt/usb type vfat (rw)
root@server1:~#

现在看看/root/.ecryptfs/sig-cache.txt的内容:

cat /root/.ecryptfs/sig-cache.txt
bd28c38da9fc938b

我们需要这个文件/root/.ecryptfsrc的这个签名 ,我们创建如下:

nano /root/.ecryptfsrc

请确保您使用ecroptfs_sig行中的/root/.ecryptfs/sig-cache.txt文件中的签名

key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt
ecryptfs_sig=bd28c38da9fc938b
ecryptfs_cipher=aes
ecryptfs_key_bytes=16
ecryptfs_passthrough=n
ecryptfs_enable_filename_crypto=n

现在我们在USB钥匙上创建密码文件:

nano /mnt/usb/passwd_file.txt
passphrase_passwd=some_passphrase

确保使用正确的密码,即您手动安装目录时使用的密码。

接下来打开/ etc / fstab ...

nano /etc/fstab

...并添加以下两行(确保您使用正确的文件系统类型为您的USB钥匙 - 在我的情况下的vfat ):

[...]
/dev/sdb1       /mnt/usb        vfat    ro      0 0
/home/falko /home/falko ecryptfs defaults 0 0

(重要的是,USB密钥的行位于加密分区的行之前,因为在加密分区可以挂载之前需要挂载USB密钥!)!

然后重新启动系统:

reboot

如果一切正常,您的加密分区应在重新启动后自动挂载。 但是,您的系统可能无法在引导期间挂载USB密钥,这意味着您的加密分区也无法挂载。 如果发生这种情况,请编辑/etc/rc.local (此脚本在引导过程结束时执行)...

nano /etc/rc.local

...并在出口0行之前添加行/ bin / mount -a

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/bin/mount -a
exit 0

这将在引导过程结束时重新挂载所有分区(包括您的USB密钥和加密分区)。

5链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏