العودة إلى المدونة

تهيئة ملف Linux Sudoers

تهيئة ملف Linux Sudoers

مقدمة

هل تتساءل يومًا لماذا يجب عليك كتابة “sudo” أثناء محاولة تنفيذ أوامر معينة في بيئة Linux أو Unix نظام التشغيل؟ Sudo هو في الواقع اختصار يرمز إلى “super-user do”. عند استخدام الأمر sudo، يمكنك تشغيل البرامج وتنفيذ الأوامر بامتيازات الأمان الخاصة بمستخدم آخر.

بشكل افتراضي، يسمح الأمر sudo لمستخدمي النظام بتنفيذ الأوامر بامتيازات المستخدم الخارق. يؤدي التثبيت الجديد لنظام التشغيل Linux/Unix إلى إنشاء حساب root يتمتع بامتيازات المستخدم الخارق. عند إجراء الإعداد الأولي للخادم لنظام Linux/Unix، يقوم مسؤولو النظام بتسجيل الدخول باستخدام حساب root وتخصيص حقوق النظام لمستخدمي النظام الآخرين. يتم تخزين هذه الإعدادات في ملف يسمى sudoers. يمكن للحساب الذي يتمتع بامتيازات root تعديل ملف sudoers وتغيير امتيازات المستخدمين الآخرين.

في هذا البرنامج التعليمي، سنناقش كيف يمكنك الحصول على امتيازات root وإجراء تعديلات على ملف sudoers.

المتطلبات الأساسية

هذا برنامج تعليمي عملي وستحتاج إلى اختبار الأوامر لفهم البرنامج التعليمي بالكامل. سنستخدم خادم Ubuntu 20.04 في هذا البرنامج التعليمي، ومع ذلك، يمكنك اتباع الخطوات إذا كان لديك أي من توزيعات Linux الحديثة مثل Debian و CentOS. يمكنك اتباع هذا رابط لإعداد خادم سحابي يعمل بنظام Ubuntu خاص بك على CloudSigma.

الحصول على امتيازات Root

يمكنك الحصول على امتيازات root من خلال ثلاث طرق سنناقشها أدناه:

تسجيل الدخول كـ root

أبسط طريقة يستخدمها معظم الأشخاص للحصول على امتيازات root هي تسجيل الدخول إلى النظام باستخدام بيانات اعتماد مستخدم root. إذا كنت تصل إلى جهازك المحلي، فيمكنك ببساطة تقديم اسم مستخدم وسيُطلب منك إدخال كلمة المرور.

طريقة أخرى يمكنك استخدامها لتسجيل الدخول كـ root هي استخدام SSH - وهي أداة سطر أوامر لتسجيل الدخول وأداء المهام على الخادم. تتطلب اسم مستخدم وعنوان IP الخاص بخادمك. صيغة تسجيل الدخول كـ root هي كما يلي، مع استبدال عنوان IP الخاص بخادمك:

عند إدخال الأمر أعلاه في الطرفية، سيُطلب منك إما تقديم كلمة المرور الخاصة بك إذا لم تكن قد قمت بإعداد مفاتيح SSH، أو سيُطلب منك إدخال عبارة المرور لمفتاح SSH الخاص بك إذا كنت قد قمت بإعدادها. بمجرد تقديم بيانات الاعتماد الصحيحة، سيتم تسجيل دخولك. اتبع هذا الدليل للحصول على إرشادات خطوة بخطوة حول كيفية استخدام SSH للاتصال بخادم بعيد في Ubuntu.

استخدام su لتصبح root

يمكنك تسجيل الدخول إلى نظام Linux باستخدام أي حساب آخر غير root، وهي الطريقة الموصى بها عادةً عند القيام بمهام غير إدارية. عندما تريد الحصول على امتيازات root، يمكنك ببساطة كتابة su في الطرفية الخاصة بك:

يطلب منك النظام كلمة مرور root، وبعد ذلك ستحصل على حق الوصول إلى جلسة shell لـ root. أثناء وجودك في جلسة shell هذه، يمكنك تنفيذ جميع المهام الإدارية وعندما تريد العودة إلى shell العادي، ما عليك سوى الضغط على Ctrl + D. اختياريًا، يمكنك كتابة exit في الطرفية واضغط على enter.

استخدام sudo لتشغيل الأوامر بامتيازات root

يسمح لك الأمر sudo، الذي تم تقديمه بإيجاز في بداية هذا البرنامج التعليمي، بتنفيذ أوامر ذات سطر واحد دون الحاجة إلى shell بامتيازات root. ما عليك سوى كتابة sudo متبوعًا بالأمر المراد تنفيذه:

على سبيل المثال، لتحديث نظامك، يمكنك إدخال ما يلي:

سيطلب منك كلمة مرور. الفرق بين الأمرين su و sudo هو أن su يطلب كلمة مرور root بينما يطلب sudo كلمة مرور المستخدم الحالي. لا يتم منح حق الوصول إلى sudo للمستخدمين افتراضيًا لأنه يحمل تداعيات أمنية كبيرة على النظام. سنناقش المزيد حول هذا في الأقسام التالية.

استخدام Visudo لتعديل ملف sudoers

يتم تكوين امتيازات Sudo في ملف sudoers الموجود في /etc/sudoers. هذه الامتيازات ضرورية لأي مستخدم للوصول إلى نظام Linux. أي خطأ في بناء الجملة سيمنع المستخدمين من تسجيل الدخول إلى النظام وبالتالي يترك النظام معطلاً.

Visudo يفتح الأمر الملف بمحرر خاص يتحقق من بناء جملة الملف عند الحفظ. لذلك من المهم أن تستخدم فقط visudo لفتح الملف لمنعك من جعل نظام الخادم الخاص بك غير قابل للاستخدام. بشكل افتراضي، تم تعيين visudo لفتح محرر النصوص باستخدام (vi) vim. ومع ذلك، قامت Ubuntu بتكوين visudo لاستخدام محرر النصوص nano. على Debian أو Ubuntu، يمكنك التغيير إلى محرر مختلف عن طريق إدخال الأمر التالي:

يعرض قائمة بالمحررين الذين يمكنك اختيار محرر افتراضي منهم، كما هو موضح في لقطة الشاشة. حدد الرقم المقابل للمحرر الذي تفضله:

displays a list of editors

على توزيعة CentOS Linux، قم بتحرير /etc/sudoers وإضافة السطور أدناه:

أدخل الأمر التالي. تذكر استبدال اسم your_editor_of_choice:

يضيف الأمر السطر إلى ملف ~/.bashrc. أدخل ما يلي في الطرفية لتطبيق التغييرات:

بعد تكوين visudo الآن، يمكنك فتح الملف في /etc/sudoers عن طريق إدخال الأمر:

تعديل ملف Sudoers

عند تشغيل الأمر السابق، يفتح الملف في المحرر الأساسي الخاص بك كما قمت بتكوينه. فيما يلي محتويات الملف:

التعليقات وصفية للغاية، ولكننا سنناقش ما تشير إليه السطور أدناه.

السطور الافتراضية
  • Defaults env_reset – يعيد تعيين متغيرات بيئة الطرفية لإزالة أي متغيرات خاصة بالمستخدم. وبالتالي، فإنه يمسح المتغيرات التي قد تكون ضارة من جلسة sudo.
  • Defaults mail_badpass – يوجه النظام لإرسال إشعارات بالبريد الإلكتروني لمحاولات كلمة مرور sudo الفاشلة إلى مستخدم mailto المكون، وعادة ما يكون حساب root.
  • Defaults secure_path – يحتوي على المسارات المتعددة في نظام الملفات التي ستفحصها عملية sudo للبحث عن التطبيقات لاستخدامها عند التنفيذ، وذلك لمنع استخدام مسارات أخرى محددة من قبل المستخدم قد تكون خطيرة على النظام.
سطور تحديد امتيازات المستخدم
هذا السطر يختلف عن السطور الأخرى ويحدد امتيازات المستخدم root. إليك ما يشير إليه كل وسم في السطر:

  1. root ALL=(ALL:ALL) ALL – يحدد الحقل الأول اسم المستخدم الذي ستنطبق عليه القاعدة. في هذه الحالة هو root المستخدم.
  2. root ALL=(ALL:ALL) ALL – الأول ALL يحدد أن القاعدة ستنطبق على جميع المضيفين.
  3. root ALL=(ALL:ALL) ALL – الثاني ALL يحدد أن المستخدم الذي تنطبق عليه هذه القاعدة (أي root) يمكنه تشغيل الأوامر كجميع المستخدمين.
  4. root ALL=(ALL:ALL) ALL – الثالث ALL يحدد أن المستخدم الذي تنطبق عليه هذه القاعدة (أي root) يمكنه تشغيل الأوامر كجميع المجموعات.
  5. root ALL=(ALL:ALL) ALL – الأخير ALL يحدد أن هذه القواعد تنطبق على جميع الأوامر.

بناءً على ما تشير إليه هذه القاعدة، يمكن للمستخدم root تشغيل أي أمر باستخدام sudo بمجرد إدخال كلمة المرور الصحيحة.

سطور تحديد امتيازات المجموعة

تحدد هذه السطور قواعد امتيازات sudo التي تنطبق على المجموعات. تشير الحقول إلى نفس الإجراءات مثل سطور امتيازات المستخدم، مع اختلاف بسيط. وهي تبدأ بـ % للإشارة إلى أسماء المجموعات.

كما ترى، فإن مجموعة admin يمكنها تنفيذ أي أمر كأي مستخدم على أي مضيف. ومجموعة sudo لديها نفس الامتياز مع امتياز إضافي لتنفيذ الأوامر كأية مجموعة.

سطر تضمين /etc/sudoers.d

قد يظهر السطر #includedir /etc/sudoers.d وكأنه تعليق بسبب وجود علامة # في بداية السطر. ومع ذلك، فإن هذا توجيه تضمين للإشارة إلى أنه يجب جلب الملفات الموجودة داخل دليل /etc/sudoers.d واستخدامها كجزء من ملف sudoers. تتبع الملفات الموجودة داخل هذا الدليل نفس القواعد المتبعة في ملف sudoers.

أي ملف داخل الدليل لا يحتوي على نقطة (.) فيه ولا ينتهي بـ ~ يتم قراءته وإلحاقه بتهيئة ملف sudoers. يتيح الدليل للتطبيقات تعديل امتيازات sudo عند التثبيت عن طريق وضع جميع القواعد المرتبطة بها داخل ملف مخصص واحد في دليل /etc/sudoers.d دون تعديل ملف sudoers الافتراضي. علاوة على ذلك، عندما تريد فحص أو إلغاء الامتيازات الخاصة بتطبيق ما، يمكنك بسهولة التحقق من الملفات أو تعديلها داخل دليل /etc/sudoers.d دون تعديل ملف /etc/sudoers مباشرة.

كقاعدة عامة، يجب دائمًا تعديل جميع الملفات الموجودة داخل دليل /etc/sudoers.d باستخدام الأمر visudo. في أدناه الصيغة البرمجية، تذكر استبدال اسم الملف الذي تريد تعديله في الأمر:

تعيين امتيازات Sudo لمستخدم

عندما تمنح مستخدمًا جديدًا وصول sudo عامًا، فهذا يعني أنك منحت حساب المستخدم وصولاً إداريًا كاملاً إلى النظام. هذه مهمة شائعة يقوم بها مسؤولو النظام عند إنشاء مستخدمين آخرين غير root بامتيازات sudo.

في أنظمة مثل Ubuntu 20.04 التي تحتوي بالفعل على مجموعة الإدارة العامة، يمكننا بسهولة تعيين امتيازات sudo لمستخدم عن طريق إضافة المستخدم إلى تلك المجموعة. مجموعة sudo كما تظهر في ملف /etc/sudoers تتمتع بامتيازات إدارية كاملة، ويمكننا إضافة اسم مستخدم إلى المجموعة عن طريق إدخال الأمر التالي:

اختياريًا، يمكنك استخدام الأمر gpasswd لتحقيق الشيء نفسه:

على نظام CentOS، تسمى المجموعة الافتراضية ذات امتيازات sudo باسم wheel، لذا يمكنك تعيين الامتيازات باستخدام الأمر:

اختياريًا، باستخدام الأمر gpasswd، يمكنك تحقيق الشيء نفسه باستخدام الأمر:

في بعض الحالات، فإن wheel قد تكون المجموعة على CentOS معلّقة في ملف /etc/sudoers. لتمكينها، افتح الملف باستخدام visudo وأزل علامة التعليق من السطر الذي يحتوي على اسم المجموعة. يمكنك القيام بذلك عن طريق إزالة # من بداية السطر: %wheel ALL=(ALL) ALL.

إنشاء قواعد مخصصة

مع معرفتك بالصيغة العامة لملف sudoers التي اكتسبتها حتى هذه النقطة، حان الوقت لتحديد بعض القواعد.

إنشاء أسماء مستعارة

تتيح لك الأسماء المستعارة تنظيم ملف sudoers الخاص بك عن طريق تجميع العناصر تحت "أسماء مستعارة" مختلفة. لدينا ثلاثة توجيهات سنناقشها في هذا القسم: User_Alias لإنشاء أسماء مستعارة للمستخدمين/المجموعات، Cmnd_Alias لإنشاء أسماء مستعارة للأوامر، و Runas_Alias للسماح لمستخدم آخر بالتشغيل كمستخدم آخر.

على سبيل المثال، باستخدام User_Alias، داخل ملف /etc/sudoers الخاص بك، يمكنك إضافة المقتطف التالي لإنشاء ثلاث مجموعات مختلفة من المستخدمين. قد ينتمي بعض المستخدمين إلى أكثر من مجموعة واحدة:

لاحظ أن جميع أسماء المجموعات تبدأ بحرف كبير. مع إضافة الأسماء المستعارة للمجموعات المذكورة أعلاه في ملف /etc/sudoers، يمكنك تعيين امتياز لتحديث قاعدة بيانات apt لـ GROUPTWO عن طريق إضافة القاعدة التالية في ملف /etc/sudoers :

لاحظ أنه بدون تحديد المستخدم/المجموعة للتشغيل باسمها، فإن الأمر sudo سيعود دائمًا بشكل افتراضي إلى المستخدم root .

إليك مثال على Cmnd_Alias حيث نقوم بإنشاء اسم مستعار للأمر لإيقاف تشغيل النظام وإعادة تشغيله. ثم يتم تعيين القاعدة لـ GROUPTHREE. يؤدي إضافة السطور التالية داخل ملف /etc/sudoers إلى تحقيق ذلك:

في المقتطف أعلاه، ينشئ السطر الأول اسمًا مستعارًا للأمر يسمى POWER يتضمن أوامر إيقاف التشغيل وإعادة التشغيل. يسمح السطر الثاني لأعضاء GROUPTHREE بتشغيل هذا الأمر.

إليك مثال على Runas_Alias، حيث نقوم بإنشاء اسم مستعار يسمح لمجموعة من المستخدمين بالتشغيل كمستخدم آخر:

في المقتطف أعلاه، ينشئ السطر الأول اسمًا مستعارًا يسمى WEB، يحدد أن الاسم المستعار سيتم تشغيله كمستخدم apache أو مستخدم www-data . يعين السطر الثاني الاسم المستعار لـ GROUPONE. الآن، يمكن لأعضاء المجموعة الأولى تنفيذ الأوامر إما كمستخدم apache أو www-data .

قواعد الإغلاق

في هذا القسم، ستتعلم الطرق المختلفة التي يمكنك من خلالها التحكم في كيفية تفاعل sudo مع الاستدعاء. بعض الأوامر غير ضارة نسبيًا على الأنظمة ذات المستخدم الواحد. في مثل هذه الحالات، قد تسمح للمستخدمين بتنفيذها بامتيازات root دون الحاجة إلى كتابة كلمة مرور root . على سبيل المثال، يمكنك إنشاء قاعدة للسماح للمستخدمين في GROUPONE بتشغيل الأمر updatedb دون إدخال كلمة مرور عن طريق إضافة ما يلي إلى ملف /etc/sudoers :

تعني العلامة NOPASSWD أنه لن يتم طلب كلمة مرور. العلامة المصاحبة للعلامة NOPASSWD هي PASSWD، وهو السلوك الافتراضي. وهذا يعني أنه يجب تقديم كلمة مرور عند المطالبة.

تنطبق العلامة على قاعدة ما لم يتم إلغاؤها بواسطة العلامة المصاحبة لها، على سبيل المثال:

في هذه القاعدة، يمكن للمستخدمين في GROUPTWO تنفيذ updatedb الأمر دون إدخال كلمة مرور. ومع ذلك، يجب عليهم تقديم كلمة مرور قبل تنفيذ أمر kill.

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

لمنع مثل هذا السلوك، يمكنك إضافة القاعدة التالية إلى ملف /etc/sudoers لتقييد مستخدم معين يتم تحديده بواسطة username:

معلومات إضافية

في هذا القسم، نقوم بتضمين بعض المعلومات والتوجيهات والأوامر الإضافية التي قد تجدها ضرورية عند العمل مع sudo.

إذا استخدمت Runas_Alias في التكوين، لتحديد أن مستخدمًا أو مجموعة يمكنهم التشغيل كمستخدم آخر، فيمكنك تنفيذ الأوامر بصفتهم باستخدام علامة -u للمستخدم وعلامة -g للمجموعات. إليك الصيغة:

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

في حال كان لديك المزيد من المهام لتنفيذها بامتيازات sudo، وتريد تمديد الوقت قبل طلب كلمة المرور، أو تريد تجنب مطالبة أمر sudo بكلمة مرور لاحقًا، يمكنك تجديد الوقت عن طريق كتابة الأمر التالي:

يطلب منك الأمر كلمة مرور ويقوم بتخزينها مؤقتًا لاستخدامات sudo اللاحقة.

لسرد امتيازات sudo المحددة لاسمك، يمكنك إدخال الأمر التالي:

يسرد الأمر جميع القواعد المكونة في ملف /etc/sudoers والتي تنطبق على اسم المستخدم الخاص بك. من خلال القواعد، يمكنك أخذ فكرة عن المهام التي يمكن لاسم المستخدم الخاص بك القيام بها على النظام. إليك لقطة شاشة كمثال:

screenshot

في بعض الحالات، قد تقوم بتنفيذ أوامر وتفشل لأنك نسيت أن تسبقها بـ sudo. في سيناريوهات البحث، قد تضطر إلى إعادة كتابة الأمر بدءًا من sudo. لتجنب الاضطرار إلى إعادة كتابة الأمر، يمكنك الاستفادة من وظيفة bash لـ "تكرار الأمر الأخير". الصيغة هي علامتا تعجب مزدوجتان. يمكنك تنفيذ آخر أمر قمت بتشغيله على جهاز الطرفية الخاص بك عن طريق إدخال ما يلي:

أخيرًا، من المهم معرفة أن sudo يرفع ببساطة الأمر ليتم تنفيذه بامتيازات sudo. لمزيد من المعلومات، يمكنك اتباع التعليمات الموجودة على هذا الرابط للحصول على بعض المرح مع المستخدمين لديك.

الخاتمة

عند العمل مع مستخدمين متعددين، فإن فهم كيفية التعامل مع أمر sudo وملف sudoers أمر بالغ الأهمية. في هذا البرنامج التعليمي، قدمنا أساسيات قراءة وتعديل ملف sudoers بالإضافة إلى الطرق المختلفة التي يمكنك استخدامها للحصول على امتيازات root.

ضع في اعتبارك دائمًا أن فصل الامتيازات هو ما يجعل أنظمة Linux آمنة. وبالتالي، لا ينبغي منح امتيازات المستخدم الخارق (super-user) للمستخدمين العاديين. قم بتعيين الامتيازات الضرورية تمامًا لمستخدم معين لأداء مهامه المحددة في النظام فقط وليس كل الامتيازات.

حوسبة سعيدة!

author

Manpreet Singh

المؤلف · CloudSigma

Preslav Dobrev هو مصمم إبداعي في CloudSigma، يركز على هوية أعمال متسقة باستخدام قنوات التسويق التقليدية والمبتكرة. هو بارع في دمج الرؤية الفنية مع التسويق الاستراتيجي لخلق سرد قصصي مؤثر للعلامة التجارية.

التعليقات

لا توجد تعليقات بعد. كن أول من يعلق.