dm-crypt/登录时挂载
外观
可以通过配置 PAM 和 systemd,在用户登录时自动挂载 dm-crypt 加密的家目录分区,并在用户注销时自动卸载。
本教程假设您已经创建了加密分区,具体方法请参阅 Dm-crypt/Encrypting a non-root file system。
注
- 您需要使用与用户账户相同的密码以及 LUKS 的密码。
- 在所有示例中,请将
username替换为您的用户名,1000替换为您的用户 ID,PARTITION替换为您的加密分区设备名称。
登录时解锁
可以使用 pam_exec 在登录时解锁设备。编辑 /etc/pam.d/system-login,在 auth include system-auth 之后添加下面加粗显示的行。
/etc/pam.d/system-login
... auth include system-auth auth optional pam_exec.so expose_authtok /etc/pam_cryptsetup.sh ...
然后创建上述提到的脚本。
/etc/pam_cryptsetup.sh
#!/bin/sh
CRYPT_USER="username"
PARTITION="/dev/sdXY"
NAME="home-$CRYPT_USER"
if [ "$PAM_USER" = "$CRYPT_USER" ] && ! [ -e "/dev/mapper/$NAME" ]; then
/usr/bin/cryptsetup open "$PARTITION" "$NAME"
fi
使脚本可执行。
自动挂载和卸载
systemd-logind 会在用户至少有一个活动会话时维护 user@1000.service。它会在第一次成功登录后自动启动,并在最后一个会话注销后停止。因此,我们可以为映射的卷创建并 启用 一个 systemd.mount(5) 单元,并将其连接到 user@1000.service,以便它自动挂载和卸载。
/etc/systemd/system/home-username.mount
[Unit] Requires=user@1000.service Before=user@1000.service [Mount] Where=/home/username What=/dev/mapper/home-username Type=btrfs Options=defaults,relatime,compress=zstd [Install] RequiredBy=user@1000.service
卸载后锁定
卸载后,设备仍将处于解锁状态,可以直接挂载而无需重新输入密码(关机或重启会锁定分区,因为密钥已从 RAM 中清除,但仅卸载不会)。您可以创建并 启用 一个在设备解锁时启动(BindsTo=dev-mapper-home\x2dusername.device)并在设备卸载后停止(Requires,Before=home-username.mount)的服务,并在过程中锁定设备(ExecStop=cryptsetup close)。
/etc/systemd/system/cryptsetup-username.service
[Unit] DefaultDependencies=no BindsTo=dev-PARTITION.device After=dev-PARTITION.device BindsTo=dev-mapper-home\x2dusername.device Requires=home-username.mount Before=home-username.mount Conflicts=umount.target Before=umount.target [Service] Type=oneshot RemainAfterExit=yes TimeoutSec=0 ExecStop=/usr/bin/cryptsetup close home-username [Install] RequiredBy=dev-mapper-home\x2dusername.device
注意
dev-PARTITION 是 systemd-escape -p /dev/PARTITION 的结果。