ecryptfs是一种加密文件系统。该文件系统的内容在传输和储存时以密文形式存在。只有在mount时用密钥解密才能得到明文。利用这个特性,我们可以用他来对软件镜像中的部分敏感文件系统进行加密,然后打包发布。


1.加密文件系统
1.1 生成密钥passphrase

 

sig=`echo none | ecryptfs-add-passphrase | grep -v Passphrase | cut -d[ -f 2 | cut -d] -f 1`
echo $sig > sig

1.2 准备空的加密文件系统 fs_crypt

mkdir fs_crypt

1.3 将上面创建的加密文件系统mount到加载点

mount -t ecryptfs -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=n,ecryptfs_sig=${sig},sig=${sig},verbosity=0 /fs_crypt/ /mnt/

1.4 将待加密的文件系统的内容复制到加载点

rsync -va /plain/ /mnt/

1.5 将加载点umount

umount /mnt/

1.6 fs_crypt就是生成的加密文件系统

对fs_crypt压缩打包,就可以以密文的形式传输和储存了,

2. 解密文件系统
2.1 将fs_crypt在目标设备上解压缩
2.2 用passphrase把fs_crypt mount到加载点。

sig=`cat sig`
mount -t ecryptfs -o ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=n,ecryptfs_sig=${sig},sig=${sig},verbosity=0 /fs_crypt/ /mnt/

2.3 访问加载点里面的文件即可访问到明文

 

所以这个过程中,密钥的保存是很重要的,需要通过其他加密方式进行分发。

 

参考: https://github.com/lxc/lxc/blob/master/hooks/mountecryptfsroot