setresuid(2)

الاسم
setresuid, setresgid - تعيين معرف المستخدم أو المجموعة الحقيقي والفعال والمحفوظ

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#define _GNU_SOURCE         /* انظر feature_test_macros(7) */
#include <unistd.h>

int setresuid(uid_t ruid, uid_t euid, uid_t suid);
int setresgid(gid_t rgid, gid_t egid, gid_t sgid);

الوصف
تضبط setresuid() معرف المستخدم الحقيقي، ومعرف المستخدم الفعال، ومعرف مجموعة المستخدم المحفوظ للعملية المستدعية.

يمكن لعملية غير مميزة تغيير UID الحقيقي، وUID الفعال، وUID مجموعة المستخدم المحفوظ، كل منها إلى واحد من: UID الحقيقي الحالي، أو UID الفعال الحالي، أو UID مجموعة المستخدم المحفوظ الحالي.

يمكن لعملية مميزة (في لينكس، تلك التي تملك القدرة CAP_SETUID) تعيين UID الحقيقي، وUID الفعال، وUID مجموعة المستخدم المحفوظ إلى قيم عشوائية.

إذا كانت إحدى الوسائط تساوي -1، لا تتغير القيمة المقابلة.

بغض النظر عن التغييرات التي تُجرى على UID الحقيقي، وUID الفعال، وUID مجموعة المستخدم المحفوظ، يُضبط UID نظام الملفات دائمًا على نفس قيمة UID الفعال (الجديد المحتمل).

بشكل مشابه تمامًا، تضبط setresgid() GID الحقيقي، وGID الفعال، وGID مجموعة المجموعة المحفوظ للعملية المستدعية (وتعدل دائمًا GID نظام الملفات ليكون نفس GID الفعال)، مع نفس القيود للعمليات غير المميزة.

قيمة الإرجاع
عند النجاح، يُعاد الصفر. وعند حدوث خطأ، يُعاد الرقم -1، ويُضبط errno للإشارة إلى الخطأ.

ملاحظة: هناك حالات قد يفشل فيها setresuid() حتى عندما يكون المستدعي UID 0؛ من الخطأ الأمني الجسيم إهمال التحقق من إرجاع الفشل من setresuid().

الأخطاء

EAGAIN
    كان الاستدعاء سيغير معرف المستخدم الحقيقي (UID) للمستدعي (أي أن ruid لا يطابق معرف المستخدم الحقيقي للمستدعي)، ولكن حدث فشل مؤقت في تخصيص هياكل بيانات النواة اللازمة.

EAGAIN
    لا يتطابق ruid مع معرف المستخدم الحقيقي لـ المستدعِي وهذا الاستدعاء سيجعل عدد العمليات التابعة لمعرف المستخدم الحقيقي ruid يتجاوز حد مورد RLIMIT_NPROC الخاص بـ المستدعِي. منذ لينكس 3.1، لم تعد حالة الخطأ هذه تحدث (لكن يجب على التطبيقات القوية التحقق من هذا الخطأ)؛ انظر وصف EAGAIN في execve(2).

EINVAL
    واحد أو أكثر من معرفات المستخدم أو المجموعة المستهدفة غير صالح في فضاء أسماء المستخدم هذا.

EPERM
    العملية المستدعية غير مميزة (لم تمتلك القدرة اللازمة في نطاق المستخدم الخاص بها) وحاولت تغيير المعرفات إلى قيم غير مسموح بها. بالنسبة لـ setresuid()، القدرة اللازمة هي CAP_SETUID؛ بالنسبة لـ setresgid()، هي CAP_SETGID.

الإصدارات

  الاختلافات بين مكتبة C والنواة
على مستوى النواة، معرفات المستخدمين والمجموعات هي سمة لكل خيط. ومع ذلك، تتطلب POSIX أن تشارك جميع الخيوط في العملية نفس بيانات الاعتماد. يعالج تنفيذ الخيوط NPTL متطلبات POSIX من خلال توفير دوال غلاف لاستدعاءات النظام المختلفة التي تغير UIDs وGIDs للعملية. تستخدم دوال الغلاف هذه (بما في ذلك تلك الخاصة بـ setresuid() و setresgid()) تقنية قائمة على الإشارات لضمان أنه عندما يغير خيط بيانات اعتماده، تغير جميع الخيوط الأخرى في العملية بيانات اعتمادها أيضًا. للتفاصيل، انظر nptl(7).

المعايير
POSIX.1-2024.

التاريخ
POSIX.1-2024. لينكس 2.1.44، glibc 2.3.2. HP-UX، FreeBSD.

دعمت استدعاءات النظام الأصلية setresuid() و setresgid() في لينكس معرفات المستخدمين والمجموعات ذات 16 بت فقط. لاحقًا، أضاف لينكس 2.4 setresuid32() و setresgid32()، لدعم معرفات 32 بت. تتعامل دوال الغلاف setresuid() و setresgid() في glibc بشفافية مع الاختلافات عبر إصدارات النواة.

انظر أيضًا
getresuid(2)، getuid(2)، setfsgid(2)، setfsuid(2)، setreuid(2)، setuid(2)، capabilities(7)، credentials(7)، user_namespaces(7)

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

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

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