我想在我的笔记本电脑上进行完整的系统加密。但我有两个用户,一个用于家庭,一个用于工作,并且希望对这两个用户进行单独的加密。当然,我可以使用 dm-crypt 进行全磁盘加密,并使用 ecryptfs 的第二个加密层来加密主目录。然而,出于性能原因,这似乎不是一个好主意。那么我怎样才能设置一个系统:
- 整个硬盘都被加密
- 当用户1登录而用户2未登录时,用户2的数据为用户1加密,反之亦然
- 我需要在启动时输入一个密码来解密系统(就像在通常的 LVM/dm-crypt 设置中一样),并且只需要输入第二个密码来登录用户 x 并解密他的分区
- 性能类似于简单的全盘加密
- 该解决方案应与 SSD 一起使用,即它应支持 TRIM
如果这很重要的话,我想使用 ubuntu 作为发行版。
答案1
不要加密整个硬盘驱动器(如 中所示
/dev/sda
,对每个分区进行加密(或更准确地说是对每个文件系统进行加密 - 见下文)。在家中为两个用户安装单独的文件系统。我有意避免编写单独的分区,因为虽然这是通常的处理方式,但它在某些方面受到限制。拥有一个大的主分区可能会更方便,该分区保存包含加密文件系统的大文件并根据需要进行安装。其优点是更容易调整用户房屋的大小,同时保持他们分开。
通过 PAM 可以在登录时自动安装。请注意,您不想使用相同的密码进行登录和实际操作。数据加密。相反,您可以使用 LUKS 或通过将加密密钥存储在本身使用登录密码加密的文件中来模仿它。这确保了登录密码的更改不会影响加密的数据,而只会影响加密的密钥,因此您不必负责重新加密整个用户的家庭)。
一般说明:
分区使用
gdisk
(也称为gptfdisk
有时)parted
或任何其他适当的程序,请阅读手册页以获取详细信息(分区有点超出了此 QA 的范围)基于加密文件的文件系统 - 我对LUKS的设计有一些反对,所以我一般使用
cryptsetup
“plain”模式,它在某些方面模仿LUKS。如果您选择 LUKS,那么您只需将步骤减少到cryptsetup
(通过适当修改选项)准备加密密钥和密码。这是一个有趣的部分 - 对于加密数据,您需要具有足够随机性的东西(8 个字母的密码确实不够),而对于密码,您可以轻松更改(无需重新加密整个文件系统)并且相当容易记住并输入。这些要求是相互矛盾的。因此,我们将使用 LUKS 所做的相同技巧(实际上可以被视为 a 的变体)混合密码系统在某种意义上))。这加密密钥可以或多或少是随机的 - 要么使用一些真正随机的数据(例如来自
/dev/random
),要么使用相当长的哈希值,例如 SHA-2 或 SHA-3(第一个是由 NSA 设计的,如果您想知道是否在鉴于最近发生的事件)相当长的密码短语。在第一种情况下(以及在真正随机数据的情况下)相当长意味着,长度应该大约是所使用的密码所选择的密钥长度加的长度初始化向量。在第二种情况下,这意味着很难暴力破解它。使用哈希的优点是,如果密钥损坏或丢失,可以恢复密钥(当然,前提是您记住经过哈希处理的初始密码)。然后该密钥被加密并存储在文件中。您的情况下的加密密钥的密码将与登录密码相同。
# set up the encrypted encryption key printf "Reasonably long and complicated passphrase" \ | openssl dgst -sha512 -binary \ | openssl enc -bf > /path/to/key.enc
openssl dgst -sha512 -binary
从其标准输入生成 SHA-512 哈希的二进制形式,openssl enc -bf
并使用河豚- 随意选择您喜欢的哈希和密码(Twofish 或 Rijndael 都经过了很好的尝试,但内核中可用的其他密码也应该没问题)。将密钥保存在加密设备之外的缺点是除了加密数据本身之外还需要其他东西 - LUKS 将密钥存储在其标头中,因此它是独立的。另一方面,您必须使用一组特定的工具。虽然它不是精心设计的并且存在于大多数安装中,但您需要访问它的特殊工具。
另一方面,使用单独的文件,您可以自由选择存储密钥的任何方法。您甚至可以将其放在可移动介质上,在登录之前将其插入,并在安装文件系统后将其删除(您甚至可以在将介质连接到计算机时挂钩自动登录)。当然,所有这些都应该经过深思熟虑,因为安全准则“不要发明自己的加密货币”适用(参见例如这篇关于安全SE的文章) - 这实际上可能是使用 LUKS 的一个论点。备份密钥显然很容易。
创建一个空文件来保存文件系统
dd if=/dev/zero of=/path/to/backing_file.enc bs=1M count=X
创建加密设备
openssl enc -bf -d -in /path/to/key.enc 2>/dev/null \ | cryptsetup create \ -c twofish-cbc-essiv:sha256 \ -s 256 \ -h plain \ encryptedfs /path/to/backing_file.enc
openssl enc -bf -d
在标准输入上请求密码并尝试解密加密密钥。cryptsetup create ... encryptedfs /path/to/backing_file.enc
创建的加密 DM 设备encryptedfs
由先前创建的文件调用。-c
选择加密密码的重要选项和其运作方式用零填充设备 - 这有效地将“随机垃圾”放入后备文件中,并使文件的内容可能是什么变得不那么明显(否则,您可以通过扫描未归零的块来判断内容已写入何处从步骤 2) 开始。
dd if=/dev/zero of=/dev/mapper/encryptedfs bs=1M
创建文件系统
mkfs.[favourite_filesystem] [tuning options] /dev/mapper/encryptedfs
/etc/fstab
如果您想自己做所有事情,请输入相应的行,或者输入/etc/crypttab
如果您想要与系统工具进行某种集成。
对于登录/注销时自动(卸载)安装,我将推荐您参考pam_mount 文档。
答案2
我可以想到两种有价值的方法来实现这样一个系统,而无需对您的家庭进行两次加密。
- 单独的主分区:创建一个单独的分区并安装到
/home
.然后每个用户通过 加密其家庭encfs
。 - 每个用户都有单独的主分区:每个用户的家庭都有一个单独的分区,该分区本身使用
dm-crypt
./home/user
当他登录时,该分区就会被安装。
当然,加上加密/
;-)
在这两种情况下,如果您使用相同的密码进行登录和加密,则可以在登录过程中自动安装家庭。 (可以在例如中进行配置/etc/security/pam_mount.conf.xml
,有很多方法)虽然第一种方法不会加密用户文件夹的名称,但使用第二种方法实际上所有内容都会被加密。所以我更喜欢(并且实际使用)方法二;-)