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


18

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

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

此解决方案不是安全的方法,它规避了加密。
需要进行编辑fstab,这需要在启动时输入其他密码。它不是像安装/ home一样自动的。
这个问题非常相似,但是不适用于加密驱动器。该解决方案无法满足我的需求。
这是一个,但它用于NTFS驱动器,我的是ext4。

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


您使用什么FS加密?是LUKS还是ecrytpfs?
雏菊2012年

@AaronLewis我只是使用Ubuntu的磁盘工具格式化驱动器,然后选中“加密此驱动器”框。如果我不得不猜测我会使用ecryptfs,因为这是默认情况下/ home加密的方式。由于它很容易做到,所以我从未研究过它。
汤姆·布鲁斯曼

Answers:


5

您不再需要上面的解决方案。

先决条件:

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

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

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

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

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

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


1
虽然我确定有人会用到它,但这并不是对所提出问题的答案,后者提出应在用户登录时进行第二次安装,而不是系统启动。这使得最初的主张“您不再需要上面的解决方案”不合适,我请作者相应地改写答案。
mc0e

2
我认为您在这里错了。也就是说,辅助挂接确实在用户登录时发生(仅在执行我提到的操作的帐户上),而不是事前进行。当我的妻子在同一台计算机上登录她的Ubuntu帐户时,未安装驱动器。如果她尝试安装它,它将要求提供加密密钥。我认为,您不需要上面的答案。
tryion,2016年

1
同意,这是目前为止最简单的方法,因为我是计算机上的唯一用户。它并非对所有人都适用,但是如果您安装了Ubuntu,并且您是主要/管理员用户,那么这就是方法。到目前为止,确实应该有一个很大的“使这项工作完全像加密的/ home”复选框,这是一个简单的用例。
汤姆·布鲁斯曼'16

@tryion LUKS分区在系统启动时已解锁,但未安装。因此,一旦打开计算机,它就如同未加密的分区一样可访问。密码以明文形式存储在中/etc/crypttab。不需要用户密码即可访问该分区。因此,此设置等同于完全不加密,也不是问题的答案。
维克多

是否有用于使用libsecret为特定用户解密的文件存储在其他位置的选项,以及是否有针对非GUI /无头用户的cli指南。
MrMesees'3

10

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

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

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

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

脚本的安全性取决于您的主目录是否已使用eCryptfs加密,以便脚本和带有密码的密码可以解开密码。如果您在登录后用根外壳打开的情况下未锁定计算机,则可以访问密码,但是使用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 mount命令使用:

/ 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)上,使用Startup Applications小程序创建一个新的启动程序,该程序调用/ home / johnf / scripts / automount_ecryptfs。

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

/home/johnf/scripts/automount_ecryptfs

使用此配置后,您现在应该自动挂载第二个eCryptfs卷。


哇,好答案!已接受并接受。尚无法测试,但是看起来很完整。
汤姆·布鲁斯曼

mount.ecryptfs_private现在的作者ecryptfs-mount-private也推荐他的用法,它是的包装脚本mount.ecryptfs_private。 对于ecryptfs和LUKS的相对优点,thesimplecomputer.info /…可能值得一读。
mc0e

9

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

  • 加密的 /home/bob/使用Ubuntu的常规加密家庭目录魔术进行(例如,在SSD上)。
  • 加密/media/hdd/bob_extra/(例如在硬盘上),以挂载到/home/bob/extra。这应该在登录时自动挂载,就像home dir一样。
  • 两者使用相同的密钥/凭证。

创造它

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的启动应用程序中。


+1感谢您的回答。我现在有一个更加复杂的设置,其中包含多个SSD和指向共享驱动器的符号链接,因此我将无法对其进行测试。我希望加密多个HDD就像加密/ home一样简单。
汤姆·布鲁斯曼

另请参见ecryptfs-mount-private功能更相似的产品。例如,它可以自动使用用户钥匙圈中的钥匙。
mc0e '02

这个答案是关于挂载eCryptfs私有目录的。问题是关于挂载使用“ 磁盘”实用程序创建的LUKS分区。
维克多

1

在加密的主目录中创建一个脚本~/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)。


有没有简单的方法可以使这样的脚本在插入USB时运行?
零时101

我自己还没有尝试过,所以不能肯定地说,但我不知道为什么。您将需要创建一个udev规则,该规则针对特定的USB设备并运行上述脚本。例如,该帖子可能是一个起点。
劳尔·拉斯纳

0

恐怕这不会成为流行的答案...

在不回避加密本身安全性的情况下,不可能自动安装任何加密分区。

考虑一下“ 自动 ”的含义,并理解为自动意味着他们也将看到您的数据。


我主观上使用“安全”,可以将其从问题中删除。我只想在登录时挂载装有照片的加密驱动器,就像/ home一样。我知道从理论上讲这是可能的,因为我有第三个(也是加密的)驱动器作为DéjàDup的目的地。仅在备份实用程序启动时才安装该驱动器。全自动,我保存了密钥,因此不必每次都输入。在登录屏幕上输入密码后,我对自动处理所有按键感到满意。任何想法如何做到这一点?谢谢。
汤姆·布鲁斯曼

3
在这种情况下,自动意味着您应该在输入登录密码后挂载它。您的登录密码可以是加密分区的密钥,或更常见的是该密钥的密钥。这是合理的安全性(提供良好的登录密码)。
哈维尔·里维拉

它不会自动安装在另一台计算机上,这就是我们大多数人加密某些磁盘的原因。就我而言,它是用于备份的磁盘。我在共享空间中工作,并且知道拥有很多知识的你们中的一个人将能够绕开我对磁盘/计算机的物理访问所做的任何事情:我只是想减少文件的可访问性,以便其他人可以不做。
拉蒙·苏亚雷斯2013年

通过使其成为一个自动过程,窃取您计算机的人是否有可能可以访问您加密的额外HD的密钥?(然后当然安装并访问此HD)
miguelfg

简单,明显的场景:我将USB驱动器插入办公室中的服务器以备份数据。我将USB驱动器带回家,以确保在服务器出现意外情况时进行异地备份。在我回家的路上,有人闯入我的汽车并拿走了USB磁盘。现在他们必须1)知道服务器的位置,以及2)闯入办公室解密磁盘。这部分比“仅在家中将其插入他们的计算机”要难得多。
Ernie

0

请确保执行以下步骤。要求密码短语会阻止其他用户访问该卷,即使该卷已安装也是如此。

1.打开“磁盘”,选择驱动器,然后单击“ LUKS”卷。单击齿轮,然后取消选择“用户会话默认值”。选择“在系统启动时解锁”和“需要其他授权才能解锁”: 在此处输入图片说明

2.单击磁盘卷(位于LUKS卷下方)。单击齿轮,然后取消选择“用户会话默认值”。选择“在系统启动时安装”和“在用户界面中显示”: 在此处输入图片说明

您也可以选择要求其他身份验证来安装该卷,但在这种情况下,对于有问题的用户,该安装将不会自动进行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.