هذه هي وحدة PAM لإعادة تجديد مساحة الاسمية لكل جلسة للمستخدم على MacOS. يتيح ذلك للمستخدمين الاستفادة من وحدة pam_tid (معرف اللمس) من داخل TMUX.
على الرغم من أن برنامج المستخدم في MACOS قد يبقى في الخلفية عبر جلسات تسجيل الدخول ، فإن العديد من الخدمات (المتعلقة معظمها بموجب واجهة المستخدم الرسومية ، مثل اللوحة اللاسلكية ومعرف اللمس) ترتبط بصرامة بجلسة تسجيل الدخول للمستخدم ، وبالتالي غير متوفرة للبرامج في جلسة الخلفية. سيجد مستخدمو برامج مثل TMUX و GNU التي تعمل في الخلفية للبقاء على قيد الحياة عبر جلسات تسجيل الدخول ، أن العديد من الخدمات مثل معرف اللمس غير متوفرة أو لا تعمل بشكل صحيح.
ستحاول وحدة PAM هذه نقل البرنامج الحالي (EG sudo ) إلى جلسة تسجيل الدخول النشطة الحالية ، وبعد ذلك ستحصل وحدات PAM المتبقية على خدمات لكل جلسة مثل ID.
إذا قمت بتثبيت برنامج reattach-to-session-namespace(8) الإضافي ، فيمكنك أيضًا تنفيذ برامج تعسفية من الخلفية في جلسة تسجيل الدخول للمستخدم.
انظر TN2083 لمزيد من التفاصيل حول مساحات أسماء 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) .
الوحدة النمطية متوفرة عبر البيرة. استخدم الأمر التالي لتثبيته:
$ 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 و 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) لمزيد من المعلومات.
لتمكين تفويض ID للمس لـ sudo ، يرجى الاطلاع على هذا المقال.
يتم إصدار الرمز تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر الترخيص.