使用 Jamf Pro Blueprints 为 sudo 启用 Touch ID 认证
苹果在 macOS Sonoma 中增加了一项功能:一个可插拔认证模块 (PAM) 配置选项,用于为 sudo 工具启用 Touch ID 认证,且此配置能持久保存,不会被软件更新覆盖。
要启用此选项,需要在 macOS Sonoma 及更高版本上操作。系统中存在一个 /etc/pam.d/sudo_local.template 文件,其内容如下所示:
|
|
将 /etc/pam.d/sudo_local.template 文件复制为 /etc/pam.d/sudo_local,并取消注释指定的行,即可让 Touch ID 作为 sudo 工具的认证方式。
|
|
许多 Mac 管理员编写了脚本来将此 PAM 配置应用到 Mac 上,但似乎没有不依赖脚本的好方法。然而,作为苹果在 WWDC 2023 上宣布声明式设备管理 (DDM) 的一部分,苹果宣布 DDM 管理包含管理不同系统服务的防篡改系统配置文件集的能力。截至目前,macOS 中内置的以下服务可以这种方式进行管理:
- sshd
- sudo
- PAM
- CUPS
- Apache httpd
- bash
- zsh
Jamf Pro 的 Blueprints 通过“服务配置文件”组件支持管理这些服务。由于为 sudo 启用 Touch ID 认证是使用 PAM 配置文件管理的,这意味着可以通过 Blueprints 来实现。更多详情,请参见下文。
默认情况下,macOS Tahoe 26.1 附带的 /etc/pam.d/sudo_local.template 文件如下所示:
|
|
要准备所需的 PAM 配置,可以使用下面描述的过程:
- 将
/etc/pam.d/sudo_local.template文件复制到一个方便的位置。 - 取消最后一行的注释。
- 保存文件并将其重命名为
sudo_local。
新创建的 sudo_local 文件应类似于下图所示:
|
|
要通过 Blueprints 部署此更改,需要三样东西。
1. 一个包含相关配置文件的目录和文件结构的 zip 文件。
PAM 配置文件存储在 /etc 目录中,其下有一个名为 pam.d 的目录,pam.d 目录内有一个名为 sudo_local 的文件。因此,需要一个包含名为 etc 的目录,其内有一个名为 pam.d 的目录,pam.d 目录内有一个名为 sudo_local 的文件的 zip 文件。
在此示例中,我们将 zip 文件命名为 enable_touch_id_for_sudo.zip。
2. zip 文件的 SHA-256 哈希值
您可以使用 sha256sum 命令行工具获取 zip 文件的 SHA-256 哈希值,因此使用类似下图的命令应能提供该信息:
|
|
假设我们的 SHA-256 哈希值是 0ac032ffc0d173ec102ee2d580de2c7511ab59606a56239b8c9a0fd88452c368,运行上述命令时,您应该看到如下输出:
|
|
3. 一个可以无需认证即可下载该 zip 文件的位置。
在此示例中,我在亚马逊网络服务中设置了一个名为 75d831079efb4d02ada44eed4f8ae093 的 S3 存储桶,并将 enable_touch_id_for_sudo.zip 文件设置为可从该 S3 存储桶公开访问。
一旦我准备好以上所有内容,就可以在 Jamf Pro 中设置一个 Blueprint,将 Touch ID PAM 配置文件作为服务配置文件进行部署。
-
登录 Jamf Pro。
-
选择 Blueprints。
-
单击“服务配置”。
-
根据提示为其命名。在此示例中,我使用“Touch ID PAM Configuration”。
-
选择一个 Jamf Pro 智能或静态组。在此示例中,我选择了一个名为“Touch ID PAM Configuration Deployment Group”的静态组。
-
提供下载
enable_touch_id_for_sudo.zip文件所需的信息。在此示例中,使用了以下信息:- 数据 URL:
https://75d831079efb4d02ada44eed4f8ae093.s3.us-east-1.amazonaws.com/enable_touch_id_for_sudo.zip - SHA-256 哈希值:
0ac032ffc0d173ec102ee2d580de2c7511ab59606a56239b8c9a0fd88452c368 - 服务定义:
PAM
- 数据 URL:
配置好所有内容后,单击“部署”按钮,将更改部署到您想要管理的 Mac。
部署后,Jamf Pro 中的 Blueprints 屏幕应显示新创建的“Touch ID PAM Configuration”Blueprint 已部署。
在您的受管设备上,可以通过单击注册配置文件,然后滚动到底部来验证新的 Touch ID PAM 配置是否已部署。您应该会看到一个“设备声明”部分,其中列出了“配置文件:com.apple.pam”。
如果您单击“配置文件:com.apple.pam”列表,它应提供存储新 Touch ID PAM 配置文件的防篡改目录的路径。这应该是以下位置:
/private/var/db/ManagedConfigurationFiles/com.apple.pam
该目录内将是 etc 目录,其中包含名为 pam.d 的目录,pam.d 目录内有您为 Blueprint 的 zip 文件配置的名为 sudo_local 的文件。新的 Touch ID PAM 配置的完整文件路径应为:
/private/var/db/ManagedConfigurationFiles/com.apple.pam/etc/pam.d/sudo_local
您将无法写入此位置,因为它受系统完整性保护 (SIP) 保护,但您应该能够读取该文件并验证内容是否符合预期。
您现在也应该能够验证在使用 sudo 命令行工具时,Touch ID 认证是否正常工作。
感谢我的同事 Matt Vlasach 提出并分享这个使用 Blueprints 为 sudo 启用 Touch ID 认证的想法。