我不太喜欢安装第三方 sudo 工具的想法,所以我决定使用 /etc/pam.d/sudo 技巧而不是使用 sudo-touchid,效果很好。我将 iTerm2 与 zsh 一起使用,使用这种设置,它可以正常工作。但是当我使用 tmux(使用 reattach-to-user-namespace default 命令)时,sudo 总是要求输入密码。有人知道如何解决这个问题吗?
答案1
我遇到了同样的问题。令人惊讶的是,Touch ID 在 Apple 的 GNU 屏幕发行版中确实有效,在查看其实现后,它似乎screen
附加到用户的每个会话命名空间,而不是每个用户的命名空间。
以下补丁将此方法移植到tmux
并reattach-to-user-namespace
为我修复了该问题:
- https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/pull/70
- https://github.com/tmux/tmux/pull/1434
编辑:由于这些补丁导致了一些技术问题(如拉取请求中所述),我改为使用自定义 PAM 模块在运行模块之前重新连接到用户的每个会话命名空间来解决问题pam_tid
:https://github.com/fabianishere/pam_reattach
答案2
brew install pam-reattach
然后使用这个 sudo 包装器自动添加必要的配置(因为 macOS 会在更新时重置配置)(请注意,如果这破坏了您的设置,您将陷入困境,因此也许只需手动编辑文件并立即验证它可能会更好):
sudo () {
unset -f sudo
if [[ "$(uname)" == 'Darwin' ]]
then
if ! command grep 'pam_tid.so' /etc/pam.d/sudo --silent
then
command sudo sed -i -e '1s;^;auth sufficient pam_tid.so\n;' /etc/pam.d/sudo
fi
if ! command grep 'pam_reattach.so' /etc/pam.d/sudo --silent
then
command sudo sed -i -e '1s;^;auth optional pam_reattach.so\n;' /etc/pam.d/sudo
fi
fi
command sudo "$@"
}
答案3
解决方案是使用pam_reattach
来自的模块https://github.com/fabianishere/pam_reattach/tree/master如前面的答案所述。
brew install pam_reattach
需要注意的是,在今天的 M1+ Mac 中,brew
模块安装在/opt/homebrew/lib/pam/
而不是默认位置/usr/lib/pam
。因此,中的条目/etc/pam.d/sudo
需要包含完整路径pam_reattach.so
:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
如果您没有正确的路径,则pam_reattach.so
可能会被锁定sudo
。如果发生这种情况,诀窍是/etc/pam.d
通过以下方式打开Finder
- open /etc/pam.d
- 单击锁定图标,然后暂时地允许编辑权限,/etc/pam.d/sudo
以便可以修复任何错误。