在用户登录时安全地自动挂载加密驱动器

Tom*_*man 22 encryption automount ecryptfs

当我登录时,会自动为我挂载一个加密的 /home 目录。我有第二个内部硬盘驱动器,我已经使用磁盘工具对其进行了格式化和加密。我希望它在我登录时自动挂载,就像我加密的 /home 目录一样。我该怎么做呢?

这里有几个非常相似的问题,但答案不适用于我的情况。最好在这里关闭/合并我的问题并编辑下面的第二个问题,但我认为它可能已被放弃(因此永远不会被标记为已接受)。

此解决方案不是一种安全的方法,它绕过了加密。
这个需要编辑fstab,这需要在启动时输入一个额外的密码。它不像挂载 /home 那样自动。
这个问题非常相似,但不适用于加密驱动器。该解决方案无法满足我的需求。
这是一个,但它用于 NTFS 驱动器,我的是 ext4。

如果解决方案需要,我可以重新格式化和重新加密第二个驱动器。我已将所有数据备份到别处。

joh*_*hnf 10

几年前我写这个答案时,这是实施解决方案的最佳方式。我现在建议您使用 mount.ecryptfs_private 来查看下一个答案

我也在寻找一种自动挂载第二个 eCryptfs 卷的方法。以下脚本和配置修改集合将在登录时安全且自动地将您的卷挂载到 GUI 或 CLI。

有一个更好的解决方案正在创建中(尽管我认为还没有准备好在用户登录时自动安装,因此该脚本的保质期有限。):

太小的硬盘上的 ecryptfs - 如何将链接添加到加密中?

脚本的安全性取决于您的主目录是否使用 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
Run Code Online (Sandbox Code Playgroud)

该脚本调用 /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}
Run Code Online (Sandbox Code Playgroud)

您还需要创建一个包含密码的文件,该文件将由 eCryptfs mount 命令使用:

/home/johnf/scripts/ecryptfs_passphrase:

passwd=secret_passphrase
Run Code Online (Sandbox Code Playgroud)

您需要修改几个文件的权限:

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
Run Code Online (Sandbox Code Playgroud)

在创建脚本之前,您需要创建一个 sudoers 配置以允许使用 sudo 执行挂载脚本,而无需输入您的 sudo 密码。

将以下内容添加到 /etc/sudoers(或 /etc/sudoers.d 中的文件)。您需要用您的用户名替换 johnf。必须使用安装脚本的绝对路径。

johnf   ALL = NOPASSWD: /home/johnf/scripts/mount_other_ecryptfs
Run Code Online (Sandbox Code Playgroud)

最后一步是在登录时调用 automount_ecryptfs 脚本。

在 Ubuntu Unity(可能还有 gnome)上,使用 Startup Applications 小程序创建一个新的启动程序,该程序调用 /home/johnf/scripts/automount_ecryptfs。

要在登录到 bash shell 时自动挂载第二个 eCryptfs 卷,您需要修改 ~/.bashrc 文件。添加以下内容:

/home/johnf/scripts/automount_ecryptfs
Run Code Online (Sandbox Code Playgroud)

有了这个配置,你现在应该自动挂载你的第二个 eCryptfs 卷。


rco*_*oup 10

以@johnf 的回答为基础,但改用mount.ecryptfs_private

  • 加密/home/bob/(例如在 SSD 上),使用 Ubuntu 的普通加密主目录魔术。
  • 加密/media/hdd/bob_extra/(例如在 HDD 上),以安装到/home/bob/extra. 这应该在登录时自动挂载,就像主目录一样。
  • 对两者使用相同的密钥/凭证。

创造它

mkdir /media/hdd/bob_extra
cp /home/bob/.ecryptfs/Private.sig /home/bob/.ecryptfs/extra.sig
echo "/media/hdd/bob_extra /home/bob/extra ecryptfs none 0 0" > /home/bob/.ecryptfs/extra.conf
Run Code Online (Sandbox Code Playgroud)

测试一下

mount.ecryptfs_private extra
Run Code Online (Sandbox Code Playgroud)

运行mount,你应该看到:

...
/media/hdd/bob_extra on /home/bob/extra type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=12345678abcdef,ecryptfs_fnek_sig=abcdef12345678)
Run Code Online (Sandbox Code Playgroud)

卸载:

sudo umount /media/hdd/bob_extra
Run Code Online (Sandbox Code Playgroud)

设置自动挂载

Create /home/bob/bin/automount_ecryptfs.extra,如果它尚未安装,它将安装它。

#!/bin/bash

MOUNT_POINT=/home/bob/extra

grep -q $MOUNT_POINT /proc/mounts
if [ $? -eq 1 ]; then
  mount.ecryptfs_private extra
fi
Run Code Online (Sandbox Code Playgroud)

使其可执行 ( chmod +x),然后将其添加到/home/bob/.bashrc

...
/home/bob/bin/automount_ecryptfs.extra
Run Code Online (Sandbox Code Playgroud)

然后也将它添加到 Gnome 的启动应用程序中。


try*_*ion 7

您不再需要上述解决方案。

先决条件:

注意:此方法不如手动安装加密驱动器安全。如果有人可以物理访问您的计算机,您对 root 密码不小心,或者您的计算机有多个用户/访客帐户,则此方法不安全;当您注销但不关闭系统时,辅助驱动器会保持安装状态,因此其他用户可以看到其内容。

第 1 部分:加密辅助驱动器。

  1. 在 Unity 破折号中键入“磁盘”并按 Enter。
  2. 在“设备”下方单击要加密的硬盘。
  3. 在“音量”下方单击齿轮/更多操作按钮。
  4. 单击“格式化卷”。对于类型,选择“加密,与 Linux 系统兼容”。为您的驱动器命名并为其设置一个强大的密码短语。
  5. 点击“格式”

第 2 部分:在系统启动时自动安装 HDD。

  1. 保持“磁盘”应用程序打开,然后单击齿轮。
  2. 单击“编辑加密选项”。
  3. “自动加密选项”将被打开,并且下面的菜单变灰。关闭自动加密选项。
  4. 输入格式化磁盘时的密码。单击“确定”。

您现在拥有一个加密的硬盘驱动器,它会在您的计算机启动时自动安装。

  • 我认为你在这里错了。也就是说,第二次挂载确实发生在用户登录时(仅在我提到的执行操作的帐户上),而不是一秒钟之前。当我妻子在同一台计算机上登录她的 Ubuntu 帐户时,驱动器未安装。如果她尝试挂载它,它会要求提供加密密钥。我认为,您不需要上述答案。 (2认同)