سؤال

هل هناك طريقة لتغيير UID / GID فقط من موضوع واحد في عملية مؤشرات؟

والسبب في ذلك هو كتابة تطبيق التي تخدم ملف - لا يتم فرض في ACL وحصة ما لم يتم تعيين رمز المستخدم / دائرة المخابرات العامة المتصل للمستخدم الصحيح، ملفات جديدة / لا يتم إنشاء الدلائل مع صحيحة رمز المستخدم / دائرة المخابرات العامة الخ .

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

ووUID "ثابت" لعملية برمتها ويبدو أن وفقا للمعايير POSIX، ومع ذلك توزيعات إكس القديمة لم يتبع POSIX وسمح uids مختلفة للمواضيع مختلفة. يبدو أن حبات جديدة لمتابعة POSIX، هل هناك طريقة للسماح للسلوك القديم "كسر"؟

هل كانت مفيدة؟

المحلول

ولينكس محددة setfsuid() / setfsgid() هي لكل موضوع ليس لكل عملية. أنها مصممة خصيصا لهذه الحالة استخدام (خادم ملف).

لاحظ أن access() لا تزال تحقق الوصول باستخدام رمز المستخدم الحقيقي ودائرة المخابرات العامة - وهذا هو حسب التصميم (فإنه يهدف إلى الإجابة على السؤال <م> "يجب على المستخدم الذي كان يدير هذا الثنائي لديهم وصول بالنظر إلى هذا الملف" ). لsetfsuid() / حالة setfsgid() يجب أن مجرد محاولة العملية المطلوبة وكشف فشل بسبب عدم وجود إذن في هذه النقطة.

نصائح أخرى

لتغيير رمز المستخدم فقط من أجل موضوع واحد تحتاج إلى استخدام syscall مباشرة: syscall (SYS_setresuid، ...)؛ سوف setresuid وظيفة LIBC () مزامنة بالنسبة لجميع المواضيع (باستخدام سينغال الذي يرسل إلى كل موضوع)!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top