Systemd 将改变你的 Linux 主目录的工作方式

systemd
背后的团队希望您采用一种新的方式来管理主目录。称其为“新方式”是轻描淡写——这是 Linux 真正的范式转变。以下是您需要了解的有关 systemd-homed
的所有信息,它很可能会出现在您附近的 Linux 发行版中。
争议并不陌生
systemd
于 2010 年推出时,Linux 社区分为三个阵营。一些人认为这是一个改进,而另一些人则认为这是一个有缺陷的设计,不符合 Unix 哲学。有些人不在乎一种方式。
反对者的强烈反对是响亮的、激烈的,在某些情况下,甚至是狂热的。 Red Hat 的软件工程师兼 systemd 的联合开发人员 Lennart Poettering 甚至收到了死亡威胁。
鼓吹对 Poettering 实施暴力的歌曲被发布在 YouTube 上,网站似乎试图强迫 Linux 用户抵制 systemd
。他的合作开发者 Kay Sievers 也受到了批评和辱骂,但 Poettering 无疑首当其冲。
然而,在八个月内,Fedora 开始使用 systemd
。到 2013 年底,Arch、Debian、Manjaro 和 Ubuntu 都已迁移到 systemd
。当然,开源的荣耀在于,如果你不喜欢某些东西,你可以 fork 源代码并用它来做你自己的事情。新发行版(如 Devuan,它是 Debian 的一个分支)的创建完全是为了避免使用 systemd
。
您的 $HOME 目录
在 Linux 目录结构中,您所做的一切都驻留在“/home”目录中。您的数据文件、图像、音乐和整个个人目录树都存储在以您的用户帐户命名的目录中。
应用程序的设置存储在隐藏的“点目录”中的主文件夹中。如果文件或目录名称的第一个字符是句点 (.),则它会被隐藏。因为这些设置存储在本地而不是中央注册表中——并且因为您的主目录的备份包括这些隐藏的文件和文件夹——您的所有设置也会得到备份。
当您恢复备份并启动 LibreOffice 或 Thunderbird 等应用程序时,它会查找其隐藏目录。它还会找到您的文档首选项、工具栏设置和任何其他自定义项。 Thunderbird 会找到您的电子邮件帐户信息和电子邮件。您不必经历慢慢设置每个应用程序的痛苦。
您可以使用带有 -a
(全部)选项的 ls
来查看隐藏的文件和目录。首先,键入以下内容:
ls
这向您显示了常规文件和目录。接下来,键入以下内容:
ls -a
现在,您可以看到隐藏的文件和目录。

因为它是安装中最宝贵的部分,所以通常将“/home”目录挂载在它自己的分区或单独的硬盘驱动器上。这样,如果操作系统或它所在的分区发生灾难性的事情,你可以重新安装你的 Linux 发行版或换一个新的。然后,您只需将现有的主分区重新挂载到“/home”即可。
关于你的数据
您的主目录不仅存储您的数据;它还存储有关您的信息。包括您的数字身份的某些属性。例如,您的“.ssh”目录存储有关您与其他计算机建立的远程连接以及您生成的任何 SSH 密钥的信息。
其他系统属性,例如您的帐户用户名、密码和唯一用户 ID,存储在其他地方的文件中,例如“/etc/passwd”和“/etc/shadow”。任何人都可以阅读其中的一些内容,但其他人只能由具有 root 权限的人阅读。
“/etc/passwd”文件的内容如下所示:
cat /etc/passwd

systemd-homed 的变化
systemd-homed
更改的目的是提供一个完全可移植的主目录,其中存储了您的数据和 Linux 数字身份。您的 UID 和所有其他标识和身份验证机制将仅存储在您的主目录中。
由于他们的“所有鸡蛋都放在一个篮子里”的设计,主目录是加密的。它们会在您登录时自动解密,并在您注销时再次加密。首选方法是使用 Linux 统一密钥设置 (LUKS) 磁盘加密。但是,还有其他可用的方案,例如 fscrypt。
JavaScript 对象表示法 (JSON) 用户记录将您的所有身份信息存储在名为“~/.identity”的目录中。它使用您无法控制的密钥进行加密签名。
每个人的主目录都挂载在环回设备上,类似于挂载 snap
应用程序的方式。这样主目录中的目录树就可以作为操作系统目录树的无缝部分出现。挂载点默认为“/home/$USER.homedir”(“$USER”替换为用户的帐户名)。
有什么好处?
因为您的主目录成为所有数据的安全封装,您甚至可以将主目录放在可移动设备上。例如,您可以使用 USB 驱动器在您的工作和家庭计算机或任何其他 systemd-homed
计算机之间移动它。
这就是 Poettering 所说的“完全可移植的主目录”。他说,即使你不想在便携式设备上移动你的主目录,这也会让升级和迁移变得更容易,并提高安全性。
它删除了他所谓的“sidecar 数据库”,其中包含 Poettering 认为应该集中处理的有关您的重要信息片段。 “/etc/passwd”和“/etc/shadow”文件包含身份验证信息和散列密码。但是,它们还包含您的默认 shell、通用电气综合运营主管 (GECOS) 字段等信息。
Poettering 表示,这些元数据应该合理化,并存储在每个人的主目录中的 JSON 记录中有意义的组中。
管理您的新 $HOME
systemd-homed
服务通过新的 homectl
命令行工具进行控制。
有创建用户和主目录以及为每个用户设置存储限制的选项。您还可以设置密码,将某人锁定在他的帐户之外,或完全删除帐户。可以查看用户,也可以读取他们的 JSON 用户记录。
还可以为每个用户设置时区和其他基于位置的信息。您可以指定默认 shell,甚至设置环境变量,以便在有人登录时它们处于特定状态。
如果您查看“/home”目录,您会看到 systemd-homed
托管条目,如下所示,用户名后附加了“.homedir”:
/home/dave.homedir
请记住,这只是一个挂载点。实际加密主目录的位置在别处。
限制和问题
systemd-homed
仅供人类用户帐户使用。它无法处理 UID 小于 1,000 的用户帐户。换句话说,root、daemon、bin 等不能使用新方案进行管理。总是需要管理用户的标准方法。因此,systemd-homed
不是一个全局解决方案。
有一个已知的第 22 条军规需要解决。正如我们之前提到的,一个人的主目录在他或她登录时会被解密。但是如果有人通过 SSH 远程访问计算机,则无法引用主目录中的 SSH 密钥,因为主目录在此之前仍然是加密的人登录。当然,在他或她可以登录之前,需要 SSH 密钥进行身份验证。
这是 systemd-homed
团队公认的问题,但我们找不到有关此修复的任何参考。我们相信他们会想出一个解决方案;如果他们不这样做,那将是一个惊人的失败。
假设有人将他的主目录传输到一台新机器上。如果 UID 已经被其他人在新机器上使用,他会自动分配一个新的 UID。当然,他的所有文件都必须将其所有权重新分配给新的 UID。
目前,这是通过递归自动应用 chown -R
命令来处理的。当开发出更优雅的方案时,这可能会在未来以不同的方式处理。这种粗暴的方法没有考虑作为其他用户运行的守护进程和进程。
这是什么时候发生的?
这正在发生。代码更改于 2020 年 1 月 20 日提交,它们包含在 2020 年 4 月随 Ubuntu 20.04 一起发布的 systemd
的构建 245 中。
要检查您拥有的版本,请键入以下内容:
systemd --version

不过,homectl
命令尚未出现。 Ubuntu 20.04 使用传统的 /home 目录,不使用 systemd-homed。
当然,由各个发行版决定何时包含和支持 systemd-homed
和 homectl
。
因此,任何人都无需进入干草叉和燃烧的火把模式。因为管理用户和主目录的标准方法将保留,我们仍然有选择。