dm-crypt/登录时挂载
< Dm-crypt
可以配置 PAM 和 systemd,以便在其所有者登录时自动挂载 dm-crypt 加密的 home 分区,并在他们注销时卸载它。
本教程假定您已按照 Dm-crypt/加密非根文件系统 中的描述创建了加密分区。
注意
- 您需要为您的用户帐户和 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
的结果