Dies ist ein PAM-Modul zum Wiederanstellen des Authentikations-Benutzers pro Session-Bootstrap-Namespace in MacOS. Auf diese Weise können Benutzer das pam_tid -Modul (Touch ID) innerhalb von TMUX aus nutzen.
Obwohl in MacOS ein Benutzerprogramm im Hintergrund über Anmeldessionen hinweg überleben kann, sind mehrere Dienste (hauptsächlich mit der GUI wie Pasteboard und Touch -ID) mit der Anmeldesitzung eines Benutzers verbunden und als solche für Programme in der Hintergrundsitzung nicht verfügbar. Benutzer von Programmen wie TMUX und GNU -Bildschirm, die im Hintergrund ausgeführt werden, um über die Anmeldesitzungen hinweg zu überleben, werden daher feststellen, dass mehrere Dienste wie Touch -ID nicht verfügbar sind oder nicht ordnungsgemäß funktionieren.
In diesem PAM-Modul wird versucht, das aktuelle Programm (z. B. sudo ) in die aktuelle aktive Anmeldesitzung zu verschieben. Danach haben die verbleibenden PAM-Module Zugriff auf die Dienste pro Sitzung wie Touch ID.
Wenn Sie das zusätzliche Programm reattach-to-session-namespace(8) installiert haben, können Sie auch beliebige Programme aus dem Hintergrund in der Anmeldesitzung des Benutzers ausführen.
Weitere Informationen zu Bootstrap -Namespaces in MacOS finden Sie in TN2083.
Dieses Modul sollte vor dem Modul aufgerufen werden, das Sie in den Authentifizierer-Benutzern-Bootstrap-Namespace einfügen möchten. Das Modul wird in der Authentifizierungsphase ausgeführt und sollte entweder optional oder required markiert werden (ich schlage vor, optional zu verhindern, dass bei Fehler gesperrt wird).
Ändern Sie den gezielten Dienst in /etc/pam.d/ (wie /etc/pam.d/sudo ) wie erläutert:
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
Stellen Sie sicher, dass das Modul installiert ist. Beachten Sie, dass, wenn das Modul nicht in /usr/lib/pam oder /usr/local/lib/pam installiert ist (z. B. auf M1 -Macs, in denen Homebrew in /opt/homebrew installiert ist), müssen Sie den vollen Pfad zum Modul in der PAM -Dienstdatei wie unten gezeigt angeben:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
Das pam_tid -Modul versucht, eine Berührung zu vermeiden, wenn sie über SSH oder eine andere Remote -Anmeldemethode verbunden ist. Es gibt jedoch Situationen (z. B. Verwendung von TMUX und Screen), in denen der aktuelle TTY durch eine Remote -Sitzung hervorgebracht werden kann, jedoch nicht als solche von pam_tid erkannt wird. Um dies zu mildern, kann die Option ignore_ssh wie folgt zur Konfiguration von pam_reattach hinzugefügt werden:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
Dadurch wird das Vorhandensein eines von $SSH_CLIENT , $SSH_CONNECTION oder $SSH_TTY in der Umgebung festgestellt und dieses Modul zu einem No-op wird.
Weitere Informationen finden Sie unter reattach_aqua(3) , pam_reattach(8) und reattach-to-session-namespace(8) .
Das Modul ist über Homebrew erhältlich. Verwenden Sie den folgenden Befehl, um es zu installieren:
$ brew install pam-reattachSie können dieses Modul auch mit MacPorts mit dem folgenden Befehl installieren:
$ sudo port install pam-reattachAlternativ können Sie das Modul manuell erstellen. Das Modul wird mit CMake 3 erstellt. Geben Sie die folgenden Befehle in Ihre Eingabeaufforderung im Projektverzeichnis ein:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildUm sowohl mit Apple Silicon als auch mit X86 (z. B. für die Rosetta -Unterstützung) ein universelles binär für den Einsatz zu erstellen, verwenden Sie:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build Wenn CMake libpam nicht automatisch finden kann (z. B. auf NIX), müssen Sie möglicherweise den Präfixpfad manuell angeben:
$ 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 buildUm das Modul zu installieren, führen Sie einfach den folgenden Befehl aus:
$ cmake --install build Stellen Sie sicher, dass Sie nach der Installation die Datei für generierte install_manifest.txt im Build -Ordner aufbewahren .
Führen Sie den folgenden Befehl in Ihrer Eingabeaufforderung aus, um die Installation aus Ihrem System zu entfernen:
$ xargs rm < build/install_manifest.txt Falls Sie install_manifest.txt verloren haben, ist dies die Liste der Dateien, die installiert werden:
/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
Zusätzlich können Sie ein reattach-to-session-namespace -Befehlszeilen-Dienstprogramm erstellen, indem Sie beim Aufrufen von CMake die Option -DENABLE_CLI=ON angeben. Mit diesem Befehl können Sie den Sitzungsnamenspace des Benutzers aus der Befehlszeile wieder aufnehmen.
Weitere Informationen finden Sie unter reattach-to-session-namespace(8) .
sudo finden Sie in diesem Artikel.
Der Code wird unter der MIT -Lizenz veröffentlicht. Siehe Lizenz.TXT.