macOS 终端 sudo 指纹认证(Touch ID)
macos, sudo, touchid, 终端
原理
sudo 的认证走系统 PAM(可插拔认证模块),指纹由 Secure Enclave 校验,和终端模拟器无关。所以 kitty、Terminal.app、iTerm2 全都支持,kitty 无需任何额外配置。
现代方法(macOS 14 Sonoma 及以后)
苹果官方提供 /etc/pam.d/sudo_local,系统更新不会覆盖(旧方法改 /etc/pam.d/sudo 每次升级都会重置)。
# 1. 复制模板
sudo cp /etc/pam.d/sudo_local.template /etc/pam.d/sudo_local
# 2. 编辑,去掉第 3 行行首的 #
sudo nano /etc/pam.d/sudo_local
最终内容:
# 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
保存后开新终端窗口验证:
sudo ls
会弹指纹框;指纹连续失败 5 次或取消时回落为密码。
旧方法(macOS 13 Ventura 及更早)
直接改 /etc/pam.d/sudo,在文件最顶部加一行:
auth sufficient pam_tid.so
kitty + tmux 注意
tmux 会脱离 Aqua 图形会话,指纹框不弹。需要装 pam-reattach 转发:
brew install pam-reattach
然后把 sudo_local 改成两行:
auth sufficient pam_reattach.so
auth sufficient pam_tid.so
已知限制
- SSH 远程登录到这台 Mac 时不支持指纹(提示框只在本地图形会话出现)。
- 需要机器有 Touch ID 硬件,且已在「系统设置 → 触控 ID」录入指纹。
- 大版本升级后偶尔指纹失效:检查
sudo_local是否还在、内容是否被重置。