REflections

Back

在macOS中,可以利用PAM这一身份验证机制来让TouchID代替在终端提权时的认证。对于没有原生TouchID验证模块的Mac mini,也可以通过配置让Apple Watch代替验证。

如何让TouchID代替sudo密码认证?#

仅需三步:

Step 1 - 打开配置文件#

sudo vim /etc/pam.d/sudo_local
plaintext

输入你的密码进行权限验证(幸运的话这将是最后一次)。

Step 2 - 修改#

如果你看到

#auth       sufficient     pam_tid.so
plaintext

仅需删去前面的#即可。

pic desc

Step 3 - 验证#

在vim中保存并退出后(输入:wq!),新开一个terminal,输入sudo whoami来进行验证。如果成功弹出认证窗口,便可以关掉原来带有root权限的终端。


如果你不小心破坏了配置文件,可以使用以下命令复原:

sudo cp /etc/pam.d/sudo_local.template /etc/pam.d/sudo_local
plaintext

为什么这能行?#

PAM(Pluggable Authentication Modules,可插拔认证模块),是一套最初为 Unix 系统设计的灵活的身份验证机制,macOS 也采用了这一标准。sudo在验证用户身份时,会调用PAM进行认证。认证过程中会先读取配置文件/etc/pam.d/sudo。其第一行包含了我们刚刚修改过的sudo_local配置文件。我们新增配置的含义是:对于每一次auth(用户身份认证),如果pam_tid.so(TouchID验证模块)验证成功,且前面没有任何required模块失败,PAM就会返回成功(sufficient)。随后sudo继续执行后面的验证(如检查/etc/sudoers)。

如何将Apple Watch也接入认证?#

根据上述原理,我们可以通过自行添加pam_xxx.so认证模块,来让手表也接入认证。

可以使用以下脚本一键编译并安装我们需要的认证模块,其来自于: https://github.com/mostpinkest/pam-watchid

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/mostpinkest/pam-watchid/HEAD/install.sh)" -- enable
plaintext

这会添加pam_watchid.so认证模块。其通过调用kLAPolicyDeviceOwnerAuthenticationWithBiometricsOrCompanion(允许使用生物识别或配套设备来验证设备所有者)API来接入Apple Watch进行认证。

pic desc

连按手表的侧边按钮即可通过认证。

其他事项#

为什么通过sudo能以root权限执行命令?#

$ ls -l /usr/bin/sudo
---s--x--x 1 root root 190832 Jul  3  2025 /usr/bin/sudo
plaintext

sudo带有的s属性代表Set Owner User ID,这意味着无论哪个普通用户执行这个文件,该程序在执行期间都会临时获得文件所有者(这里是root)的权限。在验证身份后,sudo利用已有的root权限派生出新的子进程,将其身份设定为root,然后在这个子进程中执行真正想执行的命令。

利用TouchID或Apple Watch认证sudo
https://blog.reflections.ink/blog/new-blog
Author REflection
Published at February 19, 2026
Comment seems to stuck. Try to refresh?✨