这是一个PAM模块,用于重新访问MACOS上身份验证用户的每个会议bootstrap名称空间。这允许用户从TMUX内使用pam_tid模块(触摸ID)。
尽管在MACOS中,用户程序可能会在跨登录会话的背景中生存,但是几种服务(主要与GUI有关,例如粘贴板和触摸ID相关)与用户的登录会话严格相关,并且对于背景会话中的程序而言,这是不可用的。因此,在背景中运行的程序和GNU屏幕等程序的用户将发现触摸ID等多个服务不可用或无法正常工作。
该PAM模块将尝试将当前程序(例如sudo )移至当前活动登录会话,然后其余的PAM模块将可以访问诸如touch ID之类的每次课程服务。
如果您已经安装了额外的reattach-to-session-namespace(8)程序,则也可以从用户登录会话中的背景中执行任意程序。
有关MACOS中的Bootstrap名称空间的更多详细信息,请参见TN2083。
该模块应在要放入身份验证的用户的每个会话引导程序空间中的模块之前调用。该模块在身份验证阶段运行,应将其标记为optional或required (我建议使用optional ,以防止在错误的情况下锁定)
/etc/pam.d/ /etc/pam.d/sudo :
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
确保已安装模块。请注意,当未在/usr/lib/pam或/usr/local/lib/pam中安装模块时(例如,在M1 Mac上安装在/opt/homebrew中的Homebrew)时,您必须在PAM服务文件中指定完整的通往模块的路径,如下所示:如下所示:如下所示:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
pam_tid模块将尝试避免通过SSH或其他远程登录方法连接时提示触摸。但是,在某些情况下(例如使用TMUX和屏幕)可以通过远程会话产生当前TTY,但未通过pam_tid检测到当前的TTY。为了帮助减轻这种情况,可以将ignore_ssh选项添加到pam_reattach的配置中,如下所示:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
这将检测到在环境中的任何$SSH_CLIENT , $SSH_CONNECTION或$SSH_TTY的存在,并导致该模块成为一个no-op。
有关更多信息,请参见reattach_aqua(3) , pam_reattach(8)和reattach-to-session-namespace(8) 。
该模块可通过Homebrew提供。使用以下命令安装它:
$ brew install pam-reattach您还可以使用以下命令将其使用MacPorts安装此模块:
$ sudo port install pam-reattach另外,您可以手动构建模块。该模块是使用Cmake 3构建的。在项目目录中的命令提示符中输入以下命令:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build build要与Apple Silicon和X86一起使用通用二进制(例如,用于Rosetta支持),请使用:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build如果Cmake无法自动找到libpam (例如,在NIX上),则可能需要手动指定前缀路径:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_PREFIX_PATH= " /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib/ "
$ cmake --build build然后,要安装模块,只需运行以下命令:
$ cmake --install build安装后,请确保将生成的install_manifest.txt文件保留在构建文件夹中。
在命令提示符中运行以下命令以从系统中删除安装:
$ xargs rm < build/install_manifest.txt如果您丢失了install_manifest.txt ,这是已安装的文件列表:
/usr/local/lib/libreattach.a
/usr/local/include/reattach.h
/usr/local/share/man/man3/reattach_aqua.3
/usr/local/lib/pam/pam_reattach.so
/usr/local/share/man/man8/pam_reattach.8
/usr/local/bin/reattach-to-session-namespace
/usr/local/share/man/man8/reattach-to-session-namespace.8
此外,您可以通过在调用cmake时指定-DENABLE_CLI=ON选项来构建一个reattach-to-session-namespace命令行实用程序。此命令使您可以从命令行重新访问用户的会话名称空间。
有关更多信息,请参见reattach-to-session-namespace(8) 。
要启用sudo的触摸ID授权,请参阅本文。
该代码是根据MIT许可发布的。请参阅LICENDE.TXT。