นี่คือโมดูล PAM สำหรับการติดตั้งใหม่ให้กับเนมสเปซของผู้ใช้ที่รับรองความถูกต้องต่อเซสชั่นบน MacOS สิ่งนี้ช่วยให้ผู้ใช้ใช้ประโยชน์จากโมดูล pam_tid (Touch ID) จากภายใน TMUX
แม้ว่าใน MacOS โปรแกรมผู้ใช้อาจอยู่รอดในพื้นหลังในช่วงการเข้าสู่ระบบ แต่บริการหลายอย่าง (ส่วนใหญ่เกี่ยวข้องกับ GUI เช่น Pasteboard และ Touch ID) จะเชื่อมโยงกับเซสชันการเข้าสู่ระบบของผู้ใช้และไม่สามารถใช้งานได้สำหรับโปรแกรมในเซสชั่นพื้นหลัง ผู้ใช้โปรแกรมเช่นหน้าจอ TMUX และ GNU ที่ทำงานในพื้นหลังเพื่อความอยู่รอดในช่วงการเข้าสู่ระบบจะพบว่าบริการหลายอย่างเช่น Touch ID ไม่พร้อมใช้งานหรือไม่ทำงานอย่างถูกต้อง
โมดูล PAM นี้จะพยายามย้ายโปรแกรมปัจจุบัน (เช่น sudo ) ไปยังเซสชันการเข้าสู่ระบบที่ใช้งานปัจจุบันหลังจากนั้นโมดูล PAM ที่เหลือจะสามารถเข้าถึงบริการต่อเซสชันเช่น Touch ID
หากคุณได้ติดตั้งโปรแกรม reattach-to-session-namespace(8) เพิ่มเติมคุณอาจดำเนินการโปรแกรมโดยพลการจากพื้นหลังในเซสชันการเข้าสู่ระบบของผู้ใช้
ดู TN2083 สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ namespaces bootstrap ใน macOS
โมดูลนี้ควรถูกเรียกใช้ก่อนโมดูลที่คุณต้องการใส่ไว้ในเนมสเปซของผู้ใช้ที่ตรวจสอบสิทธิ์ต่อเซสชันของผู้ใช้ โมดูลทำงานในขั้นตอนการรับรองความถูกต้องและควรทำเครื่องหมายว่าเป็น 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 Macs ที่ติดตั้ง homebrew ใน /opt/homebrew ) คุณต้องระบุเส้นทางเต็มไปยังโมดูลในไฟล์บริการ PAM ดังแสดงด้านล่าง:
auth optional /opt/homebrew/lib/pam/pam_reattach.so
auth sufficient pam_tid.so
...
โมดูล pam_tid จะพยายามหลีกเลี่ยงการแจ้งเตือนสำหรับการสัมผัสเมื่อเชื่อมต่อผ่าน SSH หรือวิธีการเข้าสู่ระบบระยะไกลอื่น อย่างไรก็ตามมีสถานการณ์ (เช่นการใช้ TMUX และหน้าจอ) ซึ่ง TTY ปัจจุบันอาจวางไข่โดยเซสชั่นระยะไกล แต่ไม่พบเช่นนี้โดย pam_tid เพื่อช่วยลดสิ่งนี้ตัวเลือก ignore_ssh สามารถเพิ่มลงในการกำหนดค่าของ pam_reattach ดังนี้:
auth optional pam_reattach.so ignore_ssh
auth sufficient pam_tid.so
...
สิ่งนี้จะตรวจจับการมีอยู่ของ $SSH_CLIENT , $SSH_CONNECTION หรือ $SSH_TTY ในสภาพแวดล้อมและทำให้โมดูลนี้กลายเป็นแบบไม่มี
สำหรับข้อมูลเพิ่มเติมดู 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
นอกจากนี้คุณสามารถสร้างยูทิลิตี้บรรทัดคำสั่งบรรทัดคำสั่ง reattach-to-session-namespace โดยการระบุตัวเลือก -DENABLE_CLI=ON ตัวเลือกเมื่อเรียก cmake คำสั่งนี้ช่วยให้คุณสามารถติดตั้งเนมสเปซเซสชันของผู้ใช้จากบรรทัดคำสั่ง
ดู reattach-to-session-namespace(8) สำหรับข้อมูลเพิ่มเติม
ในการเปิดใช้งานการอนุญาต Touch ID สำหรับ sudo โปรดดูบทความนี้
รหัสถูกเผยแพร่ภายใต้ใบอนุญาต MIT ดู license.txt