Il s'agit d'un module PAM pour rattacher à l'espace de noms de bootstrap par session de l'utilisateur sur macOS. Cela permet aux utilisateurs d'utiliser le module pam_tid (Touch ID) à partir de TMUX.
Bien que dans MacOS, un programme d'utilisateur puisse survivre en arrière-plan dans les séances de connexion, plusieurs services (principalement liés à l'interface graphique, tels que le tableau de pâte et l'identifiant Touch) sont strictement liés à la session de connexion d'un utilisateur et, en tant que tels, indisponibles pour les programmes de la session de fond. Les utilisateurs de programmes tels que TMUX et GNU écran qui s'exécutent en arrière-plan pour survivre à travers les sessions de connexion, constateront donc que plusieurs services tels que Touch ID ne sont pas disponibles ou ne fonctionnent pas correctement.
Ce module PAM tentera de déplacer le programme actuel (par exemple sudo ) vers la session de connexion active actuelle, après quoi les modules PAM restants auront accès aux services par session comme Touch ID.
Si vous avez installé le programme supplémentaire reattach-to-session-namespace(8) , vous pouvez également exécuter des programmes arbitraires à partir de l'arrière-plan de la session de connexion de l'utilisateur.
Voir TN2083 pour plus de détails sur les espaces de noms bootstrap dans MacOS.
Ce module doit être invoqué avant le module que vous souhaitez mettre dans l'espace de noms de bootstrap par session de l'utilisateur authentifiant. Le module s'exécute dans la phase d'authentification et doit être marqué comme optional ou required (je suggère d'utiliser optional pour éviter d'être verrouillé en cas de bogues)
Modifiez le service ciblé dans /etc/pam.d/ (tel que /etc/pam.d/sudo ) comme expliqué:
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
Assurez-vous que le module est installé. Notez que lorsque le module n'est pas installé dans /usr/lib/pam ou /usr/local/lib/pam (par exemple, sur les Mac M1 où Homebrew est installé dans /opt/homebrew ), vous devez spécifier le chemin complet vers le module dans le fichier de service PAM comme indiqué ci-dessous:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
Le module pam_tid essaiera d'éviter d'inviter une touche lorsqu'il est connecté via SSH ou une autre méthode de connexion distante. Cependant, il existe des situations (par exemple, l'utilisation de TMUX et de l'écran) où le TTY actuel peut être engendré par une session distante mais non détectée en tant que telle par pam_tid . Pour aider à l'atténuer, l'option ignore_ssh peut être ajoutée à la configuration de pam_reattach comme suit:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
Cela détectera la présence de l'un de $SSH_CLIENT , $SSH_CONNECTION ou $SSH_TTY dans l'environnement, et fera que ce module devienne un non-op.
Pour plus d'informations, voir reattach_aqua(3) , pam_reattach(8) et reattach-to-session-namespace(8) .
Le module est disponible via Homebrew. Utilisez la commande suivante pour l'installer:
$ brew install pam-reattachVous pouvez également installer ce module avec Macports en utilisant la commande suivante:
$ sudo port install pam-reattachAlternativement, vous pouvez construire manuellement le module. Le module est construit à l'aide de CMake 3. Entrez les commandes suivantes dans votre invite de commande dans le répertoire du projet:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildPour créer un binaire universel à utiliser avec Apple Silicon et X86 (par exemple pour le support Rosetta), utilisation:
$ 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 n'est pas en mesure de trouver automatiquement libpam (par exemple, sur NIX), vous devrez peut-être spécifier manuellement le chemin du préfixe:
$ 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 buildEnsuite, pour installer le module, exécutez simplement la commande suivante:
$ cmake --install build Assurez-vous de garder le fichier install_manifest.txt généré dans le dossier de construction après l'installation.
Exécutez la commande suivante dans votre invite de commande pour supprimer l'installation de votre système:
$ xargs rm < build/install_manifest.txt Dans le cas où vous perdez install_manifest.txt , c'est la liste des fichiers installés:
/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
De plus, vous pouvez créer un utilitaire de ligne de commande reattach-to-session-namespace en spécifiant l'option -DENABLE_CLI=ON lors de l'appel CMake. Cette commande vous permet de rattacher l'espace de noms de session de l'utilisateur à partir de la ligne de commande.
Voir reattach-to-session-namespace(8) pour plus d'informations.
Pour permettre l'autorisation de Touch ID pour sudo , veuillez consulter cet article.
Le code est publié sous la licence MIT. Voir licence.txt.