pam_zfs_key.so.1 [create] [homes=]
pam_zfs_key 模块用于实现 pam_sm_setcred(3PAM) 和 pam_sm_chauthtok(3PAM)。
通过 pam_zfs_key 模块可以装入和更改在用户起始目录位置挂载的已加密文件系统的 ZFS 加密口令短语。验证服务模块必须同时实现 pam_sm_authenticate() 和 pam_sm_setcred()。
该模块中的 pam_sm_authenticate() 始终返回 PAM_IGNORE。如果位于不同位置,则可以使用模块选项 homes= 指定该位置。它是一个 ZFS 数据集名称,而不是挂载点,该挂载点通常为 /export/home/。
该 ZFS 数据集名称的最后一部分必须与 PAM_USER 的值匹配,即用户登录名。如果用户起始目录是一个启用了加密的本地 ZFS 文件系统,而 ZFS 密钥源属性设置为 passphrase,prompt,则在 pam_sm_setcred() 上,此模块将按如下方式管理密钥:
尝试使用 umount 取消挂载文件系统并卸载密钥。该操作通常会失败,因为仍有某些进程使用用户起始目录作为当前工作目录。force 模块选项用于首先尝试强制取消挂载。
尝试使用 PAM_AUTHTOK 的值为 ZFS 数据集装入密钥并进行挂载。
如果 PAM_AUTHTOK 不是正确的口令短语,则系统将向用户发出一次提示,要求提供备用项。该值不会存储在 PAM_AUTHTOK 中,即使它是作为用户起始目录的 ZFS 数据集的正确口令短语。它等效于:
zfs key -l rpool/export/home/$USER
如果用户没有 ZFS 文件系统,但提供了 create 模块选项,则会创建一个新的 ZFS 文件系统。在这种情况下,ZFS 加密属性将缺省为 on,除非为该模块设置了 encryption= 属性以覆盖该值。
如果未提供 create 模块选项,并且用户也没有 ZFS 文件系统,则该模块将返回 PAM_IGNORE。
新创建的 ZFS 文件系统会为创建该文件系统的用户指定以下 ZFS 委托:key,keychange,mount。在这种情况下,keysource 始终设置为 passphrase,prompt。
如果在更改口令时调用 pam_sm_chauthtok(3PAM),该模块将尝试更改 ZFS 数据集的口令短语,以便与 PAM_AUTHTOK 中的值匹配。该操作等效于运行以下命令:
zfs key -c rpool/export/home/$USER
该命令要求用户具有 keychange 委托,因为口令更改通常以用户身份运行。
支持以下挂载选项:
创建新的 ZFS 数据集
设置 create 的 ZFS 加密属性
执行 PAM_DELETE_CRED 时,尝试使用 MS_FORCE 对数据集执行 umount2(2)。
作为用户起始目录的 ZFS 数据集的备用位置。缺省值为 rpool/export/home。
不提供任何错误消息或警告。
以下示例将在缺省模式下使用 pam_zfs_key。
gdm auth requisite pam_authtok_get.so.1 gdm auth required pam_dhkeys.so.1 gdm auth required pam_unix_cred.so.1 gdm auth required pam_unix_auth.so.1 gdm auth optional pam_zfs_key.so.1 other password required pam_dhkeys.so.1 other password requisite pam_authtok_get.so.1 other password requisite pam_authtok_check.so.1 other password required pam_authtok_store.so.1 other password optional pam_zfs_key.so.1示例 2 指定备用 ZFS 数据集
以下示例将为起始目录文件系统指定备用 ZFS 数据集位置。如果没有使用 aes-256-gcm 作为 ZFS 加密属性设置,则应创建新条目。
gdm auth requisite pam_authtok_get.so.1 gdm auth required pam_dhkeys.so.1 gdm auth required pam_unix_cred.so.1 gdm auth required pam_unix_auth.so.1 gdm auth optional pam_zfs_key.so.1 homes=tank/users \ create encryption=aes-256-gcm示例 3 强制挂载 ZFS 数据集
以下示例将强制挂载 ZFS 数据集,并确保口令短语始终与登录口令同步。
gdm auth requisite pam_authtok_get.so.1 gdm auth required pam_dhkeys.so.1 gdm auth required pam_unix_cred.so.1 gdm auth required pam_unix_auth.so.1 gdm auth required pam_zfs_key.so.1 other password required pam_dhkeys.so.1 other password requisite pam_authtok_get.so.1 other password requisite pam_authtok_check.so.1 other password requisite pam_zfs_key.so.1 other password required pam_authtok_store.so.1
有关下列属性的说明,请参见 attributes(5):
|
libpam(3LIB) 中的接口仅在多线程应用程序中的每个线程都使用自己的 PAM 句柄时才是多线程安全的。
zfs(1M)、umount2(2)、pam.conf(4)、libpam(3LIB)、pam(3PAM)、pam_sm_chauthtok(3PAM)、pam_sm_setcred(3PAM)、attributes(5)