具有足够身份验证的 Sudo pam_tid.so 无法与 tmux 配合使用

具有足够身份验证的 Sudo pam_tid.so 无法与 tmux 配合使用

我不太喜欢安装第三方 sudo 工具的想法,所以我决定使用 /etc/pam.d/sudo 技巧而不是使用 sudo-touchid,效果很好。我将 iTerm2 与 zsh 一起使用,使用这种设置,它可以正常工作。但是当我使用 tmux(使用 reattach-to-user-namespace default 命令)时,sudo 总是要求输入密码。有人知道如何解决这个问题吗?

答案1

我遇到了同样的问题。令人惊讶的是,Touch ID 在 Apple 的 GNU 屏幕发行版中确实有效,在查看其实现后,它似乎screen附加到用户的每个会话命名空间,而不是每个用户的命名空间。

以下补丁将此方法移植到tmuxreattach-to-user-namespace为我修复了该问题:

  1. https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/pull/70
  2. https://github.com/tmux/tmux/pull/1434

编辑:由于这些补丁导致了一些技术问题(如拉取请求中所述),我改为使用自定义 PAM 模块在运行模块之前重新连接到用户的每个会话命名空间来解决问题pam_tidhttps://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以便可以修复任何错误。

相关内容