Este es un módulo PAM para volver a colocar el espacio de nombres de bootstrap por sesión de autenticación en MacOS. Esto permite a los usuarios hacer uso del módulo pam_tid (ID de tacto) desde TMUX.
Aunque en MacOS, un programa de usuario puede sobrevivir en segundo plano en todo el inicio de sesión, varios servicios (en su mayoría relacionados con la GUI, como Pastboard y Touch ID) están estrictamente vinculados a la sesión de inicio de sesión de un usuario y, como tales, no están disponibles para programas en la sesión de fondo. Los usuarios de programas como TMUX y la pantalla GNU que se ejecutan en segundo plano para sobrevivir en las sesiones de inicio de sesión, encontrarán que varios servicios como Touch ID no están disponibles o no funcionan correctamente.
Este módulo PAM intentará mover el programa actual (por ejemplo, sudo ) a la sesión de inicio de sesión activa actual, después de lo cual los módulos PAM restantes tendrán acceso a los servicios por sesión como Touch ID.
Si ha instalado el programa adicional reattach-to-session-namespace(8) , también puede ejecutar programas arbitrarios desde el fondo en la sesión de inicio de sesión del usuario.
Consulte TN2083 para obtener más detalles sobre los espacios de nombres de Bootstrap en MacOS.
Este módulo debe invocarse antes del módulo que desee colocar en el espacio de nombres de bootstrap por sesión de autenticación del usuario. El módulo se ejecuta en la fase de autenticación y debe marcarse como optional o required (sugiero usar optional para evitar que se bloqueen en caso de errores)
Modifique el servicio dirigido en /etc/pam.d/ (como /etc/pam.d/sudo ) como se explica:
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
Asegúrese de tener el módulo instalado. Tenga en cuenta que cuando el módulo no está instalado en /usr/lib/pam o /usr/local/lib/pam (por ejemplo, en M1 Macs donde HomeBrew está instalado en /opt/homebrew ), debe especificar la ruta completa al módulo en el archivo de servicio PAM como se muestra a continuación:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
El módulo pam_tid intentará evitar solicitar un toque cuando se conecte a través de SSH u otro método de inicio de sesión remoto. Sin embargo, hay situaciones (por ejemplo, el uso de TMUX y la pantalla) donde la sesión remota puede generar el TTY actual pero no detectado como tal por pam_tid . Para ayudar a mitigar esto, la opción ignore_ssh se puede agregar a la configuración de pam_reattach de la siguiente manera:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
Esto detectará la presencia de cualquiera de $SSH_CLIENT , $SSH_CONNECTION o $SSH_TTY en el entorno, y hará que este módulo se convierta en un no-op.
Para obtener más información, consulte reattach_aqua(3) , pam_reattach(8) y reattach-to-session-namespace(8) .
El módulo está disponible a través de Homebrew. Use el siguiente comando para instalarlo:
$ brew install pam-reattachTambién puede instalar este módulo con MacPorts usando el siguiente comando:
$ sudo port install pam-reattachAlternativamente, puede construir manualmente el módulo. El módulo se crea usando CMake 3. Ingrese los siguientes comandos en su símbolo del sistema en el directorio del proyecto:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildPara crear un binario universal para su uso con Apple Silicon y X86 (por ejemplo, para soporte de Rosetta), use:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build Si CMake no puede encontrar libpam automáticamente (por ejemplo, en nix), es posible que deba especificar la ruta de prefijo manualmente:
$ 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 buildLuego, para instalar el módulo, simplemente ejecute el siguiente comando:
$ cmake --install build Asegúrese de mantener el archivo install_manifest.txt generado en la carpeta de compilación después de la instalación.
Ejecute el siguiente comando en su símbolo del sistema para eliminar la instalación de su sistema:
$ xargs rm < build/install_manifest.txt En caso de que haya perdido install_manifest.txt , esta es la lista de archivos que están instalados:
/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
Además, puede construir una utilidad de línea de comandos reattach-to-session-namespace especificando la opción -DENABLE_CLI=ON la opción al llamar a CMake. Este comando le permite volver a colocar el espacio de nombres de la sesión del usuario desde la línea de comandos.
Consulte reattach-to-session-namespace(8) para obtener más información.
Para habilitar la autorización de identificación de touch para sudo , consulte este artículo.
El código se publica bajo la licencia MIT. Ver licencia.txt.