当我几年前写下这个答案时,这是实现解决方案的最佳方式。现在我建议您查看
下一个答案,使用mount.ecryptfs_private代替。
我也在寻找一种自动挂载第二个eCryptfs卷的方法。以下一系列脚本和配置修改将安全且自动地在登录时挂载您的卷,无论是GUI还是CLI。
有一个更好的解决方案正在被创建中(尽管我认为它还没有准备好在用户登录时自动挂载,因此这个脚本的使用寿命有限):
ecryptfs on too-small harddrive - how to add links into the encryption?
脚本的安全性取决于您的主目录是否使用eCryptfs加密,以便脚本和包含解开密码的文件都得到加密。如果您在登录后将计算机解锁并打开了root shell,则可以访问密码。但是,使用sudo NOPASSWD允许在不需要输入密码或将密码短语留在用户可读取的文件中的情况下安全地挂载分区。
这些脚本的一个已知缺陷是,您的第二个卷在注销时不会被卸载,因此对于多用户系统来说并不特别适用。
我的解决方案由几个部分组成,包括两个shell脚本,一个用于执行实际挂载操作,另一个作为其包装器。
这是包装器脚本,它会验证目录是否已经挂载,如果没有,则会使用sudo调用挂载脚本:
/home/johnf/scripts/automount_ecryptfs
#!/bin/bash
MOUNT_POINT=/home/johnf/slow
grep -q $MOUNT_POINT /proc/mounts
if [ $? -eq 1 ]; then
sudo /home/johnf/scripts/mount_other_ecryptfs
fi
这个脚本调用/home/johnf/scripts/mount_other_ecryptfs,其内容如下。
请注意,该脚本假设您已启用文件名加密。如果没有启用,您需要修改脚本以处理检测(参考ecryptfs-recover-private),或者可以删除ecryptfs_fnek_sig挂载选项。
以下是/home/johnf/scripts/mount_other_ecryptfs脚本的内容:
#!/bin/bash
ENCRYPTED_VOLUME=/vol0/.ecryptfs/johnf/.Private/
MOUNT_POINT=/home/johnf/slow
PASSFILE=/home/johnf/scripts/ecryptfs_passphrase
MOUNT_PASSWORD=secret_passphrase
ECRYPTFS_SIG=`head -1 ${ENCRYPTED_VOLUME}//../.ecryptfs/Private.sig`
ECRYPTFS_FNEK_SIG=`tail -1 ${ENCRYPTED_VOLUME}//../.ecryptfs/Private.sig`
printf "%s" $MOUNT_PASSWORD | ecryptfs-insert-wrapped-passphrase-into-keyring ${ENCRYPTED_VOLUME}/../.ecryptfs/wrapped-passphrase
mount -t ecryptfs -o key=passphrase:passfile=${PASSFILE},ecryptfs_sig=${ECRYPTFS_SIG},ecryptfs_fnek_sig=${ECRYPTFS_FNEK_SIG},ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n ${ENCRYPTED_VOLUME} ${MOUNT_POINT}
你还需要创建一个包含密码的文件,这个文件将被eCryptfs挂载命令使用:
/home/johnf/scripts/ecryptfs_passphrase:
passwd=secret_passphrase
你需要修改几个文件的权限:
chmod +x /home/johnf/scripts/automount_ecryptfs
sudo chown root:root /home/johnf/scripts/mount_other_ecryptfs /home/johnf/scripts/ecryptfs_passphrase
sudo chmod a=x /home/johnf/scripts/mount_other_ecryptfs
sudo chmod 400 /home/johnf/scripts/ecryptfs_passphrase
在创建脚本之前,您需要创建一个sudoers配置文件,以允许使用sudo执行挂载脚本而无需输入sudo密码。
将以下内容添加到/etc/sudoers(或/etc/sudoers.d中的文件)。您需要将johnf替换为您的用户名。必须使用绝对路径指定挂载脚本。
johnf ALL = NOPASSWD: /home/johnf/scripts/mount_other_ecryptfs
最后一步是在登录时调用automount_ecryptfs脚本。
在Ubuntu Unity(和可能的gnome)上,使用"启动应用程序"小程序创建一个新的启动程序,调用/home/johnf/scripts/automount_ecryptfs。
为了在登录时自动挂载第二个eCryptfs卷到bash shell,您需要修改您的~/.bashrc文件。添加以下内容:
/home/johnf/scripts/automount_ecryptfs
有了这个配置,你现在应该可以自动挂载你的第二个 eCryptfs 卷了。