如何在Ubuntu 18.04上加密/home目录?

很失望地看到18.04安装程序不再提供加密家目录的选项。根据安装程序中引用的这个错误报告,现在推荐的加密方法是使用LUKS进行全盘加密,或者使用fscrypt对目录进行加密。全盘加密对我的需求来说有点过头了,而且在Wiki上提到的所有错误和注意事项都让它变得不太吸引人。我真正想要的只是保护我的家目录,防止别人访问我的文件、照片等,以防我的笔记本电脑被盗,所以fscrypt对我来说是一个选择。 fscrypt GitHub页面上有一些设置示例,但我找不到针对在Ubuntu上加密家目录的任何文档。旧的ecryptfs工具仍然可用,但在设置后,Ubuntu有时会在登录界面卡住。
所以我的问题是:如何设置fscrypt来加密我的/home目录,并在登录时进行解密?我也喜欢ecryptfs允许手动解密文件夹(例如,从磁盘映像中)。
(一个类似的问题已经发布在这里,但不幸的是,它因为被认为是“离题”的错误报告而关闭。为了澄清,这不是错误报告。从安装程序中删除加密主目录选项是有意的。我在这里询问的是如何设置fscrypt。)

1按照建议采用全盘加密,这样会更容易。我多年来一直使用LUKS没有任何问题,相比你所使用的旧方法,LUKS更稳定。 - Panther
3@Panther LUKS允许解密备份驱动器上存储的文件吗?我问这个问题是因为我使用Macrium Reflect在Windows上进行完整系统备份。如果我需要从备份中提取一些文件,我需要一种解密备份文件的方法。使用ecryptfs,我只需要插入我的驱动器并运行存储在加密文件夹中的脚本即可。 - elight24
10那么对于我们这些在16.04中将家目录加密的用户来说,情况怎么办呢?由于安装程序中已经没有了“加密家目录”的选项,我们无法挂载新的家目录。甚至无法登录系统。这真是荒谬。 - SunnyDaze
2@SunnyDaze 自从我上次手动挂载数据以来已经有一段时间了,但我记得那个命令是"ecryptfs-mount-private"。 - elight24
1备份是一个独立的问题。@SunnyDaze,请提出你自己的问题,而不要在这个问题上添加内容。 - Panther
1@Panther 如果你的电脑是双系统启动,全盘加密功能就无法使用了,对吗?至少在安装时,我只有删除所有操作系统才能选择加密选项,因此我也在寻找其他替代方案。 - Bani
1全面加密在双系统启动时运行良好。您可以对安装的分区进行加密,而不是整个磁盘。 - Panther
1@Panther 维基页面上指出,LUKS 不支持双启动,并且还有一些其他不好的副作用。我猜维基页面可能只是过时了吧? https://help.ubuntu.com/community/ManualFullSystemEncryption/Background - elight24
3你可能对在整个磁盘上使用LUKS感到困惑,这在双启动Windows时是行不通的。而在Ubuntu分区上使用LUKS,则可以很好地与Windows双启动配合使用。我还没有阅读维基页面。 - Panther
@Panther 啊,我想你是对的。我读过的所有资料都说它会清除Ubuntu分区上的所有数据。我假设没有什么办法可以避免这种情况吗? - elight24
不要制作LUKS分区是具有破坏性的。 - Panther
2全盘加密非常好,而且能够胜任其工作。但是仅当它是您个人计算机并且您是唯一的用户时才足够。如果有人想知道“为什么要加密主目录?”,那么在有多个用户时这是很有用的。当您登录时,只有您的主目录被解密,而其他目录则不会。 - AnthonyB
1对我来说,全盘加密不是一个选择,因为我使用屏幕键盘进行登录。取消这个选项是一种倒退。太糟糕了。 - Konrad Gajewski
由于您明确要求 fscrypt,这并不完全是一个答案。但您可能想看一下这个答案:https://askubuntu.com/questions/1020390/how-do-i-auto-mount-luks-partition/1020414#1020414 - Sebastian Stark
1哇!当人们从16.04升级到18.04时,他们的~会发生什么事情!? - MWB
1@Panther - 我是在补充这个问题。我不是在谈论备份。我是在谈论在已经有一个我不想要格式化的单独/home分区的设置上安装Ubuntu 18.04覆盖16.04。使用18.04安装程序时,当您尝试登录时会出现空白屏幕,但我早就自己解决了,并在其他地方发布了我的发现。 - SunnyDaze
@SunnyDaze,请问您可以发布您研究的链接吗? - Gabriel Staples
我不得不费些功夫才找到我评论的地方。它在另一个问题的评论部分。为了确保我的旧加密家目录/分区能在18.04中继续工作,我只需要确保没有格式化我的旧家目录,然后安装ecryptfs-utils,最后重启。那个评论在https://askubuntu.com/questions/1029285/ubuntu-18-04-disk-encryption/1029303#comment1823270_1029303。 - SunnyDaze
4个回答

2020-02更新

我正在运行多个使用fscrypt加密的家目录。在安装系统时不要启用加密,并使用this guide来在您的家目录上实施fscrypt

fscrypt的API可能会在未来发生变化,因此如果您尝试升级系统,请务必备份重要文件。

(这个功能在桌面上并不常用。请自行承担风险。)

2018-11更新

TL:DR; 您可以在Ubuntu 18.10+或Linux Mint 19.1+中尝试fscrypt

看起来这个问题终于得到解决了。这是一个预防性指南:http://tlbdk.github.io/ubuntu/2018/10/22/fscrypt.html

我不会在这里引用具体的操作步骤,因为它需要一些技巧,而且您可能会丢失家目录中的数据。

警告:用户@dpg发出警告:“小心:我按照那个“预防性指南”的指示操作(在tty下进行),结果陷入无限循环登录。”

请将此指南仅用于教育目的。

接下来是我的原始答案:

2018-05的原始答案

简短版本:在Linux Mint 19 Tara中使用经典的主目录加密。

fscrypt对于主目录加密仍然存在问题。


如何设置 fscrypt 来加密我的 /home 目录,并在登录时进行解密?
这是我们许多人想要的东西。显然,Ubuntu 团队无法使 ecryptfs 在 Ubuntu 18.04 上无错误运行,并且也无法及时修复 fscrypt 中的错误以提供一个家庭加密选项。
对于 fscrypt,目前存在至少一个关键性错误,使其在家庭加密上无法使用: 此外,我们需要一种透明的身份验证/解锁方式,才能将其作为“旧版”ecryptfs类型家庭加密的现实替代方案。具体情况请参阅以下链接:

有了这些问题,你可以认为家庭加密在这一点上已经破解了。因此,我和我的同事们认为Ubuntu 18.04 18.04.1目前还没有完成,并希望家庭加密能够重新引入(使用新的、更好的fscrypt方法)在Ubuntu 18.04.1 18.04.2中。

在那之前,我们将继续使用Ubuntu 16.04。 我们已经将所有机器切换到Linux Mint 19 Tara,使用经典的家庭加密,采用ecryptfs请阅读Linux Mint 19 Tara发行说明中关于ecryptfs限制的“已知问题”部分,并查看是否可以接受:

(...) 请注意,在Mint 19和更新版本中,您的加密家目录不再在注销时卸载。

如果你尝试过使用 fscrypt 并发现它对你的需求无效,你可以在以下的 launchpad bug 上投票 "this bug affects me too"
请注意,fscrypt/ext4-crypt(未来的“加密主目录”)是最快的选项,而ecryptfs(旧版“加密主目录”)是最慢的选项。LUKS(“加密整个驱动器”)位于中间位置。
因此,全盘加密被“方便地”推荐。因为如果您有非常大的项目,包含许多小文件,经常使用修订管理,进行大规模编译等等,您会发现与旧版ecryptfs类型的主目录加密相比,加密整个驱动器的过度保护实际上是值得的。
最后,加密整个驱动器有多个缺点:
  • 访客账户
  • 家庭笔记本电脑上的私人账户
  • 使用类似PREY的反盗软件
令人困惑的是,Canonical决定在他们的LTS版本上宣布“我们不再需要这个了”,而这个版本被认为是他们更“严肃”的发行版。

2今天发布了Ubuntu 18.04.1版本,但仍存在一些问题。我希望在18.04.2版本中能够看到fscrypt的加入,但现在我的乐观情绪有所减弱。请及时更新! - Nonny Moose
2@NonnyMoose 更新了 - 请查看我帖子中间的 粗体 部分。 - Redsandro
fscrypt/issues/77现在已经修复了(至少问题已关闭)。 - Tim Richardson
3哇!当人们从16.04升级到18.04时,他们的~会发生什么事情呢? - MWB
1*buntu 18.10带有fscrypt版本0.2.4,并且上述的问题/错误已经解决。您可以使用fscrypt仅对/home进行加密。 - nikos.svnk
很棒的更新 @nikos.svnk。我还没有机会弄清楚这是如何工作的。 - Redsandro
2小心:我按照那个“预防指南”的指示操作(在tty下进行),结果陷入了无限登录循环。我在全新的18.10安装上尝试了两次,结果都一样。 - Peter
@dpg 感谢您对这种方法进行测试。如果可以的话,我会加上一条警告并引用您的直接话语。 - Redsandro
3如果有人在加密后陷入无限登录循环,但可以在tty中登录。在我的情况下,这是由于/home/myuser目录的所有者错误引起的。由于某种原因,它的所有者是root,所以将所有者更改为我的用户解决了这个问题。 - Peter
1我按照这个指南的说明操作,结果完美无缺。我使用的是Ubuntu 19.04版本。感谢提供链接! - Pavel Davydov
谢谢你告诉我们,@PavelDavydov! - Redsandro
1我似乎找到了在Ubuntu 18上使用ecryptfs的解决方案,但是这个讨论让我感到有些紧张。请查看我的评论和解释链接:https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1756840/comments/26 - Gabriel Staples
请查看我在此答案下的评论:https://askubuntu.com/a/1088709/327339。 - Gabriel Staples
我看到了“更新2020-02”,有了它,我成功地加密了家目录。如果Linux无法启动,你能告诉我如何恢复文件的指南吗? - Nefedov Efim
1@NefedovEfim 你需要手动添加密码保护程序。请参阅 https://github.com/google/fscrypt/issues/115#issuecomment-554243727 或 https://github.com/google/fscrypt/blob/master/README.md#troubleshooting 或 https://wiki.archlinux.org/index.php/Fscrypt 请注意,fscrypt仍然是<v1.0。 “我们不提供任何保证。” 自行承担风险。 :) - Redsandro

Panther在这里的回答可以看出,全盘加密会对所有内容进行加密,包括/home目录,而只加密特定目录(如/home)只有在您未登录时才会进行加密。
要对现有用户的主目录进行加密:
  • 首先退出该帐户,然后登录管理员帐户。
  • 安装用于此工作的加密工具:

    sudo apt install ecryptfs-utils cryptsetup
    

    launchpad bug中得知,ecryptfs-utils现在在universe仓库中。

  • 迁移该用户的主文件夹:

    sudo ecryptfs-migrate-home -u <user>
    

    接着输入该帐户的用户密码

  • 在重新启动之前,注销并登录到加密用户帐户中,以完成加密过程。

  • 在该帐户内打印并记录恢复密钥:

    ecryptfs-unwrap-passphrase
    
你现在可以重新启动并登录。一旦你满意了,你可以删除备份的主文件夹。
另外,如果你想创建一个带有加密主目录的新用户:
sudo adduser --encrypt-home <user>

更多信息请参考:man ecryptfs-migrate-homeman ecryptfs-setup-private

3感谢你的回答,ptetteh。我前几天尝试了那个方法,但是登录时似乎出现了问题。有时候会在登录界面卡住,导致我不得不重新启动。为了确保问题不是其他原因引起的,我重新安装了18.04,目前一切都正常。如果ecryptfs现在被认为不适合默认包含,我认为最好的办法是使用LUKS或fscrypt。 - elight24
1我在干净的安装(18.04.1)中成功实施了这个方法。我必须在“恢复模式”下进行。不需要解开,因为当你登录时,它会提醒你并要求你记下生成的密码短语。谢谢! - lepe
3ecryptfs在您的主目录中如果存在一些较长的路径名(> ~140个字符),将无法工作。请参见https://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs#32834 - Sebastian Stark
如果我没有备份空间,会成功吗? - 4xy
@elight24 这里情况完全一样。当我使用这个软件登录到一个带有加密目录的用户时,我的笔记本电脑就会卡住。 - scarface

个人而言,我几乎从不建议任何人在大多数情况下使用文件系统加密(FSE)。有几个原因,其中最重要的是存在更有效的替代方案。你们都在谈论只有两个选择,要么是FSE,要么是FDE(全盘加密)。然而,事实并非如此。实际上,还有另外两个选项,它们对OP来说都更有利,那就是文件容器加密和加密存档。
文件容器加密是像Veracrypt和现已停用的Truecrypt这样的软件所设计的。大多数文件压缩归档软件(如Winzip和7zip)在创建此类归档时都内置了容器加密选项。
这两种方法相比于FSE都有很多优势,最明显的是你不需要在不使用加密文件时保持它们挂载。这可以防止任何人能够绕过用户配置文件密钥和屏幕锁的保护来访问。此外,你可能会做一些愚蠢的事情,比如离开电脑时忘记锁屏,或者允许别人使用电脑,并希望他们不会窥视你隐藏的目录。此外,由于容器是可移动的,你可以轻松地一次性移动大量文件,而无需另外加密它们。

Veracrypt容器非常有用的一个优点是可以作为驱动器挂载,这样您就可以使用单独的文件系统对其进行格式化,最好选择非日志文件系统,如EXT2或FAT32。日志文件系统可能会向攻击者泄露信息。然而,如果您只是隐藏个人照片,这对您可能并不那么相关。但是,如果您拥有国家机密或受法律保护的数据,那可能会重要。您还可以设置它们在启动时自动挂载,如果使用密钥文件。然而,这不被推荐,因为密钥文件需要存储在比FSE用户配置文件键更不安全的地方。

两者都提供文件压缩功能。您还可以隐藏文件名,尽管在使用压缩存档时,并非总是如此,这取决于所使用的特定压缩算法。

就个人而言,我使用容器加密来加密不会移动的文件,并使用加密存档来加密将要移动或存储在云中的文件,因为它们的文件大小较小。

仍然可以使用容器加密来加密主目录。也许将加密密钥存储在YubiKey上?

无论如何,我只是想给大家提供一些其他帖子中没有提到的选择。请随意赞同或反对我所说的任何事情。

9嗨。我对你的“保姆”例子有一些评论:首先,在许多地方,人们可能默认认为普通保姆是十几岁的青少年,这使得在这样的帖子中引入这个类比有点令人不安。其次,我只想肯定加密有比隐藏罪恶秘密更好的用途。 - mwfearnley
容器是固定大小的,文件系统加密(fscrypt、eCryptfs、EncFS等)只占用与文件相同的空间,并且可以根据需要增长和缩小。证毕。另外,你似乎不知道eCryptfs只能加密主目录中的单个目录,并且只能在需要时解密。 - Xen2050
3说实话,这个回答很有用,但内容有冒犯之处。仅仅因为将加密与犯罪活动联系起来,仿佛媒体上已经不够多了一样。加密是为了保护免受犯罪活动的侵害。由于这个原因,我不能点赞。一旦编辑完成,我会删除这条评论。 - Todd
2请注意,如果您不能信任根(uid:0),则无法使用系统进行任何加密(无论是FSE、容器还是存档)。如果您打开加密并离开系统而不将其安全锁定,则所有加密系统都会受到攻击。此外,如果您没有加密整个文件系统,您必须了解,可能所有触及机密文件的应用程序都会在安全分区之外制作未加密副本。 - Mikko Rantalainen

如果你和我一样,在Ubuntu 16.04上进行了Ubuntu 18.04的全新安装,并且之前加密了你的/home目录,那么你会发现在安装后无法登录。你只需要安装与ecryptfs相关的软件包:sudo apt install ecryptfs-utils cryptsetup,然后重新启动并登录。
要安装这些软件包,你可以在Budgie加载后登录到一个备用的tty(Ctrl + Alt + F1),或者进入Linux恢复模式并从那里安装。