ما الفرق بين su وsudo؟ وشرح تضبيط sudo

sudovssu

لينكس نظام آمن أكثر بكثير من نظرائه اﻵخرين، لعلّ  السبب في ذلك يرجع إلى سياسة إدارة المستخدمين وطلب استيثاق من المستخدمين، إذّ أنه غير مصرّح للمستخدمين الاعتياديين (Normal Users) تنفيذ عمليات حرجة في النظام.

إذا احتاج المستخدمون الاعتياديون تنفيذ مهامٍ هامّة فإنهم سوف يحتاجون حتمًا إمّا إلى su أو sudo.

*هذا الموضوع أكثر ملاءمة للتطبيق على توزيعة Ubuntu، لكن يمكن تطبيقه على معظم توزيعات لينكس اﻷخرى.

su ضد sudo

su يجبرك على مشاركة كلمة مرورك “الجذر” (root password) للمستخدمين اﻵخرين، في حين أن sudo يجعلك من الممكن تنفيذ الأوامر بدون كلمة مرور “الجذر”، sudo يسمح بتنفيذ اﻷوامر من خلال كلمة مرورك الخاصة وليست الجذر.

هذا يعني أن sudo أكثر أمانًا.

ما هو sudo؟

سودو هو عبارة عن “root binary setuid“، وهذا يعني أنها حزمة متعلقة بصلاحيات الجذر موجودة ضمن setuid الذي هو عبارة عن مجموعة من المعايير التي تكفل حقوق الوصول والصلاحيات للمستخدمين.

ويقوم سودو بتنفيذ أوامر الجذر بالنيابة عن المستخدمين المخوّلين بعد إدخال كلمة مرورهم الخاصة.

التحكم فيمَن يستطيع تنفيذ sudo

يمكننا التوجّه للمسار ‘/usr/sbin/visudo‘ ﻹضافة أو حذف قائمة المستخدمين الذين مسموح لهم استعمال اﻷمر sudo، اكتب اﻷمر التالي في الطرفية:

sudo /usr/sbin/visudo

انظر الصورة التالية:

su-vs-sudo

لاحظ أن قائمة sudo تكون افتراضيًا على الصورة التالية:

root ALL=(ALL) ALL

*يجب أن تمتلك صلاحيات الجذر لتتمكن من تحرير الملف  ‘/usr/sbin/visudo‘

منح صلاحيات الوصول

بعد أن عرفنا أن قائمة سودو تكون على السياق العام ALL ممنوحة لعموم المستخدمين، في العديد من اﻷحوال يجد مُدراء اﻷنظمة (Systems Admins)، خصوصًا أولئك المستجدون في هذا المجال تلك الجملة ويقومون بالعبث فيها بلا علم، هذا اﻷمر ضار جدًا، ﻷنها تعطي مَنحًا ووصولًا بلا قيود للآخرين.

إن تحرير هذا الملف إلى أحد هذه اﻷنماط التالية هو أمر غاية في الخطورة، إلا إذا كنتَ واثقًا حيال المستخدمين الذين تتعامل معهم:

root ALL=(ALL) ALL
adam ALL=(ALL) ALL
tom ALL=(ALL) ALL
mark ALL=(ALL) ALL

بعض عناصر وخصائص sudo

سودو أمر مرن للغاية، هذا يعني أنه يمكن تطبيق العديد من اﻷشياء عليه…

لاحظ الجملة التالية:

User_name Machine_name=(Effective_user) command

User_name يشير إلى اسم المستخدم الخاص بـ سودو (sudo user).

Machine_name يشير host name أو اسم الجهاز المضيف، وهو مفيد عندما يكون لديك العديد من اﻷجهزة.

Effective_user الذي يسمح للمستخدمين بتنفيذ أوامر النظام.

command الذي يشير إلى أمر أو مجموعة أوامر التي يريد المستخدم تنفيذها.

لنناقش بعض الحالات:

  • لنفرض أن لديك مستخدم اسمه “مارك” وهو مدير قواعد البيانات، أنت من المفترض أن توفّر له صلاحيات الوصول إلى خادوم قواعد البيانات (beta.database_server.com) حصرًا، وليس أي جهاز آخر؛ في هذه الحالة ينبغي كتابة اﻷمر التالي:
mark beta.database_server.com=(ALL) ALL
  • لنفرض أن لديك مستخدم اسمه “توم” والذي من المفترض أن يقوم بتنفيذ أوامر النظام كمستخدم وكجذر، وذلك على نفس خادوم قواعد البيانات الموضّح في الحالة اﻷولى، وعليه يُكتب اﻷمر على السياق التالي:
mark beta.database_server.com=(tom) ALL
  • لنفرض أن لديك مستخدم اسمه cat والذي مسموح له فقط بتنفيذ أوامر حصرية معينة ولنسمّها مثلًا أوامر dog، فإن اﻷمر يكون كالتالي:
mark beta.database_server.com=(cat) dog
  • لتنفيذ أكثر من أمر واحد افصل بين اﻷوامر بمسافة، لاحظ اﻷمر التالي الذي يوضّح ذلك:
mark beta.database_server.com=(cat) /usr/bin/command1 /usr/sbin/command2 /usr/sbin/command3 ...

أوامر طويلة؟! يمكنك مراجعة موضوعنا (قائمة ببعض أوامر لينكس المفيدة)، حيث ستقرأ في القطاع الثالث من الموضوع كيف تقوم بعمل اختصارات (aliases) للأوامر بحيث توفّر الوقت في كتابتها.

كيف يمكن تنفيذ أوامر sudo بدون كتابة كلمة المرور؟

نستطيع باستخدام المُعلَّمة ‘NOPASSWD‘ flag تنفيذ اﻷوامر بدون الحاجة إلى كتابة كلمة المرور، انظر اﻷمر التالي:

adam ALL=(ALL) NOPASSWD: PROCS

هذا اﻷمر يسمح للمستخدم “آدم” بتنفيذ الأوامر المُختصرة تحت الاسم PROCS بلا كلمة مرور.

إن سودو يقدّم بيئة قوية وأكثر أمانًا ومرونة بالمقارنة مع su، وفوق ذلك فإن عملية تضبيط sudo أكثر سهولة، بعض توزيعات لينكس تقوم بتمكين سودو بشكل افتراضي، فيما معظمها يتطلب منك تفعيله كإجراء أمني احترازي.

ﻹضافة المستخدم “بوب” مثلا إلى sudo، فقط شغّل اﻷمر التالي بصلاحيات الجذر:

adduser bob sudo

هذا كل شيء حتى اﻵن، قد نناقش أشياء أخرى في مواضيع لاحقة.

[tecmint]

  • ѦՊԻ

    مشكور بارك الله فيك

  • Muhammed Alsyary

    مااسم هذه التوزيعة التي تستخدمها اخي الكريم
    ام انك تستخدم ابونتو واضفت عليها لمسات رائعة

  • xMajedz

    يمكنك كتابة sudo visudo عوض عن sudo /usr/bin/visudo

    شكرا على الموضوع

مشاركة