PAM_SYSTEMD(8)

الاسم
pam_systemd - تسجيل جلسات المستخدم في مدير تسجيل الدخول systemd

موجز

pam_systemd.so

الوصف

يسجل pam_systemd جلسات المستخدم لدى مدير تسجيل الدخول systemd systemd-logind.service(8)، وبالتالي في التسلسل الهرمي لمجموعات التحكم systemd.

يطبق الوحدة أيضًا معلمات إدارة الموارد ووقت التشغيل المختلفة على الجلسة الجديدة، كما هو مكون في سجلات مستخدم JSON[1] للمستخدم، عند تعريف أحدها.

عند تسجيل الدخول، تضمن هذه الوحدة — بالاقتران مع systemd-logind.service — ما يلي:

    1. إذا لم يكن موجودًا بعد، يتم إنشاء دليل وقت تشغيل المستخدم /run/user/$UID أو تركيبه كنظام ملفات "tmpfs" جديد مع تطبيق حصة، وتغيير ملكيته إلى المستخدم الذي يقوم بتسجيل الدخول.

    2. يتم تهيئة متغير البيئة $XDG_SESSION_ID. إذا كان التدقيق متاحًا وتم تشغيل pam_loginuid.so قبل هذه الوحدة (وهو موصى به بشدة)، يتم تهيئة المتغير من معرف جلسة التدقيق (/proc/self/sessionid). وإلا، يتم استخدام عداد جلسة مستقل.

    3. يتم إنشاء وحدة نطاق systemd جديدة للجلسة. إذا كانت هذه أول جلسة متزامنة للمستخدم، يتم إنشاء وحدة شريحة ضمنية لكل مستخدم أسفل user.slice آليًا ووضع النطاق فيها. يتم بدء مثيل من خدمة النظام user@.service، التي تشغل مثيل مدير مستخدم systemd.

    4. يتم تكوين متغيرات البيئة "$TZ" و"$EMAIL" و"$LANG" للمستخدم، بناءً على البيانات الخاصة من سجل JSON الخاص بالمستخدم (إذا كان معرفًا). علاوة على ذلك، يتم استيراد أي متغيرات بيئة مكونة صراحة في سجل المستخدم، وتهيئة umask ومستوى nice وحدود الموارد.

عند تسجيل الخروج، تضمن هذه الوحدة ما يلي:

    1. إذا كان ممكّنًا في logind.conf(5) (KillUserProcesses=)، يتم إنهاء جميع عمليات الجلسة. إذا انتهت آخر جلسة متزامنة لمستخدم، سيتم إنهاء مثيل systemd الخاص بالمستخدم أيضًا، وكذلك وحدة الشريحة الخاصة بالمستخدم.

    2. إذا انتهت آخر جلسة متزامنة لمستخدم، يتم إزالة دليل وقت تشغيل المستخدم /run/user/$UID وجميع محتوياته أيضًا.

إذا لم يتم تشغيل النظام باستخدام systemd كنظام تهيئة، لا تفعل هذه الوحدة شيئًا وتعيد PAM_SUCCESS فورًا.

الخيارات

الخيارات التالية مفهومة:

class=
    يأخذ وسيطة سلسلة تحدد فئة الجلسة. متغير البيئة XDG_SESSION_CLASS (انظر أدناه) له الأسبقية. انظر sd_session_get_class(3) لطريقة الاستعلام عن فئة الجلسة. يتم تعريف فئات الجلسة التالية:

    جدول 1. فئات الجلسة
    الاسم | الشرح
    user | جلسة مستخدم تفاعلية عادية. هذه هي الفئة المبدئية للجلسات التي يكون فيها طرفية TTY أو عرض X معروفًا في وقت تسجيل الجلسة.
    user-early | مشابه لـuser ولكن جلسات هذه الفئة لا يتم ترتيبها بعد systemd-user-sessions.service(8)، أي قد تبدأ قبل السماح بإنشاء الجلسات العادية. فئة الجلسة هذه هي المبدئية لجلسات المستخدم الجذر التي كانت ستؤهل لفئة user، انظر أعلاه. (أضيف في v256.)
    user-light | مشابه لـuser، ولكن جلسات هذه الفئة لن تسحب user@.service(5) الخاص بالمستخدم، وبالتالي قد لا يكون لديها مدير خدمة للمستخدم قيد التشغيل. (أضيف في v258.)
    user-early-light | مشابه لـ user-early، ولكن جلسات هذه الفئة لن تسحب user@.service(5) الخاص بالمستخدم، وبالتالي قد لا يكون لديها مدير خدمة للمستخدم قيد التشغيل. (أضيف في v258.)
    user-incomplete | مشابهة لـ user ولكن للجلسات التي لم تُجهز بالكامل بعد، أي ليس لها دليل منزلي مُثبت أو ما شابه. يُستخدم هذا بواسطة systemd-homed.service(8) للسماح للمستخدمين بتسجيل الدخول عبر ssh(1) قبل تثبيت دليلهم المنزلي، مع تأخير التثبيت حتى يقدم المستخدم كلمة مرور فتح القفل. تُرقى جلسات هذه الفئة إلى الفئة العادية user بمجرد تنشيط الدليل المنزلي.
    greeter | مشابهة لـ user ولكن للجلسات التي تُنشأ بواسطة مدير عرض بشكل مؤقت والتي تطالب المستخدم ببيانات اعتماد تسجيل الدخول.
    lock-screen | مشابهة لـ user ولكن للجلسات التي تُنشأ بواسطة مدير عرض بشكل مؤقت والتي تُظهر شاشة قفل يمكن استخدامها لفتح حسابات مستخدمين أو جلسات مقفلة.
    background | تُستخدم للجلسات الخلفية، مثل تلك التي يُستدعى بها بواسطة cron(8) والأدوات المشابهة. هذه هي الفئة المبدئية للجلسات التي لا يُعرف لها TTY أو عرض X في وقت تسجيل الجلسة.
    background-light | مشابهة لـ background، ولكن جلسات هذه الفئة لن تسحب user@.service(5) للمستخدم، وبالتالي قد لا يكون لديها مدير خدمة للمستخدم قيد التشغيل. (أُضيفت في v256.)
    manager | يُسجل خدمة user@.service(5) للمستخدم تحت فئة الجلسة هذه. (أُضيفت في v256.)
    manager-early | مشابهة لـ manager، ولكن للمستخدم الجذر. قارن مع حالة user مقابل user-early. (أُضيفت في v256.)
    none | يتجاوز تسجيل هذه الجلسة مع logind. لن يُنشأ نطاق جلسة، ولن يُبدأ مدير خدمة المستخدم. (أُضيفت في v258.)

    إذا لم تُحدد فئة جلسة عبر خيار وحدة PAM أو عبر متغير البيئة $XDG_SESSION_CLASS، تُختار الفئة آليًا، اعتمادًا على معاملات جلسة متنوعة، مثل نوع الجلسة (إذا كان معروفًا)، وما إذا كانت الجلسة تحتوي على TTY أو عرض X11، وحالة المستخدم. لاحظ أن أدوات متنوعة تسمح بتعيين فئة الجلسة لجلسات PAM المُخصصة حديثًا صراحةً عبر متغير البيئة $XDG_SESSION_CLASS. على سبيل المثال، تدعم وظائف cron UNIX الكلاسيكية تعيينات متغيرات البيئة (انظر crontab(5))، والتي قد تُستخدم للاختيار بين فئة الجلسة background و background-light لكل وظيفة cron على حدة، أو قد يُستخدم run0 --setenv=XDG_SESSION_CLASS=user-light للاختيار بين user و user-light للجلسات المميزة المُستدعاة.

    أُضيف في الإصدارة 197.

type=
    يأخذ وسيطة سلسلة نصية تُعين نوع الجلسة. متغير البيئة XDG_SESSION_TYPE (انظر أدناه) له الأولوية. واحد من unspecified أو tty أو x11 أو wayland أو mir أو web. انظر sd_session_get_type(3) للتفاصيل حول نوع الجلسة.

    أُضيف في الإصدارة 209.

desktop=
    يأخذ سلسلة تعريفية قصيرة مفردة لبيئة سطح المكتب. متغير البيئة XDG_SESSION_DESKTOP (انظر أدناه) له الأولوية. قد يُستخدم هذا للإشارة إلى سطح المكتب المستخدم في الجلسة، حيثما ينطبق ذلك وإذا كانت هذه المعلومات متاحة. على سبيل المثال: GNOME أو KDE. يُوصى باستخدام نفس المعرفات والأحرف الكبيرة كما في $XDG_CURRENT_DESKTOP، كما هو معرف بواسطة Desktop Entry Specification[2]. (ومع ذلك، لاحظ أن الخيار يأخذ عنصرًا واحدًا فقط، وليس قائمة مفصولة بنقطتين مثل $XDG_CURRENT_DESKTOP.) انظر sd_session_get_desktop(3) لمزيد من التفاصيل.

    أُضيف في الإصدار 240.

area=
    يأخذ اسم ملف كمعامل. إذا حُدد وسجل المستخدم الدخول إلى حسابه، سيُعين متغير البيئة $HOME إلى ~/Areas/ مُلحقًا بالسلسلة المحددة، ولكن فقط إذا كان ذلك الدليل موجودًا. علاوة على ذلك، سيُعين متغير $XDG_AREA إلى المعامل (بدون بادئة).

    قد تُستخدم هذه الوظيفة للحفاظ على أدلة منزلية ثانوية منفصلة متعددة داخل الدليل المنزلي الرئيسي للمستخدم. عادةً، تُحدد المنطقة التي يُسجل الدخول إليها أثناء تسجيل الدخول، إذا كان الحساب يسمح بذلك (الحسابات المقدمة بواسطة pam_systemd_home(8) تفعل)، ولكن قد يُستخدم هذا المعامل لتعريف مبدئي إذا لم يُقدم ذلك.

    لاحظ أن هذا يضبط $HOME فقط أثناء تسجيل الدخول، ولا يؤثر على الدليل المنزلي المُبلغ عنه بخلاف ذلك للمستخدم. يعني هذا تحديدًا أن sshd(8) سيستمر في البحث عن مفاتيح SSH للمستخدم فقط في الدليل المنزلي الرئيسي للمستخدم، وليس في أي من مناطقهم.

    لاحظ أن المنطقة المبدئية لتسجيل الدخول يمكن أيضًا تكوينها كجزء من حساب المستخدم. المنطقة المحددة عبر area= تتجاوز المنطقة المبدئية المُكونة هناك. لاحظ أيضًا أنه إذا حُددت المنطقة صراحةً بواسطة المستخدم في وقت تسجيل الدخول، فإنها تتجاوز كليهما. لاحظ أيضًا أن تعيين هذا المعامل إلى سلسلة فارغة له تأثير إلغاء تأثير أي منطقة مبدئية مُكونة كجزء من سجل المستخدم، أي ضمان تسجيل دخول المستخدم إلى الدليل المنزلي الرئيسي لحسابه.

    للمزيد من التفاصيل حول مفهوم المنطقة، راجع pam_systemd_home(8).

    أُضيف في الإصدار 258.

default-capability-bounding-set=, default-capability-ambient-set=
    يأخذ قائمة مفصولة بفواصل من قدرات العملية (مثل CAP_WAKE_ALARM، CAP_BLOCK_SUSPEND، ...) لتعيينها لعمليات الجلسة المُستدعاة، إذا كان سجل المستخدم لا يُشفر مجموعات القدرات المناسبة مباشرةً. انظر capabilities(7) للتفاصيل حول مفهوم القدرات. إذا لم يُحدد، تُترك المجموعة الحدودية المبدئية كما هي (أي تحتوي عادةً على المجموعة الكاملة من القدرات). تُعين المجموعة المحيطة المبدئية إلى CAP_WAKE_ALARM للمستخدمين العاديين إذا كانت جلسة PAM مرتبطة بمقعد محلي أو إذا كانت مُستدعاة لخدمة مستخدم systemd user@.service. بخلاف ذلك، تُعين المبدئية إلى المجموعة الفارغة.

    أُضيف في الإصدار 254.

debug[=]
    يأخذ وسيطاً بولياً اختيارياً. إذا كان نعم أو بدون الوسيط، فستقوم الوحدة بتسجيل معلومات تصحيح الأخطاء أثناء عملها.

أنواع الملحقات المتوفرة

يُقدم session فقط.

البيئة

تُهَيَّأُ متغيرات البيئة التالية بواسطة الوحدة وهي متاحة لعمليات جلسة المستخدم:

$XDG_SESSION_ID
    معرف جلسة قصير، مناسب للاستخدام في أسماء الملفات. يجب اعتبار السلسلة نفسها غير شفافة، على الرغم من أنها غالبًا ما تكون مجرد معرف جلسة التدقيق كما هو مبلغ عنه بواسطة /proc/self/sessionid. سيُخصص كل معرف مرة واحدة فقط أثناء وقت تشغيل الجهاز. قد يُستخدم بالتالي لتسمية الملفات أو الموارد الأخرى لهذه الجلسة بشكل فريد. ادمج هذا المعرف مع معرف الإقلاع، كما هو مُعاد بواسطة sd_id128_get_boot(3)، للحصول على معرف فريد عالميًا.

$XDG_RUNTIME_DIR
    مسار إلى دليل خاص بالمستخدم وقابل للكتابة من قبل المستخدم ومُرتبط بوقت تسجيل دخول المستخدم على الجهاز. يُنشأ آليًا في المرة الأولى التي يسجل فيها المستخدم الدخول ويُزال عند تسجيل خروج المستخدم النهائي. إذا سجل مستخدم الدخول مرتين في نفس الوقت، سترى كلتا الجلستين نفس $XDG_RUNTIME_DIR ونفس المحتويات. إذا سجل مستخدم الدخول مرة، ثم سجل الخروج مرة أخرى، وسجل الدخول مرة أخرى، ستكون محتويات الدليل قد فُقدت بينهما، ولكن لا ينبغي للتطبيقات الاعتماد على هذا السلوك ويجب أن تكون قادرة على التعامل مع الملفات القديمة. لتخزين بيانات خاصة بالجلسة في هذا الدليل، يجب على المستخدم تضمين قيمة $XDG_SESSION_ID في اسم الملف. يجب استخدام هذا الدليل لكائنات نظام الملفات وقت التشغيل مثل مقابس AF_UNIX و FIFOs وملفات PID وما شابه. مضمون أن هذا الدليل محلي ويوفر أكبر مجموعة ممكنة من ميزات نظام الملفات التي يوفرها نظام التشغيل. لمزيد من التفاصيل، انظر XDG Base Directory Specification[3]

$TZ، $EMAIL، $LANG
    إذا كان سجل مستخدم JSON معروفًا للمستخدم الذي يسجل الدخول، فتُهيأ هذه المتغيرات من البيانات المعنية في السجل.

    أُضيف في الإصدار 245.

$SHELL_PROMPT_PREFIX، $SHELL_PROMPT_SUFFIX، $SHELL_WELCOME
    تُهيأ متغيرات البيئة هذه من بيانات اعتماد الخدمة "shell.prompt.prefix" و"shell.prompt.suffix" و"shell.welcome" إذا تم تعيينها. تُمرر إلى عمليات الجلسة المستدعاة، حيث تُستورد إلى أي موجه شل (بشكل خاص، يُضاف $SHELL_PROMPT_PREFIX كبادئة إلى $PS1، و$SHELL_PROMPT_SUFFIX كلاحقة) أو تُطبع على الشاشة عندما تُهيأ شل لأول مرة.

    أُضيف في الإصدار 257.

تُقرأ متغيرات البيئة التالية بواسطة الوحدة وقد تُستخدم بواسطة خدمة PAM لتمرير بيانات وصفية إلى الوحدة. إذا لم تُعيّن هذه المتغيرات عند استدعاء وحدة PAM ولكن يمكن تحديدها بطريقة أخرى، فتُعيّن بواسطة الوحدة، بحيث تُهيأ هذه المتغيرات للجلسة والتطبيقات إذا كانت معروفة على الإطلاق.

$XDG_SESSION_TYPE
    نوع الجلسة. قد يُستخدم هذا بدلاً من type= في سطر معامل الوحدة، ويُفضل عادةً.

    أُضيف في الإصدارة 209.

$XDG_SESSION_CLASS
    فئة الجلسة. قد يُستخدم هذا بدلاً من class= في سطر معامل الوحدة، ويُفضل عادةً.

    أُضيف في الإصدارة 209.

$XDG_SESSION_DESKTOP
    معرف سطح المكتب. قد يُستخدم هذا بدلاً من desktop= في سطر معامل الوحدة، ويُفضل عادةً.

    أُضيف في الإصدارة 209.

$XDG_SEAT
    اسم المقعد الذي ستُسجل الجلسة له، إن وُجد.

    أُضيف في الإصدارة 209.

$XDG_VTNR
    رقم VT الذي ستُسجل الجلسة له، إن وُجد. (ينطبق فقط على المقاعد التي تتوفر بها VT، مثل "seat0")

    أُضيف في الإصدارة 209.

$XDG_AREA
    إذا تم تحديد منطقة (أدلة منزلية ثانوية للمستخدم، داخل الدليل الرئيسي) لتسجيل الدخول إليها، فتُعيّن هذه المتغيرات إلى اسم المنطقة (بدون أي بادئة مسار). وإلا فهي غير معينة. للتفاصيل حول المناطق، انظر أعلاه.

    أُضيف في الإصدار 258.

$XDG_SESSION_EXTRA_DEVICE_ACCESS
    مجموعة أجهزة العتاد الإضافية التي ستُمنح الجلسة حق الوصول إليها. لكل "ID" في القائمة، تُمنح الجلسة حق الوصول إلى جميع الأجهزة الموسومة بـ "xaccess-ID" في udev.

    أُضيف في الإصدار 260.

إذا لم يُعيّن، فسيهيئ pam_systemd $XDG_SEAT و$XDG_VTNR استنادًا إلى متغير $DISPLAY (إذا كان الأخير معينًا).

حدود الجلسة

يمكن لوحدات PAM السابقة في المكدس، أي تلك التي تأتي قبل pam_systemd.so، تعيين حدود نطاق الجلسة باستخدام كائنات سياق PAM. تُقدم بيانات هذه الكائنات كسلاسل C منتهية بـ NUL وتُخطط مباشرة لتوجيهات التحكم في موارد الوحدة المعنية. لاحظ أن هذه الحدود تنطبق على جلسات المستخدم الفردية، ولا تنطبق على جميع عمليات المستخدم ككل. على وجه الخصوص، مثيل الوحدة user@.service لكل مستخدم، الذي يشغل عملية مدير systemd --user وعملياته الفرعية، ويُتتبع خارج أي جلسة، ويُشارك بواسطة جميع جلسات المستخدم، لا يشمله هذه الحدود.

انظر systemd.resource-control(5) لمزيد من المعلومات حول الموارد. أيضًا، انظر pam_set_data(3) لمعلومات إضافية حول كيفية تعيين كائنات السياق.

systemd.memory_max=
    يُعيّن الوحدة MemoryMax=.

    أُضيف في الإصدار 239.

systemd.tasks_max=
    يُعيّن الوحدة TasksMax=.

    أُضيف في الإصدار 239.

systemd.cpu_weight=
    يُعيّن الوحدة CPUWeight=.

    أُضيف في الإصدار 239.

systemd.io_weight=
    يُعيّن الوحدة IOWeight=.

    أُضيف في الإصدار 239.

systemd.runtime_max_sec=
    يضبط RuntimeMaxSec=. للوحدة

    أُضيف في الإصدارة 244.

بيانات مثال يمكن توفيرها من وحدة PAM أخرى:

    pam_set_data(handle, "systemd.memory_max", (void *)"200M", cleanup);
    pam_set_data(handle, "systemd.tasks_max",  (void *)"50",   cleanup);
    pam_set_data(handle, "systemd.cpu_weight", (void *)"100",  cleanup);
    pam_set_data(handle, "systemd.io_weight",  (void *)"340",  cleanup);
    pam_set_data(handle, "systemd.runtime_max_sec", (void *)"3600", cleanup);

مثال

إليك مثال لجزء تهيئة PAM يسمح بإدارة جلسات المستخدمين بواسطة systemd-logind.service:

    #%PAM-1.0
    -auth     [success=done authtok_err=bad perm_denied=bad maxtries=bad default=ignore] pam_systemd_home.so
    auth      sufficient pam_unix.so
    auth      required   pam_deny.so
    account   required   pam_nologin.so
    -account  [success=done authtok_expired=bad new_authtok_reqd=bad maxtries=bad acct_expired=bad default=ignore] pam_systemd_home.so
    account   required   pam_unix.so
    -password sufficient pam_systemd_home.so
    password  sufficient pam_unix.so sha512 shadow try_first_pass
    password  required   pam_deny.so
    -session  optional   pam_keyinit.so revoke
    -session  optional   pam_loginuid.so
    -session  optional   pam_systemd_home.so
    -session  optional   pam_systemd.so
    session   required   pam_unix.so

انظر أيضًا

systemd(1), systemd-user-sessions.service(8), user@.service(5), systemd-logind.service(8), logind.conf(5), loginctl(1), pam_systemd_home(8), pam.conf(5), pam.d(5), pam(8), pam_loginuid(8), systemd.scope(5), systemd.slice(5), systemd.service(5)

ملاحظات

1.  سجلات مستخدم JSON
    https://systemd.io/USER_RECORD

2.  مواصفات إدخال سطح المكتب
    https://standards.freedesktop.org/desktop-entry-spec/latest/

3.  مواصفات مجلد الأساس XDG
    https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.