credentials(7)

الاسم
credentials - معرفات العمليات

الوصف

  معرف العملية (PID)
لكل عملية معرف صحيح فريد غير سالب يُعين عند إنشاء العملية باستخدام fork(2). تستطيع العملية الحصول على معرفها (PID) باستخدام getpid(2). يُمثل المعرف باستخدام النوع pid_t (المُعرف في <sys/types.h>).

تُستخدم معرفات العمليات (PIDs) في مجموعة من استدعاءات النظام لتحديد العملية المتأثرة بالاستدعاء، على سبيل المثال: kill(2)، و ptrace(2)، و setpriority(2)، و setpgid(2)، و setsid(2)، و sigqueue(3)، و waitpid(2).

يُحفظ معرف العملية عبر استدعاء execve(2).

  معرف العملية الأب (PPID)
يحدد معرف العملية الأب العملية التي أنشأت هذه العملية باستخدام fork(2). تستطيع العملية الحصول على معرف أبيها (PPID) باستخدام getppid(2). يُمثل معرف العملية الأب باستخدام النوع pid_t.

يُحفظ معرف العملية الأب عبر استدعاء execve(2).

  معرف مجموعة العملية ومعرف الجلسة
لكل عملية معرف جلسة ومعرف مجموعة عملية، وكلاهما يُمثلان باستخدام النوع pid_t. تستطيع العملية الحصول على معرف جلستها باستخدام getsid(2)، ومعرف مجموعة العملية الخاص بها باستخدام getpgrp(2).

يرث الفرع المنشأ بواسطة fork(2) معرف جلسة والده ومعرف مجموعة عمليته. يُحفظ معرف الجلسة ومعرف مجموعة العملية عبر استدعاء execve(2).

الجلسات ومجموعات العمليات هي تجريدات صُممت لدعم التحكم في الوظائف في الـ صدفة. مجموعة العملية (تسمى أحياناً "وظيفة") هي مجموعة من العمليات التي تشترك في نفس معرف مجموعة العملية؛ تنشئ الـ صدفة مجموعة عملية جديدة للعملية (أو العمليات) المستخدمة لتنفيذ أمر واحد أو أنبوب (مثلاً، العمليتان اللتان أُنشئتا لتنفيذ الأمر "ls | wc" توضعان في نفس مجموعة العملية). يمكن ضبط عضوية العملية في مجموعة باستخدام setpgid(2). العملية التي يتطابق معرفها (PID) مع معرف مجموعة عمليتها هي رئيس مجموعة العملية لتلك المجموعة.

الجلسة هي مجموعة من العمليات التي تشترك في نفس معرف الجلسة. جميع أعضاء مجموعة العملية يملكون أيضاً نفس معرف الجلسة (أي أن جميع أعضاء مجموعة العملية ينتمون دائماً إلى نفس الجلسة، وبذلك تشكل الجلسات ومجموعات العمليات تسلسلاً هرمياً صارماً من مستويين للعمليات). تُنشأ جلسة جديدة عندما تستدعي عملية setsid(2)، والذي ينشئ جلسة جديدة يكون معرف جلستها هو نفس معرف العملية (PID) التي استدعت setsid(2). يُسمى منشئ الجلسة رئيس الجلسة.

تشترك جميع العمليات في الجلسة في طرفية تحكم. تُنشأ طرفية التحكم عندما يفتح رئيس الجلسة طرفية لأول مرة (ما لم يُحدد العلم O_NOCTTY عند استدعاء open(2)). يمكن أن تكون الطرفية طرفية تحكم لجلسة واحدة على الأكثر.

يمكن لوظيفة واحدة على الأكثر في الجلسة أن تكون وظيفة الواجهة؛ الوظائف الأخرى في الجلسة هي وظائف خلفية. وظيفة الواجهة فقط هي من يمكنها القراءة من الطرفية؛ عندما تحاول عملية في الخلفية القراءة من الطرفية، تُرسل إشارة SIGTTIN إلى مجموعة عمليتها، مما يعلق الوظيفة. إذا ضُبط علم TOSTOP للطرفية (انظر termios(3))، فإن وظيفة الواجهة فقط هي من يمكنها الكتابة إلى الطرفية؛ تتسبب الكتابة من وظائف الخلفية في توليد إشارة SIGTTOU، مما يعلق الوظيفة. عند الضغط على مفاتيح الطرفية التي تولد إشارة (مثل مفتاح المقاطعة، وعادة ما يكون control-C)، تُرسل الإشارة إلى العمليات في وظيفة الواجهة.

قد تعمل استدعاءات نظام ودوال مكتبات متنوعة على جميع أعضاء مجموعة عملية، بما في ذلك kill(2)، و killpg(3)، و getpriority(2)، و setpriority(2)، و ioprio_get(2)، و ioprio_set(2)، و waitid(2)، و waitpid(2). انظر أيضاً مناقشة عمليات F_GETOWN، و F_GETOWN_EX، و F_SETOWN، و F_SETOWN_EX في fcntl(2).

  معرفات المستخدم والمجموعة
ترتبط بكل عملية معرفات مستخدم ومجموعة متنوعة. هذه المعرفات هي أعداد صحيحة، تُمثل على التوالي باستخدام النوعين uid_t و gid_t (المُعرفين في <sys/types.h>).

في لينكس، تملك كل عملية معرفات المستخدم والمجموعة التالية:

•   معرف المستخدم الحقيقي ومعرف المجموعة الحقيقي. تحدد هذه المعرفات من يملك العملية. تستطيع العملية الحصول على معرف مستخدمها (مجموعتها) الحقيقي باستخدام getuid(2) (getgid(2)).

•   معرف المستخدم الفعال ومعرف المجموعة الفعال. تستخدم الـ نواة هذه المعرفات لتحديد الصلاحيات التي ستحصل عليها العملية عند الوصول إلى الموارد المشتركة مثل طوابير الرسائل، والذاكرة المشتركة، والسيمافورات. في معظم أنظمة UNIX، تحدد هذه المعرفات أيضاً الصلاحيات عند الوصول إلى الملفات. ومع ذلك، يستخدم لينكس معرفات نظام ملفات الموضحة أدناه لهذه المهمة. تستطيع العملية الحصول على معرف مستخدمها (مجموعتها) الفعال باستخدام geteuid(2) (getegid(2)).

•   معرف المستخدم المعين المحفوظ ومعرف المجموعة المعين المحفوظ. تُستخدم هذه المعرفات في برامج set-user-ID و set-group-ID لحفظ نسخة من المعرفات الفعالة المقابلة التي ضُبطت عند تنفيذ البرنامج (انظر execve(2)). يمكن لبرنامج set-user-ID اكتساب وإسقاط الامتيازات عبر التبديل بمعرف مستخدمه الفعال ذهاباً وإياباً بين القيم في معرف مستخدمه الحقيقي ومعرف المستخدم المعين المحفوظ. يُجرى هذا التبديل عبر استدعاءات seteuid(2) أو setreuid(2) أو setresuid(2). يقوم برنامج set-group-ID بمهام مماثلة باستخدام setegid(2) أو setregid(2) أو setresgid(2). تستطيع العملية الحصول على معرف المستخدم (المجموعة) المعين المحفوظ باستخدام getresuid(2) (getresgid(2)).

•   معرف مستخدم نظام ملفات ومعرف مجموعة نظام ملفات (خاص بلينكس). تُستخدم هذه المعرفات، بالاشتراك مع معرفات المجموعات التكميلية الموضحة أدناه، لتحديد صلاحيات الوصول إلى الملفات؛ انظر path_resolution(7) للتفاصيل. كلما غُيّر معرف المستخدم (المجموعة) الفعال لعملية ما، تقوم الـ نواة أيضاً وبشكل آلي بتغيير معرف مستخدم (مجموعة) نظام ملفات إلى نفس القيمة. ونتيجة لذلك، تملك معرفات نظام ملفات عادةً نفس قيم المعرفات الفعالة المقابلة، وبالتالي تكون دلالات فحوصات صلاحيات الملفات هي نفسها في لينكس كما في أنظمة UNIX الأخرى. يمكن جعل معرفات نظام ملفات تختلف عن المعرفات الفعالة عبر استدعاء setfsuid(2) و setfsgid(2).

•   معرفات المجموعات التكميلية. هذه مجموعة من معرفات المجموعات الإضافية التي تُستخدم لفحوصات الصلاحيات عند الوصول إلى الملفات والموارد المشتركة الأخرى. قبل لينكس 2.6.4، يمكن أن تكون العملية عضواً في ما يصل إلى 32 مجموعة تكميلية؛ ومنذ لينكس 2.6.4، يمكن أن تكون العملية عضواً في ما يصل إلى 65536 مجموعة تكميلية. يمكن استخدام الاستدعاء sysconf(_SC_NGROUPS_MAX) لتحديد عدد المجموعات التكميلية التي يمكن أن تكون العملية عضواً فيها. تستطيع العملية الحصول على مجموعة معرفات مجموعاتها التكميلية باستخدام getgroups(2).

ترث العملية الفرعية المنشأة بواسطة fork(2) نسخاً من معرفات المستخدم والمجموعة الخاصة بوالدها. أثناء execve(2)، تُحفظ معرفات المستخدم والمجموعة الحقيقية ومعرفات المجموعات التكميلية للعملية؛ أما المعرفات الفعالة والمعينة المحفوظة فقد تتغير، كما هو موضح في execve(2).

بصرف النظر عن الأغراض المذكورة أعلاه، تُستخدم معرفات مستخدم العملية أيضاً في عدد من السياقات الأخرى:

•   عند تحديد صلاحيات إرسال الإشارات (انظر kill(2))؛

•   عند تحديد صلاحيات ضبط معلمات جدولة العملية (قيمة nice، سياسة وأولوية جدولة الوقت الحقيقي، تقارب المعالج (CPU affinity)، أولوية الإدخال/الإخراج) باستخدام setpriority(2)، و sched_setaffinity(2)، و sched_setscheduler(2)، و sched_setparam(2)، و sched_setattr(2)، و ioprio_set(2)؛

•   عند فحص حدود الموارد (انظر getrlimit(2))؛

•   عند فحص الحد الأقصى لعدد مثيلات inotify التي يمكن للعملية إنشاؤها (انظر inotify(7)).

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

setuid(2) (
    setgid(2)) تعديل معرفات المستخدم (المجموعة) الحقيقية للعملية (وربما الفعالة والمعينة المحفوظة).

seteuid(2) (
    setegid(2)) تعديل معرف المستخدم (المجموعة) الفعال للعملية.

setfsuid(2) (
    setfsgid(2)) تعديل معرف مستخدم (مجموعة) نظام ملفات للعملية.

setreuid(2) (
    setregid(2)) تعديل معرفات المستخدم (المجموعة) الحقيقية والفعالة للعملية (وربما المعينة المحفوظة).

setresuid(2) (
    setresgid(2)) تعديل معرفات المستخدم (المجموعة) الحقيقية، والفعالة، والمعينة المحفوظة للعملية.

setgroups(2)
    تعديل قائمة المجموعات التكميلية للعملية.

تُنقل أي تغييرات في معرف المستخدم (المجموعة) الفعال للعملية بشكل آلي إلى معرف مستخدم (مجموعة) نظام ملفات للعملية. كما يمكن أن تؤثر التغييرات في معرف المستخدم أو المجموعة الفعال للعملية على سمة العملية "dumpable"، كما هو موضح في prctl(2).

يمكن أن تؤثر التغييرات في معرفات مستخدم ومجموعة العملية على قدرات العملية، كما هو موضح في capabilities(7).

المعايير
معرفات العمليات، ومعرفات العمليات الأب، ومعرفات مجموعات العمليات، ومعرفات الجلسات محددة في POSIX.1. كما أن معرفات المستخدم والمجموعة الحقيقية، والفعالة، والمعينة المحفوظة، ومعرفات المجموعات التكميلية محددة في POSIX.1.

معرفات مستخدم ومجموعة نظام ملفات هي امتداد خاص بلينكس.

ملاحظات
تُظهر حقول متنوعة في الملف /proc/pid/status بيانات اعتماد العملية الموضحة أعلاه. انظر proc(5) لمزيد من المعلومات.

تتطلب مواصفات خيوط POSIX أن تُتشارك بيانات الاعتماد بواسطة جميع الخيوط في العملية. ومع ذلك، على مستوى الـ نواة، يحتفظ لينكس ببيانات اعتماد مستخدم ومجموعة منفصلة لكل خيط. يقوم تنفيذ خيوط NPTL ببعض العمل لضمان أن أي تغيير في بيانات اعتماد المستخدم أو المجموعة (مثلاً، استدعاءات setuid(2)، setresuid(2)) يُنقل إلى جميع خيوط POSIX في العملية. انظر nptl(7) لمزيد من التفاصيل.

انظر أيضًا
bash(1)، و csh(1)، و groups(1)، و id(1)، و newgrp(1)، و ps(1)، و runuser(1)، و setpriv(1)، و sg(1)، و su(1)، و access(2)، و execve(2)، و faccessat(2)، و fork(2)، و getgroups(2)، و getpgrp(2)، و getpid(2)، و getppid(2)، و getsid(2)، و kill(2)، و setegid(2)، و seteuid(2)، و setfsgid(2)، و setfsuid(2)، و setgid(2)، و setgroups(2)، و setpgid(2)، و setresgid(2)، و setresuid(2)، و setsid(2)، و setuid(2)، و waitpid(2)، و euidaccess(3)، و initgroups(3)، و killpg(3)، و tcgetpgrp(3)، و tcgetsid(3)، و tcsetpgrp(3)، و group(5)، و passwd(5)، و shadow(5)، و capabilities(7)، و namespaces(7)، و path_resolution(7)، و pid_namespaces(7)، و pthreads(7)، و signal(7)، و system_data_types(7)، و unix(7)، و user_namespaces(7)، و sudo(8)

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

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

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