يُمثِّل الفصل بين الامتيّازات Privileges أحد المبادئ الأمنيّة الأساسيّة المُدرجَة في Linux والأنظمة الشّبيهة بيونكس Unix-like. تجسيدًا لهذا المبدأ يعمل المسخدمون العاديّون بامتيّازات محدودة لحدّ دائرة تأثيرهم على بيئتهم الخاصّة وليس على كامل نظام التّشغيل. يوجد مستخدم خاصّ يُسمّى المستخدم الجذر root user
ويملك امتيّازات “المستخدم الأعلى”. حساب المستخدم الجذر هو حساب إداريّ لا توجد عليه القيود الموجودة على المستخدمين العاديّين. يُمكن للمستخدمين العاديّين تنفيذ أوامر بامتيّازات المستخدم الأعلى (المستخدم الجذر) بطرق مختلفة.
سنناقش في هذا الدّليل الطّريقة الصّحيحة والآمنة للحصول على امتيّازات المستخدم الجذر، مع التّركيز على ملفّ etc/sudoers/
. سنطبّق الخطوات المشروحة هنا على خادوم Ubuntu 14.04؛ يجب أن تكون هذه الخطوات صالحة لأغلب توزيعات لينوكس الحديثة.
نفترض في هذا الدّرس، أنّك أكملت خطوات درس الإعداد الابتدائي لخادوم أوبنتو.سجِّل الدّخول إلى خادوم أوبنتو بحساب مستخدم عادي (غير المستخدم الجذر).
كيف يمكن الحصول على امتيّازات المستخدم الجذر
توجد ثلاث طرق للحصول على امتيّازات المستخدم الجذر، تختلف في مستوى صعوبتها.
1- تسجيل الدّخول بحساب المستخدم الجذر
أسهل طريقة وأكثرها مباشرة للحصول على امتيّازات root
هيّ تسجيل الدّخول بدْءًا بحساب المستخدم الجذر. يكون تسجيل الدّخول عن بعد عبر SSH
على النّحو التّالي:
ssh root@your_IP_address_or_domain
حيث your_IP_address_or_domain
يمثّل عنوان IP العموميّ للخادوم أو نطاق الموقع. سيُطلب منك إدخال كلمة السّر قبل الولوج.
2- الانتقال إلى حساب المستخدم الجذر عن طريق “su”
لا يُنصَح بتسجيل الدّخول إلى الخادوم بحساب المستخدم الجذر؛ إذ قد يؤدّي ذلك إلى استخدام مُدير النّظام (root
) في مهامّ غير إداريّة، وهو أمر خطير أمنيًّا. الطّريقة الثّانيّة تسمح بالحصول على امتيّازات المستخدم الجذر في أيّ وقت، حال الحاجة إليها. يؤدّي أمر su
، وهو اختصار لsubstitute user
(أي “غيّر المستخدم”)، هذه المهمّة:
su
سيُطلب منك إدخال كلمة سرّ حساب المستخدم الجذر، ثمّ تنتقل بعدها إلى جلسة Shell
خاصّة بالمستخدم الأعلى. للخروج من جلسة المستخدم الجذر، بعد الانتهاء من أداء المهامّ الّتي تتطلّب امتيّازات إداريّة، نفّذ الأمر التّالي:
exit
3- استخدام “Sudo” لتنفيذ الأوامر بحساب المستخدم الجذر
الطّريقة الأخيرة، والأكثر تعقيدًا للحصول على امتيّازات root
هيّ استخدام أمر sudo
. يسمح أمر sudo
بتنفيذ أمر واحد بامتيّازات root
، دون الحاجة لإنشاء جلسة Shell
جديدة. تُنفَّذ الأوامر على النّحو التّالي (تُمثِّل command_to_execute
الأمر المُراد تنفيذه بامتيّازات المستخدم الجذر):
sudo command_to_execute
على عكس su
، يطلب أمر sudo
كلمة سرّ المستخدِم الّذي يُنفّذ الأمر وليس كلمة سرّ حساب المستخدِم الجذر.
لا يعمل أمر sudo
افتراضيًّا، نظرًا لتداعيّاته الأمنيّة، ويجب أن يُضبَط قبل أن يؤدّي وظائفه. إذا كنت تابعت خطوات درس الإعداد الابتدائي لخادوم أوبنتو فقد أكملت الإعدادات الأساسيّة لضبط مستخدم بامتيّازات الجذر.
سنناقش في الفقرة التّاليّة كيفيّة ضبط الإعداد بتفصيل أكثر.
ماهو Visudo؟
يُضبَط أمر sudo
عبر ملفّ يُتَوَّصل إليه عبر المسار etc/sudoers/
.
ملحوظة: لاتحرّر أبدًا هذا الملفّ بمحرّر نصوص عاديّ. استخدِم دائمًا أمر visudo
لهذا الغرض.
من المهمّ جدًّا استخدام أمر sudo
لتحرير ملفّ sudoers
، إذ يمكن أن يؤدّي استعمال صيغة خاطئة في هذا الملفّ إلى جعل نظام التشغيل في وضع لا يصحّ معه الحصول على امتيّازات إداريّة.
يعرض أمر visudo
محرّر نصوص شبيهًا بالمحرّرات العاديّة، ولكنّه يُضيف آليّة للتحقّق من صيغة التّعليمات الموجودة في الملفّ؛ تعمل عند محاولة الحفظ. تحول هذه الآليّة دون وجود أخطاء تمنع عمليّات sudo
.
ملحوظة: استخدِم الزرّيْن CTRL
وO
معًا لحفظ الملفّ ثمّ Enter
للتّأكيد. للخروج اضغط زرّيْ CTRL
وX
.
تاريخيًَا، كان أمر visudo
يفتح ملفّ etc/sudoers/
في محرّر vi
للنّصوص (اسم الأمر visudo
هو مزيج من vi
وsudo
)، إلّا أنّه في أوبنتو مُعَدّ لاستخدام محرّر nano
. في حال أردت العودة لاستخدام vi
لتحرير ملفّ sudoers
فالأمر التّالي يؤدّي هذه المهمّة
sudo update-alternatives --config editor
مثال على النّتيجة:
There are 3 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/nano 40 manual mode 2 /usr/bin/vim.basic 30 manual mode 3 /usr/bin/vim.tiny 10 manual mode
اختر العدد الموافق للمحرّر الّذي تريد اختيّاره.
على CentOS
، يمكن تغيير هذه القيمة بالتّعديل على السّطر التّالي، الموجود في ملفّ bashrc./~
(تمثّل /path/to/editor
المسار إلى المحرّر المطلوب):
export EDITOR=/path/to/editor
لأخذ التّغييرات في الحسبان، نفِّذ الأمر:
~/.bashrc
نفّذ الأمر التّالي، بعد الانتهاء من ضبط visudo
، للوصول إلى ملفّ etc/sudoers/
:
sudo visudo
كيف تحرّر ملفّ Sudoers
سيظهر - بعد تنفيذ أمر visudo
- ملفّ sudoers
في محرّر النّصوص.
أدناه ملفّ sudoers
في أوبنتو 14.04 بعد حذف التّعليقات (يتضمّن الإعدادات الّتي ضبطناها في درس كيف تُضيف أو تحذف المستخدمين على خادوم أوبنتو 14.04).
في CentOS يحوي الملفّ أسطرًا أكثر؛ لن نناقشَها كلَّها في هذا الدّليل.
Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" root ALL=(ALL:ALL) ALL %admin ALL=(ALL) ALL %sudo ALL=(ALL:ALL) ALL
فلنلقِ نظرة على عمل هذه الأسطر.
1- أسطر Defaults
السّطر الأوّل Defaults env_reset
يُعيد تعيين بيئة عمل الطّرفيّة من أجل حذف المتغيّرات الخاصّة بالمستخدمين من بيئة العمل. هذا الإجراء احترازيّ لمسح متغيّرات قد تكون مضرّة من جلسة sudo
، Sudo session. تعليمة Defaults mail_badpass
تطلب إرسال بريد إلى عنوان إلكتروني تُحدّده تعليمة أخرى (mailto
) عندما يُدخل مستخدم كلمة سرّ خاطئة أثناء تنفيذ أمر sudo
. هذه التّعليمة مُعطَّلة افتراضيًّا. أمّا التّعليمة الّتي تبدأ ب =Defaults secure_path
فتحدّد المسارات Paths الآمنة الّتي سيُبحَث فيها عن أمر sudo
. يحول هذا الإجراء دون استخدام مسارات قد تحوي برامج ضارّة.
2- أسطر امتيّازات المستخدم
يتعلّق السّطر الرّابع بالامتيّازات الّتي ينالها المستخدم عند تنفيذه أمر sudo
.
root ALL=(ALL:ALL) ALL
يُشير الحقل الأوّل من السّطر إلى المستخدِم الّذي تنطبق عليه التّعليمة (المستخدِم الجذر في هذه الحالة).
- قيمة الحقل التّالي (
ALL
) تُشير إلى أنّ القاعدة تُطبَّق على جميع المستضيفات Hosts. - الحقل الثّالث يُعيّن المستخدمين الّذين يُمكن للمستخدم المحدّد في الحقل الأوّل من السّطر (
root
في هذه الحالة) تنفيذُ أوامر بامتيّازاتهم. قيمةALL
تعني “كلّ المستخدمين”. - الحقل الرّابع يُعيّن مجموعات المستخدمين Groups الّتي يُمكن للمستخدم المحدّد في الحقل الأوّل من السّطر (
root
في هذه الحالة) تنفيذُ أوامر بامتيّازاتهم. قيمةALL
هنا تعني “كلّ المجموعات”. - الحقل الأخير يُشير إلى الأوامر الّتي ينال المستخدم المحدّد في الحقل الأوّل من السّطر امتيّاز تنفيذها بامتيّازات إداريّة. قيمة
ALL
هنا تعني “جميع الأوامر”.
يُمكن تفسير السّطر على النّحو التّالي: لدى المستخدم root
امتيّاز تنفيذ sudo
على أي أمر بشرط تقديمه لكلمته للسّر.
3- أسطر امتيّازات مجموعات المستخدمين
يُشبه السّطران الأخيران سطرَ امتيّازات المستخدِم، لكنّها تحدّد امتيّازات مجموعة من المستخدمين. تُشير الكلمات الّتي تسبقها علامة %
إلى أسماء مجموعات مستخدمين. نلاحِظ أن مجموعة المستخدمين admin
يُمكنها تنفيذ أيّ أمر بامتيّازات أي مستخدم على جميع المستضيفات؛ أمّا مجموعة admin
فلديها، زيّادةً على امتيّازات مجموعة admin
، إمكانيّة تنفيذ أوامر بامتيّازات أي مجموعة مستخدمين.
كيف تضبُط قواعد مخصَّصة
نتناول، بعد التّعرف على الصّيغة العامة لقواعد ملفّ sudoers
، في هذه الفقرة طريقة إنشاء قواعد جديدة.
1- كيف تُنشئ كِنى Aliases
يُمكن تنظيم ملفّ sudoers
عن طريق تجميع بعض التّعليمات بواسطة كِنى مختلفة. يُنشئ المثال التّالي ثلاث مجموعات مستخدمين (تعليمة User_Alias
)، بعضويّات متداخلة:
User_Alias GROUPONE = abby, brent, carl User_Alias GROUPTWO = brent, doris, eric, User_Alias GROUPTHREE = doris, felicia, grant
يجب أن يبدأ اسم المجموعة بحرف كبير Capital letter.
يُمكننا الآن إنشاء قاعدة في ملفّ sudoers
تسمح لأعضاء المجموعة GROUPTWO
تحديث قاعدة بيانات apt-get
:
GROUPTWO ALL = /usr/bin/apt-get update
إن لم نُحدّد مستخدمًا أو مجموعة مستخدمين يُنفّذ بامتيّازاتها الأمر، فإن sudo
تأخذ المستخدم الجذر root
لتنفيذ الأوامر باسمه.
في المثال أدناه نمنح أعضاء GROUPTHREE
صلاحيّة إيقاف وإعادة تشغيل الجهاز؛ عبر إنشاء “كنية أوامر” Command alias (تعليمة Cmnd_Alias
) واستخدامها في قاعدة للمجموعة GROUPTHREE
:
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart GROUPTHREE ALL = POWER
أنشأنا في السّطر الأوّل كنية باسم POWER
تحوي أوامر لإيقاف وإعادة تشغيل الجهاز. ثمّ نعطي لأعضاء المجموعة GROUPTHREE
امتيّاز تنفيذ هذه الأوامر.
توجد أيضًا إمكانيّة إنشاء كنية بأسماء مستخدمين لتنفيذ الأوامر بامتيّازاتهم (Runas_Alias
)، ثمّ إبدال جزء القاعدة الّذي يحدّد المستخدم الّذي لديه صلاحيّة تنفيذ الأمر بكنية أسماء المستخدمين.
Runas_Alias WEB = www-data, apache GROUPONE ALL = (WEB) ALL
في المثال السّابق، أنشأنا كنية WEB
لتنفيذ أوامر بامتيّازات www-data
أو apache
؛ ثمّ قاعدة تسمح لكلّ عضو في GROUPONE
بتنفيذ أوامر بامتيّازات العضوَيْن المذكورَيْن.
يجب الانتباه إلى أنّه في حال وجود تناقض بين قاعدتَيْن في ملفّ sudoers
فإنّ القاعدة الأخيرة هيّ الّتي ستُطبَّق.
2- كيف تؤمِّن القواعد
توجد طرُق عدّة لتمكين تحكّم أكبر حول كيفيّة تفاعل sudo
مع المستخدم.
إذا أردنا مثلًا السّماح للمستخدمين بتنفيذ أمر updatedb
، وهو أمر آمِن نسبيًّا، بامتيّازات المستخدم الجذر دون الحاجة لإدخال كلمة سرّ root
فالقاعدة التّاليّة تؤدّي هذه المهمّة:
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
يظهر في القاعدة أعلاه وسم tag هو NOPASSWD
والّذي يعني أنّه لن يُطلَب من المستخدم إدخال كلمة سرّ root
. يوجد وسم آخر مصاحِب هو PASSWD
(سلوك افتراضيّ) والّذي يطلُب إدخال كلمة السّر. ينطبق الوسم على بقيّة القاعدة ما لم يُذكر توءَمُه بعده. يُمكِن أن نجد قاعدةً على الشّكل التّالي مثلًا:
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
يوجد وسم آخر مهمّ هو NOEXEC
والّذي يُستخدم لمنع السّلوك غير الآمن لبعض البرامج. على سبيل المثال؛ تسمح بعض البرامج، مثل less
، بتنفيذ أوامر أخرى داخل واجهتها:
less file
حيثُ file
اسم ملفّ يُنفَّذ عليه أمر less
. الآن يُمكن تنفيذ أمر بنفس الصّلاحيّات الّتي نفّذنا بها less
على النّحو التّالي (حيثُ command_to_run
اسم أمر):
!command_to_run
لمنع هذا الأمر من الحصول، يُمكن كتابة قاعدة كالتّالية:
username ALL = NOEXEC: /usr/bin/less
معلومات متفرّقة
نعرض في هذه الفقرة لمعلومات إضافيّة مفيدة عند التّعامل مع أمر sudo
.
إذا حدّدت مستخدمين، أو مجموعة مستخدمين، لتنفيذ أوامر بامتيّازاتهم عبر تعليمة Runas_Alias
في ملفّ الإعداد؛ فيُمكنك تنفيذ أوامر بامتيّازات هؤلاء المستخدمين عن طريق خيّار u-
أو g-
على التّوالي:
sudo -u run_as_user command sudo -g run_as_group command
حيثُ run_as_user
وrun_as_group
اسم المستخدم أو مجموعة المستخدمين على التّوالي، و command
الأمر المُراد تنفيذه.
يحفظ أمر sudo
بعد استخدامه تفاصيلَ الاستيثاق Authentication (كلمة السّرّ) في الطّرفيّة الّتي نُفِّذ فيها لفترة من الوقت. يعني هذا أنّك لن تحتاج لإعادة كتابة كلمة السّرّ في كلّ مرّة تستخدم فيها sudo
، ما لم تنقضِ فترة الحفظ. إن أردت تصفير المؤقّت، لأغراض أمنيّة مثلًا، نفّذ الأمر التّالي:
sudo -k
إذا رغبت في معرفة الامتيّازات المُعيَّنة للحساب الّذي تستخدمه فخيّار l-
يعطيك هذه المعلومة:
sudo -l
سيعرض الأمر قائمة بالقواعد الّتي تعني حساب المستخدم ضمن ملفّ etc/sudoers/
، وهو ما يُعطي فكرة جيّدة عن المسموح وغير المسموح به لمستخدم عند تنفيذ sudo
.
يحدُث أن تنسى كتابة sudo
أمام أمر تريد تنفيذه بامتيّازات إداريّة، ممّا يؤدّي إلى فشل الأمر. يوجد الاختصار التّالي لتفادي كتابة الأمر مجدّدًا:
sudo !!
علامة التّعجّب مرّتين تعني “أعد تنفيذ الأمر الأخير”، وبما أنّها مسبوقة ب sudo
فالأمر يُصبح “أعد تنفيذ الأمر الأخير بامتيّازات إداريّة”.
إذا كنت تتمتّع بحسّ الفكاهة فيُمكنك إضافة تعليمة Defaults insults
إلى ملفّ sudoers
؛ عمل هذه التّعليمة يتلخّص في كتابة تقريع (بالإنجليزيّة) عندما يُخطئ المستخدم في كلمة السرّ عند تنفيذ أوامر بsudo
:
sudo visudo
أضف التّعليمة التّاليّة بعد تعليمات Defaults
الأخرى:
Defaults insults
لتجربة الإعداد الأخير، نمسح كلمة السّرّ المحفوظة حتّى نتأكّد من أنّ sudo
سيطلُب إدخال كلمة السّرّ:
sudo -k
ثمّ ننفّذ الأمر التّالي، ونكتب كلمة سرّ خاطئة في المرّة الأولى:
sudo ls
مثال على النّتيجة:
[sudo] password for demo: # أدخِل كلمة سرّ خاطئة Your mind just hasn't been the same since the electro-shock, has it? [sudo] password for demo: My mind is going. I can feel it.
خاتمة
يجب أن يكون لديك بعد إكمال هذا الدّرس فهمٌ جيّد لأساسيّات التّعامل مع ملفّ sudoers
وطريقة قراءة وتعديل هذا الملفّ؛ إضافةً إلى معرفة طُرُق الحصول على امتيّازات إداريّة. تذكّر أنّه يوجد سبب لعدم منح امتيّازات المستخدم الأعلى للمستخدمين العاديّين؛ لذا من المهمّ جدًّا فهم آليّة عمل أيّ أمر قبل تنفيذه بامتيّازات root
. لا تستهِر في التّعامل مع الصّلاحيّات الإداريّة، وتعلّم أفضل الطّرق لاستخدام هذه الأدوات لتلبيّة حاجاتك. احظُر أي ميزة لا ترى حاجة لاستخدامها.
ترجمة بتصرّف لمقال How To Edit the Sudoers File on Ubuntu and CentOS لصاحبه Justin Ellingwood.
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.