النقاط الرئيسية
- run0 هو أمر systemd جديد يهدف إلى استبدال sudo، حيث يوفر أذونات مرتفعة للأوامر.
- يستخدم run0 نظام systemd-run كبرنامج خلفي، ويقوم بتشغيل العمليات كخدمات مؤقتة قصيرة العمر.
- إن فوائد الأمان التي يوفرها run0 مقنعة، ولكنها لن تحل محل sudo بالكامل لفترة طويلة جدًا.
في 24 أبريل 2024، نشر لينارت بوتيرينج وصف أمر جديد في systemd، يسمى run0. وهو بديل لـ sudo. إليك ما تحتاج إلى معرفته حول أحدث الجدل حول systemd.
ما هو الخطأ في Sudo؟
يبدو أن الأمر sudo موجود منذ الأزل. في الواقع، يعود تاريخه إلى ثمانينيات القرن العشرين. يتيح لك تشغيل الأوامر أو البرامج كما لو كنت مالك الأمر أو عضوًا في مجموعة الأمر. والأمر المهم هو أنه إذا كان المالك الفعلي للأمر يتمتع بأذونات وقدرات مرتفعة، فسيتم تشغيل الأمر بهذه الأذونات المرتفعة. الأمر كما لو أن امتيازاته المرتفعة قد مُنحت لك مؤقتًا.
افتراضيًا، المستخدم الذي تنتحل شخصيته هو المستخدم الفائق، root. في الأصل، كان sudo يرمز إلى “superuser, do”. وقد تغير ذلك عندما سمحت لك التطورات اللاحقة باستخدام sudo لانتحال شخصية أي مستخدم. ويعني اسمه الآن “المستخدم البديل، do”، ولكنه يستخدم دائمًا تقريبًا لانتحال شخصية root.
لكي يتمكن المستخدمون العاديون من تشغيل أمر أو تطبيق بأذونات مرتفعة، يجب تعيين بتات SUID أو GUID، أو كليهما، على الأمر. وبالطبع، يجب السماح للمستخدم المعني باستخدام أمر sudo.
يتم تشغيل الكود المرتفع أو المتميز في سياق تنفيذ المستخدم المستدعي، وبالتالي يتم تشغيله في بيئة مخصصة لتشغيل الكود غير المتميز. وهذا في حد ذاته يشكل مصدر قلق أمني. أيضًا، إذا لم تتم كتابة الأمر بشكل صحيح لاحترام أذوناته المرتفعة، أو لم يتم تنظيفه بعد نفسه بشكل كامل وصحيح، فقد تنشأ نقاط ضعف أخرى. أحد متجهات الهجوم المعروفة يستغل الكتابة السيئة أو التكوين السيئ ملفات SUID الثنائية للحصول على غلاف الجذر.
ما الذي يفعله run0 بشكل مختلف؟
إن الأمر run0 ليس أمرًا جديدًا بحد ذاته، بل هو طريقة جديدة لاستدعاء أمر موجود. وهو عبارة عن رابط رمزي لمكون systemd قديم يسمى systemd-run. وكما يوحي اسمه، فإنه يقوم بتشغيل أو تشغيل عمليات أخرى. run0 هو واجهة أمامية لهذا الأمر.
يتم تشغيل العمليات التي يتم تشغيلها بواسطة run0 كخدمات مؤقتة قصيرة العمر. في اللحظة التي يعود فيها الأمر الخاص بك إلى المحطة الطرفية، تعود إلى كونك مستخدمًا عاديًا. لا توجد “فترة سماح” للمصادقة كما هو الحال مع sudo. إذا استخدمت sudo وأدخلت كلمة المرور الخاصة بك، فإن الاستخدامات اللاحقة لـ sudo في نفس المحطة الطرفية وضمن فترة مهلة sudo لا تتطلب المصادقة. تختلف فترة المهلة من توزيع إلى آخر، ولكن القيم من 5 إلى 15 دقيقة شائعة. مع run0، يمكنك المصادقة في كل مرة.
هناك فرق آخر وهو أن المصادقة تتم بواسطة polkit، وهي مجموعة أدوات سياسة مستوى التطبيق في systemd. وحيثما أمكن، تكون هذه المصادقة خارج نطاق الجلسة التي تقوم بتشغيل الأمر المستهدف. يتم تشغيل الأمر المرتفع في محطة طرفية وهمية متفرعة، وبالتالي فهو مغلف ومعزول. ولا يتوفر أي شيء تقريبًا من سياق تنفيذ المستخدم للأمر الذي يتم تشغيله، باستثناء متغير البيئة $TERM. وعلى نحو مماثل، لا يتم تمرير بيانات اعتماد المصادقة إلى سياق تنفيذ الأمر الذي يتم تشغيله.
لا تحتاج الأوامر التي يتم رفعها وتنفيذها بهذه الطريقة إلى تعيين بتات SUID أو GUID الخاصة بها، ولا إلى الامتثال والدقة فيما يتعلق بالتنظيف الداخلي. يتم التعامل مع كل ذلك بواسطة run0.
باستخدام sudo، يمكنك تحويل المستخدمين العاديين إلى مستخدمين خارقين غير مقيدين، أو يمكنك منحهم صلاحيات مستخدم خارق محدودة من خلال تحديد الأوامر التي يمكنهم استخدام sudo معها. يمكنك تحقيق هذا النوع من التفصيل باستخدام polkit أيضًا.
استخدام run0
لاستخدام run0، يجب تشغيل إصدار 256 من systemd، أو الأفضل من ذلك، إصدار 256.1 الذي تم إصلاح الأخطاء فيه. يتم طرح الإصدار 256.1 كتحديث في وقت كتابة هذا المقال، وتتضمن التثبيتات الجديدة لبعض توزيعات Linux الإصدار 256.1 كمعيار. يمكنك التحقق من الإصدار لديك باستخدام هذا الأمر.
systemctl --version
إن استخدام run0 يشبه إلى حد كبير استخدام sudo. عليك أن تسبق الأمر الذي تريد تشغيله بـ “run0″، ثم تقدم كلمة المرور الخاصة بك.
run0 ls
إذا كنت تستخدم بيئة سطح مكتب رسومية، فسيكون مطالبة إدخال كلمة المرور الخاصة بك عبارة عن مربع حوار.
يتغير لون خلفية النص في المحطة الطرفية لإظهار الرسالة التي تستخدمها للحصول على امتيازات متصاعدة. لاحظ أنه يعود إلى ألوان الخلفية المعتادة بمجرد اكتمال الأمر.
يمكنك استخدام خيار –background لإيقاف تشغيل لون الخلفية، أو تغييره إلى مجموعة ألوان ANSI من اختيارك.
لرؤية نص أبيض على خلفية زرقاء، استخدم تسلسل ANSI هذا.
run0 --background=“44;1” ls
لتشغيل نفس الأمر بدون تمييز الألوان، قم بحذف تسلسل ANSI، ولكن تأكد من ترك علامة “=”.
run0 --background= ls
إن كتابة run0 بدون معلمات الأوامر يقوم بتسجيل دخولك كجذر بشكل فعال.
run0
لاحظ التغيير في موجه الأوامر. يمكنك العودة إلى حالة المستخدم العادية عن طريق كتابة exit والضغط على Enter، أو الضغط على Ctrl+D.
إذا كنت تستخدم run0 على جهاز كمبيوتر يعمل بنظام Linux بدون بيئة سطح مكتب، فسوف يظهر موجه كلمة المرور الخاص بك في نافذة المحطة الطرفية.
هل سيتم استبدال sudo بـ run0؟
إن الأوامر تحل محلها بمرور الوقت. في الواقع، حلت sudo محل سابقتها الأقدم بكثير، su، والتي كانت جزءًا من أنظمة التشغيل الشبيهة بنظام يونكس منذ عام 1971. ولكن لا أحد يتوقع أن تتدخل run0 وتطيح بـ sudo. إن sudo راسخة للغاية بحيث لا يمكن أن تختفي بسرعة.
تبدو فوائد الأمان مقنعة للوهلة الأولى، ولكن بدون إزالة الثنائيات sudo وSUID من جهاز الكمبيوتر الخاص بك، فإن مجرد تبني run0 لن يحدث فرقًا كبيرًا في موقفك الأمني. هذا يشبه تركيب باب أفضل بجوار بابك الحالي المعيب.
من المرجح أن تواجه متطلبات “المصادقة في كل مرة، طوال الوقت” بعض المعارضة من جانب قاعدة المستخدمين، حتى وإن كانت طريقة أكثر أمانًا للعمل. ومن عجيب المفارقات أن polkit – وحدة المصادقة – تستخدم ثنائيات SUID، وقد تم اختبارها بنجاح. قضايا الأمن الخاصة بها.
يبدو أن هذا هو التعريف الحقيقي لشيء يقطع كلا الجانبين. إنه بمثابة طعنة في عين polkit وصفعة في الشفتين لثنائيات SUID.
مع ذلك، لا أزال أرى نقطة في المستقبل حيث يصبح run0 هو المعيار الجديد ولا يتم استبدال sudo تمامًا. ولكن ربما يتم تخفيضه إلى مرتبة أدنى.
يمكن القول إن run0 هي الطريقة الأفضل لزيادة الامتيازات، لكن sudo جزء من عقلية مستخدمي Linux. حتى عندما أفكر في run0، أجد نفسي أكتب sudo.
ربما يجب علينا جميعًا استخدام اسم مستعار sudo للإشارة إلى run0؟