Ini adalah modul PAM untuk mendapatkan kembali namespace bootstrap per-sesi pengguna yang mengautentikasi pada macOS. Ini memungkinkan pengguna untuk menggunakan modul pam_tid (ID sentuh) dari dalam tmux.
Meskipun dalam macOS program pengguna dapat bertahan di latar belakang di seluruh sesi login, beberapa layanan (sebagian besar terkait dengan GUI, seperti papan tulis dan Touch ID) secara ketat terikat pada sesi login pengguna dan karena itu tidak tersedia untuk program di sesi latar belakang. Pengguna program seperti layar TMUX dan GNU yang berjalan di latar belakang untuk bertahan dari sesi login, dengan demikian akan menemukan bahwa beberapa layanan seperti Touch ID tidak tersedia atau tidak berfungsi dengan baik.
Modul PAM ini akan mencoba untuk memindahkan program saat ini (misalnya sudo ) ke sesi login aktif saat ini, setelah itu modul PAM yang tersisa akan memiliki akses ke layanan per sesi seperti Touch ID.
Jika Anda telah menginstal program tambahan reattach-to-session-namespace(8) , Anda juga dapat menjalankan program sewenang-wenang dari latar belakang dalam sesi login pengguna.
Lihat TN2083 untuk detail lebih lanjut tentang Bootstrap Namespaces di MacOS.
Modul ini harus dipanggil sebelum modul yang ingin Anda masukkan ke dalam namespace bootstrap per sesi pengguna yang otentikasi. Modul berjalan dalam fase otentikasi dan harus ditandai sebagai optional atau required (saya sarankan menggunakan optional untuk mencegah terkunci jika bug)
Ubah layanan yang ditargetkan di /etc/pam.d/ (seperti /etc/pam.d/sudo ) seperti yang dijelaskan:
auth optional pam_reattach.so
auth sufficient pam_tid.so
...
Pastikan Anda menginstal modul. Perhatikan bahwa ketika modul tidak dipasang di /usr/lib/pam atau /usr/local/lib/pam (misalnya, pada mac m1 di mana homebrew dipasang di /opt/homebrew ), Anda harus menentukan jalur lengkap ke modul dalam file layanan PAM seperti yang ditunjukkan di bawah ini:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
Modul pam_tid akan mencoba menghindari meminta sentuhan saat terhubung melalui SSH atau metode login jarak jauh lainnya. Namun, ada situasi (misalnya penggunaan tmux dan layar) di mana TTY saat ini dapat ditanamkan oleh sesi jarak jauh tetapi tidak terdeteksi seperti itu oleh pam_tid . Untuk membantu mengurangi hal ini, opsi ignore_ssh dapat ditambahkan ke konfigurasi pam_reattach sebagai berikut:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
Ini akan mendeteksi keberadaan $SSH_CLIENT , $SSH_CONNECTION , atau $SSH_TTY di lingkungan, dan menyebabkan modul ini menjadi no-op.
Untuk informasi lebih lanjut, lihat reattach_aqua(3) , pam_reattach(8) dan reattach-to-session-namespace(8) .
Modul ini tersedia melalui homebrew. Gunakan perintah berikut untuk menginstalnya:
$ brew install pam-reattachAnda juga dapat menginstal modul ini dengan MacPorts menggunakan perintah berikut:
$ sudo port install pam-reattachAtau, Anda dapat membangun modul secara manual. Modul ini dibangun menggunakan CMake 3. Masukkan perintah berikut ke prompt perintah Anda di direktori proyek:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local
$ cmake --build buildUntuk membuat biner universal untuk digunakan dengan apel silikon dan x86 (misalnya untuk dukungan rosetta), gunakan:
$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_OSX_ARCHITECTURES= " arm64;x86_64 "
$ cmake --build build Jika CMake tidak dapat menemukan libpam secara otomatis (misalnya, di NIX), Anda mungkin perlu menentukan jalur awalan secara manual:
$ 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 buildKemudian, untuk menginstal modul, cukup jalankan perintah berikut:
$ cmake --install build Pastikan Anda menyimpan file install_manifest.txt yang dihasilkan di folder build setelah instalasi.
Jalankan perintah berikut di prompt perintah Anda untuk menghapus instalasi dari sistem Anda:
$ xargs rm < build/install_manifest.txt Jika Anda kehilangan install_manifest.txt , ini adalah daftar file yang diinstal:
/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
Selain itu, Anda dapat membangun utilitas baris perintah reattach-to-session-namespace dengan menentukan opsi -DENABLE_CLI=ON saat memanggil cmake. Perintah ini memungkinkan Anda untuk memasang kembali namespace sesi pengguna dari baris perintah.
Lihat reattach-to-session-namespace(8) untuk informasi lebih lanjut.
Untuk mengaktifkan otorisasi Touch ID untuk sudo , silakan lihat artikel ini.
Kode ini dirilis di bawah lisensi MIT. Lihat lisensi.txt.