我有一个 ubuntu MATE 设置 18.04 LTS (GNU/Linux 4.15.0-23-generic x86_64) 我想要一个加密的 $HOME,而其余部分保持未加密。此外,我决定使用带有 zstd 压缩算法的 btrfs(“为什么”超出了这个问题的范围)。
由于 PC 的使用方式,需要等待互联网连接,直到需要解密密码,此时,可能会以任何形式向用户询问密码。
一开始,我遇到了以下症状:
如果我把整个都/home/myUser
加密了,我就无法登录。输入密码后,我就无能为力了……直到超时,lightdm 放弃登录。如果我使用不同的 tty,我也会无能为力,只是 $HOME 会更改为“/”
如果我在 fstab 中将挂载目录更改为内部的某个位置$HOME
,我可以正常登录,但是当我想要访问加密目录时,系统从未提示我填写密码(尽管执行 ls 时该目录是可见的)。
经过调查,我发现:
- 如果我成功登录,
- 尝试访问
/home/myUser/crypt
(见下文) - 然后
systemd-tty-ask-password-agent --query
在终端运行,
有一个密码等待填写。
我还注意到,如果我不运行终端,而是停止 lightdm 并停留在 tty7 上,则会出现“请使用 systemd-tty-ask-password-agent 工具输入密码!”的文本。
此时,我无法在该 tty 中返回 lightdm。相反,我必须使用不同的 tty 登录,填写密码,现在挂载已完成,一切正常运行。
我的目标是在需要挂载目录时,让 GUI 密码提示输入密码。任何程序都可以启动挂载,但我需要用户直观地获得提示,而无需运行额外的工具。
我还尝试制作一个keyscript
与 crypttab 一起使用的程序,它将启动命令提示符并提示输入密码,但它无法启动。我猜是因为没有密钥文件。
下面,我使用的是noauto,x-systemd.automount
但我也可以使用它_netdev
,并得到与上面几乎相同的症状。
当使用 时_netdev
,唯一的区别是加密密码提示(作为文本)在 lightdm 启动 Xorg 之前在屏幕上闪烁。
/etc/fstab
/dev/mapper/encryptedHome /home/myUser btrfs user,noauto,x-systemd.automount,x-systemd.device-timeout=10,compress=zstd,lazytime,relatime 0 0
/etc/fstab(允许我登录的替代尝试):
/dev/mapper/encryptedHome /home/myUser/crypt btrfs user,noauto,x-systemd.automount,x-systemd.device-timeout=10,compress=zstd,lazytime,relatime 0 0
在/etc/crypttab中
encryptedHome UUID="92ab7f24-c744-4f1a-8363-c1fa157d1c12" - luks,noauto
笔记:在我的 Linux 启动标志中,我删除了该splash
选项;因此,在 Xorg 启动之前,我都能看到所有的 tty 文本。
答案1
为了重复使用登录时输入的密码并加密您的家,同时仅输入一次密码,一个可能的解决方案是使用pam_mount
https://wiki.archlinux.org/index.php/pam_mount
首先,你可以使用以下方式安装apt install libpam-mount
然后,您需要配置 pam_mount 以重新使用密码。
为此,创建一个文件,/etc/security/pam_mount.conf.xml
内容如下:
<volume user="user" fstype="crypt" path="/dev/disk/by-partuuid/96au7f24-gbshmec6wwabhh30" mountpoint="/dev/mapper/user_home"/>
<volume user="user" fstype="auto" path="/dev/mapper/user_home" mountpoint="/home/user"/>
您可能只使用一个卷标签就可以完成所有操作,但我无法做到这一点,因为我需要进行绑定挂载。
请注意,您可能需要使用一些选项,设置为标签的属性volume
,例如:
options="bind,rw,user,exec,suid,noauto,lazytime,relatime"
您可以在手册页中了解有关每个内容的更多信息mount
。
最后创建文件/etc/pam.d/system-login
并写入以下内容:
#%PAM-1.0
auth required pam_tally.so onerr=succeed file=/var/log/faillog
auth required pam_shells.so
auth requisite pam_nologin.so
auth optional pam_mount.so
auth include system-auth
account required pam_access.so
account required pam_nologin.so
account include system-auth
password optional pam_mount.so
password include system-auth
session optional pam_loginuid.so
session optional pam_keyinit.so force revoke
session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
session optional pam_mount.so
session include system-auth
session optional pam_motd.so motd=/etc/motd
session optional pam_mail.so dir=/var/spool/mail standard quiet
-session optional pam_systemd.so
session required pam_env.so
我不清楚它们各自的具体功能,但这就是我所需要的,以便安装能够按照我的要求成功。