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链接
- eCryptfs : https : //launchpad.net/ecryptfs
- Debian: http : //www.debian.org/