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

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

当我登录时,会自动安装加密的 /home 目录。我有第二个内置硬盘,已使用磁盘实用程序对其进行格式化和加密。我希望它在我登录时自动安装,就像我的加密 /home 目录一样。我该怎么做?

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

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

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

答案1

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

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

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

硬盘太小的时候使用 ecryptfs - 如何将链接添加到加密中?

脚本的安全性取决于您的主目录是否使用 eCryptfs 加密,以便脚本和带有解开密码的密码的文件都经过加密。如果您在登录后将计算机解锁并打开 root shell,则可以访问密码,但是使用 sudo NOPASSWD 可以安全挂载分区,而无需输入密码或将密码留在用户可读的文件中。

这些脚本的一个已知缺陷是您的第二个卷在注销时不会被卸载,因此它不太适合多用户系统。

我的解决方案由几个部分实现,两个 shell 脚本,一个执行实际的安装,另一个作为它的包装器。

这是包装脚本,用于验证目录是否已挂载,如果尚未挂载,则它将使用 sudo 调用挂载脚本:

/主页/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 挂载命令使用:

/主页/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 的新启动程序。

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

/home/johnf/scripts/automount_ecryptfs

有了这个配置,您现在应该可以自动安装第二个 eCryptfs 卷。

答案2

基于@johnf的答案,但使用安装.ecryptfs_private反而:

  • 加密/home/bob/(例如在 SSD 上),使用 Ubuntu 的常规加密主目录魔法。
  • 加密/media/hdd/bob_extra/(例如在硬盘上),挂载到/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

测试一下

mount.ecryptfs_private extra

运行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)

卸载:

sudo umount /media/hdd/bob_extra

设置自动挂载

创建/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

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

...
/home/bob/bin/automount_ecryptfs.extra

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

答案3

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

先决条件:

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

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

  1. 在 Unity 仪表板中输入“disks”并按回车键。
  2. 在“设备”下方单击您想要加密的硬盘。
  3. 在“卷”下方单击齿轮/更多操作按钮。
  4. 单击“格式化卷”。类型选择“加密,兼容 Linux 系统”。命名您的驱动器并为其设置一个强密码。
  5. 点击“格式化”

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

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

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

答案4

在加密的主目录中创建一个脚本~/scripts/mount_storage.sh::

#!/bin/bash

sudo cryptsetup open --type luks UUID=12e26119-0ee2-4eb4-bd40-d8a3547ecf0c storage --key-file ~/keys/storage_keyfile
sudo mount /dev/mapper/storage /storage

添加到“启动应用程序”:

sh ~/scripts/mount_storage.sh

添加/etc/sudoers

%sudo   ALL= NOPASSWD: /sbin/cryptsetup open --type luks UUID=12e26119-0ee2-4eb4-bd40-d8a3547ecf0c storage --key-file *
%sudo   ALL= NOPASSWD: /bin/mount /dev/mapper/storage /storage

您需要/storage在上面的脚本中创建挂载点并更改 UUID(使用 找到它blkid)。

相关内容