macOS 一键开启 sudo 的 Touch ID 验证

自动配置 pam_tid.so,让支持 Touch ID 的 Mac 使用指纹授权 sudo。

在支持 Touch ID、且已录入指纹的 Mac 上,可以通过 PAM 的 pam_tid.so 模块为 sudo 增加指纹验证。下面两种方法选择一种执行。

一键修改 sudo 配置

在 macOS 的 Zsh 或 Bash 终端中执行:

1
sudo sed -i ".bak" '2s/^/auth       sufficient     pam_tid.so\'$'\n/g' /etc/pam.d/sudo

命令使用 macOS 自带的 BSD sed,在 /etc/pam.d/sudo 第二行前插入:

1
auth       sufficient     pam_tid.so

原配置自动备份为 /etc/pam.d/sudo.bak。$'\n' 由 Zsh/Bash 转换为换行,不能直接照搬到不支持这种语法的 Shell。

此命令适用于尚未添加该规则的配置;重复执行会重复插入,并更新备份。直接修改的系统文件可能在 macOS 更新时被替换。

可选:使用系统的 sudo_local 配置

如果 /etc/pam.d/sudo 包含 auth include sudo_local,且系统提供 /etc/pam.d/sudo_local.template,可以使用下面的一键方法。系统模板将 sudo_local 定义为供本地配置使用、在系统更新后保留的文件:

1
sudo sh -c 'test -e /etc/pam.d/sudo_local || cp /etc/pam.d/sudo_local.template /etc/pam.d/sudo_local' && sudo sed -i ".bak" 's/^#\(auth[[:space:]]*sufficient[[:space:]]*pam_tid\.so\)/\1/' /etc/pam.d/sudo_local

命令在 sudo_local 不存在时复制系统模板,然后自动取消模板中 Touch ID 规则的注释,备份为 /etc/pam.d/sudo_local.bak。已有文件会保留;该方法要求文件中包含模板的对应规则。

验证效果

1
2
sudo -k
sudo whoami

sudo -k 清除已有的授权缓存,再次执行时可测试指纹验证,成功后输出 root。Touch ID 需要本机支持的交互环境,SSH 等会话不能直接等同于本机终端的指纹验证。

配置依据:macOS 系统文件 /etc/pam.d/sudo 与 /etc/pam.d/sudo_local.template。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计