سؤال

أريد أن تقوم عملية تتمتع بامتيازات المستخدم (وليست الجذر) بإطلاق عمليات جديدة كمستخدم nobody.لقد حاولت إجراء مكالمة مباشرة إلى setuid الذي فشل مع -1 EPERM على Ubuntu 8.04:

#include <sys/types.h>
#include <unistd.h>

int main() { 
       setuid(65534);
       while (1);
       return 0;
}

كيف يجب أن أفعل هذا بدلا من ذلك؟

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

المحلول

أنت سوف تحتاج إلى المساعدة والكثير من الثقة من مسؤول النظام لديك.لا يتمكن المستخدمون العاديون من تشغيل الملف القابل للتنفيذ من اختيارهم نيابة عن مستخدمين آخرين.

يمكنها إضافة طلبك إلى /etc/sudoers بالإعدادات المناسبة وستكون قادرًا على تشغيله كما هو الحال مع sudo -u nobody.سيعمل هذا مع كل من البرامج النصية والملفات التنفيذية الثنائية.

خيار آخر هو أنها ستفعل chown nobody و chmod +s على ملفك الثنائي القابل للتنفيذ وستكون قادرًا على تنفيذه مباشرةً.يجب تكرار هذه المهمة في كل مرة تقوم فيها بإجراء تغييرات قابلة للتنفيذ.

يمكن أن يعمل هذا أيضًا مع البرامج النصية إذا كنت ستنشئ مساعدًا صغيرًا قابلاً للتنفيذ والذي يفعل ذلك ببساطة exec("/home/you/bin/your-application").يمكن جعل هذا الملف القابل للتنفيذ suid-nobody (انظر أعلاه) ويمكنك تعديله بحرية your-application.

نصائح أخرى

بقدر ما أعرف، لا يمكنك ذلك إلا إذا كنت تستخدم الجذر أو قمت بإعداد Sudo للسماح لك بتبديل المستخدمين.أو يمكنك جعل الملف القابل للتنفيذ الخاص بك مُعدًا عليه بت suid، ولا يملكه أحد.ولكن هذا يتطلب الوصول إلى الجذر أيضًا.

المستخدم "لا أحد" لا يزال مستخدمًا.لست متأكدًا من السبب وراء تشغيل البرنامج بدون أي أحد، فهو لن يضيف أي أمان إضافي.من المرجح أن تفتح نفسك لمشاكل أخرى.

سأتبع توصية Squadette باستخدام تطبيق مساعد.

calife هو بديل ل sudo.

Calife هو برنامج صغير يمكّن مسؤول نظام UNIX من أن يصبح جذرًا (أو مستخدمًا آخر) على أجهزته دون إعطاء كلمة مرور الجذر ولكن كلمة المرور الخاصة به.

ركضت عبر setuid-رمل مشروع اليوم أثناء قراءة LWN، الذي يفعل ما أبحث عنه بالطريقة الصحيحة.

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