سؤال

(هذا السؤال له عنوان متطابق ، لكن سؤال السؤال يسأله في وجهة نظر البرمجة النصية ، على سبيل المثال su -c, ، لا تخيب هذا إلى ذلك)

لدي تطبيق QT GUI يحتاج إلى تنفيذ بعض عمليات الملفات في /etc بناءً على إدخال المستخدم. من المحتمل أن يستخدم خيار واحد system() مع sudo, ، ولكن حتى ذلك يتطلب العبث مع sudoers ملف في مرحلة ما. كما أود ألا أفعل system() بالإضافة إلى اختراقات البرنامج النصي لتعديل الملفات ، ولكن عمليات الملف المناسبة.

ما هي أفضل طريقة لرفع حقوق الطلبات الخاصة بي بشكل برمجي؟

تحرير: كمكافأة ، سيكون من الرائع أن يعمل على Maemo/Meego/آخر الحفر أيضًا (Afaik PolicyKit غير متاح هناك ..)

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

المحلول

أود أن أكتب برنامجًا منفصلاً تمامًا. شيء على غرار هذا فلسفة. بشكل أساسي - اكتب برنامجًا بسيطًا يقوم بما تحتاجه بالضبط ، والتحكم في سلوكه مع أذونات الملفات على نظام الملفات. خاصة،

افعل أقل قدر ممكن في برامج setuid.

يجب أن يعمل برنامج setuid في بيئة خطيرة للغاية: يكون المستخدم تحت سيطرة كاملة على FDS و ARGS و Environ و CWD و TTY و RLIMITS و TIMES والإشارات والمزيد. والأسوأ من ذلك ، أن قائمة العناصر التي يتم التحكم فيها تختلف من UNIX من بائع إلى آخر ، لذلك من الصعب للغاية كتابة التعليمات البرمجية المحمولة التي تنظف كل شيء.

من بين عشرين حفرة أمان Sendmail الأحدث ، عمل أحد عشر فقط لأن نظام SendMail بالكامل هو setuid.

برنامج Qmail واحد فقط هو setuid: qmail-queue. الغرض الوحيد منه هو إضافة رسالة بريد جديدة إلى قائمة الانتظار الصادرة.

و،

افعل أقل قدر ممكن من الجذر.

يعمل نظام SendMail بأكمله كجذر ، لذلك لا توجد طريقة يمكن أن تصطدم بها أخطائه بواسطة الحماية المدمجة لنظام التشغيل. في المقابل ، يعمل برنامجان Qmail فقط ، Qmail-Start و Qmail-Lspawn ، كجذر.

نصائح أخرى

يمكنك استخدام PolicyKit ، الذي يحل محل GKSU/SU/SUDO تدريجياً ، وخاصة على Ubuntu ، من أجل أمنه العالي والسيطرة على الحبيبات الدقيقة بسبب الارتفاع أجراءات, ليس البرنامج كله.

إنشاء مساعد برنامج setuid هذا فقط الأشياء التي تريد القيام بها ، و شوكة / exec طلبك منه. ثم إسقاط الامتيازات في عملية الطفل. يمكن أن يتواصل كلا التطبيقات عبر الأنابيب والمآخذ أو شيء من هذا القبيل.

ضع في اعتبارك أن برامج setuid تشكل مخاطر أمان ، وبالتالي يجب أن تكون حذراً للغاية عند تنفيذ واحدة.

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