使用 Jamf Pro Blueprints 为 sudo 启用 Touch ID 认证

本文详细介绍了如何利用 Jamf Pro 的 Blueprints 功能,通过配置可插拔认证模块 (PAM) 文件,在企业环境中为 sudo 命令批量启用 Touch ID 认证,替代传统的脚本部署方法。

使用 Jamf Pro Blueprints 为 sudo 启用 Touch ID 认证

苹果在 macOS Sonoma 中增加了一项功能:一个可插拔认证模块 (PAM) 配置选项,用于为 sudo 工具启用 Touch ID 认证,且此配置能持久保存,不会被软件更新覆盖。

要启用此选项,需要在 macOS Sonoma 及更高版本上操作。系统中存在一个 /etc/pam.d/sudo_local.template 文件,其内容如下所示:

1
2
3
4
5
# sudo_local: local config file which survives system update and is included for sudo

# uncomment following line to enable Touch ID for sudo

#auth       sufficient     pam_tid.so

/etc/pam.d/sudo_local.template 文件复制为 /etc/pam.d/sudo_local,并取消注释指定的行,即可让 Touch ID 作为 sudo 工具的认证方式。

1
2
3
4
5
# sudo_local: local config file which survives system update and is included for sudo

# uncomment following line to enable Touch ID for sudo

auth       sufficient     pam_tid.so

许多 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 文件如下所示:

1
2
3
4
5
# sudo_local: local config file which survives system update and is included for sudo

# uncomment following line to enable Touch ID for sudo

#auth       sufficient     pam_tid.so

要准备所需的 PAM 配置,可以使用下面描述的过程:

  1. /etc/pam.d/sudo_local.template 文件复制到一个方便的位置。
  2. 取消最后一行的注释。
  3. 保存文件并将其重命名为 sudo_local

新创建的 sudo_local 文件应类似于下图所示:

1
2
3
4
5
# sudo_local: local config file which survives system update and is included for sudo

# uncomment following line to enable Touch ID for sudo

auth       sufficient     pam_tid.so

要通过 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 哈希值,因此使用类似下图的命令应能提供该信息:

1
sha256sum /path/to/enable_touch_id_for_sudo.zip

假设我们的 SHA-256 哈希值是 0ac032ffc0d173ec102ee2d580de2c7511ab59606a56239b8c9a0fd88452c368,运行上述命令时,您应该看到如下输出:

1
2
3
4
5
username@ZPVVQN9WPH ~ % sha256sum /Users/username/Desktop/sudoers_configuration.zip 

0ac032ffc0d173ec102ee2d580de2c7511ab59606a56239b8c9a0fd88452c368  /Users/username/Desktop/sudoers_configuration.zip

username@ZPVVQN9WPH ~ % 

3. 一个可以无需认证即可下载该 zip 文件的位置。 在此示例中,我在亚马逊网络服务中设置了一个名为 75d831079efb4d02ada44eed4f8ae093 的 S3 存储桶,并将 enable_touch_id_for_sudo.zip 文件设置为可从该 S3 存储桶公开访问。

一旦我准备好以上所有内容,就可以在 Jamf Pro 中设置一个 Blueprint,将 Touch ID PAM 配置文件作为服务配置文件进行部署。

  1. 登录 Jamf Pro。

  2. 选择 Blueprints。

  3. 单击“服务配置”。

  4. 根据提示为其命名。在此示例中,我使用“Touch ID PAM Configuration”。

  5. 选择一个 Jamf Pro 智能或静态组。在此示例中,我选择了一个名为“Touch ID PAM Configuration Deployment Group”的静态组。

  6. 提供下载 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

配置好所有内容后,单击“部署”按钮,将更改部署到您想要管理的 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 认证的想法。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计