setfsuid(2)

الاسم
setfsuid - تعيين هوية المستخدم المستخدمة لفحوصات نظام الملفات

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

موجز
#include <sys/fsuid.h>

[[deprecated]] int setfsuid(uid_t fsuid);

الوصف
في لينكس، تمتلك العملية كلاً من معرّف مستخدم نظام الملفات ومعرّف مستخدم فعّال. يُستخدم معرّف مستخدم نظام الملفات (الخاص بلينكس) لفحص الأذونات عند الوصول إلى كائنات نظام الملفات، بينما يُستخدم معرّف المستخدم الفعّال لأنواع أخرى متنوعة من فحوصات الأذونات (انظر credentials(7)).

عادةً، تكون قيمة معرّف مستخدم نظام الملفات للعملية مساوية لقيمة معرّف المستخدم الفعّال. يحدث ذلك لأنه كلما تغير معرّف المستخدم الفعّال للعملية، يغير النواة أيضًا معرّف مستخدم نظام الملفات ليكون مساويًا للقيمة الجديدة لمعرّف المستخدم الفعّال. يمكن للعملية أن تتسبب في انحراف قيمة معرّف مستخدم نظام الملفات عن معرّف المستخدم الفعّال باستخدام setfsuid() لتغيير معرّف مستخدم نظام الملفات إلى القيمة المعطاة في fsuid.

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

ستنجح setfsuid() فقط إذا كان المستدعي هو المستخدم الفائق أو إذا كان fsuid يطابق إما معرّف المستخدم الحقيقي للمستدعي، أو معرّف المستخدم الفعّال، أو معرّف set-user-ID المحفوظ، أو معرّف مستخدم نظام الملفات الحالي.

قيمة الإرجاع
عند النجاح والفشل على حد سواء، يُرجع هذا الاستدعاء معرّف مستخدم نظام الملفات السابق للمستدعي.

المعايير
لينكس.

التاريخ
لينكس 1.2.

في الوقت الذي تم فيه تقديم استدعاء النظام هذا، كان بإمكان عملية إرسال إشارة إلى عملية أخرى بنفس معرّف المستخدم الفعّال. هذا يعني أنه إذا غيرت عملية متميزة معرّف المستخدم الفعّال لغرض فحص أذونات الملف، فقد تصبح عرضة لاستقبال إشارات مرسلة من عملية أخرى (غير متميزة) بنفس معرّف المستخدم. لذلك تمت إضافة سمة معرّف مستخدم نظام الملفات للسماح للعملية بتغيير معرّف المستخدم الخاص بها لأغراض فحص أذونات الملف دون أن تصبح في نفس الوقت عرضة لاستقبال إشارات غير مرغوب فيها. منذ لينكس 2.0، أصبحت معالجة أذونات الإشارات مختلفة (انظر kill(2))، مما أدى إلى أن العملية يمكنها تغيير معرّف المستخدم الفعّال دون أن تكون عرضة لاستقبال إشارات من عمليات غير مرغوب فيها. وبالتالي، فإن setfsuid() غير ضرورية في الوقت الحاضر ويجب تجنبها في التطبيقات الجديدة (وبالمثل بالنسبة لـ setfsgid(2)).

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

  الاختلافات بين مكتبة C والنواة
في glibc 2.15 والإصدارات الأقدم، عندما تحدد دالة الغلاف لاستدعاء النظام هذا أن الوسيطة لا يمكن تمريرها إلى النواة دون اقتطاع عدد صحيح (لأن النواة قديمة ولا تدعم معرّفات المستخدم ذات 32 بت)، فإنها سترجع -1 وتضبط errno على EINVAL دون محاولة استدعاء النظام.

العلل
لا يتم إرجاع أي مؤشرات خطأ من أي نوع إلى المستدعي، وحقيقة أن كلاً من الاستدعاءات الناجحة وغير الناجحة تُرجع نفس القيمة تجعل من المستحيل تحديد ما إذا كان الاستدعاء قد نجح أو فشل مباشرة. بدلاً من ذلك، يجب على المستدعي اللجوء إلى النظر في القيمة المُرجعة من استدعاء إضافي مثل setfsuid(-1) (الذي سيفشل دائمًا)، من أجل تحديد ما إذا كان استدعاء سابق لـ setfsuid() قد غير معرّف مستخدم نظام الملفات. على الأقل، يجب إرجاع EPERM عندما يفشل الاستدعاء (لأن المستدعي يفتقر إلى القدرة CAP_SETUID).

انظر أيضًا
kill(2), setfsgid(2), capabilities(7), credentials(7)

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

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

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