في نظام Linux وغيره من أنظمة التشغيل المشابهة ليونكس، يمكن لمستخدم الجذر فقط تشغيل جميع الأوامر وأداء بعض العمليات الحرجة على النظام مثل تثبيت وتحديث وإزالة الحزم، إنشاء المستخدمين والمجموعات، تعديل ملفات تكوين النظام المهمة وما إلى ذلك.
ومع ذلك، يمكن لمسؤول النظام الذي يتولى دور مستخدم الجذر السماح لمستخدمي النظام العاديين الآخرين بتشغيل بعض الأوامر بمساعدة أمر sudo وبعض التكوينات لأداء عدد من العمليات النظامية الحيوية بما في ذلك تلك المذكورة أعلاه.
بديلاً، يمكن لمسؤول النظام مشاركة كلمة مرور مستخدم الجذر (وهو الأمر الذي لا يُنصح به) بحيث يتمكن مستخدمو النظام العاديون من الوصول إلى حساب مستخدم الجذر عبر أمر su.
sudo يسمح للمستخدم المسموح له بتنفيذ أمر كمستخدم جذر (أو مستخدم آخر)، كما هو محدد بسياسة الأمان:
- يقرأ ويحلل /etc/sudoers، يبحث عن المستخدم الذي يطلب وأذوناته،
- ثم يطلب من المستخدم الذي يطلب تقديم كلمة مرور (عادة كلمة مرور المستخدم، ولكن يمكن أيضًا أن تكون كلمة مرور المستخدم المستهدف. أو يمكن تخطيها باستخدام علامة NOPASSWD)،
- بعد ذلك، يقوم sudo بإنشاء عملية فرعية يقوم فيها بالاتصال بـ setuid() للتبديل إلى المستخدم المستهدف
- بعد ذلك، يقوم بتنفيذ واجهة سطر أو الأمر المعطى كمدخلات في العملية الفرعية أعلاه.
أدناه عشرة تكوينات ملف /etc/sudoers لتعديل سلوك أمر sudo باستخدام إدخالات Defaults.
$ sudo cat /etc/sudoers
# # This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" Defaults logfile="/var/log/sudo.log" Defaults lecture="always" Defaults badpass_message="Password is wrong, please try again" Defaults passwd_tries=5 Defaults insults Defaults log_input,log_output
أنواع إدخالات الافتراضيات
Defaults parameter, parameter_list #affect all users on any host Defaults@Host_List parameter, parameter_list #affects all users on a specific host Defaults:User_List parameter, parameter_list #affects a specific user Defaults!Cmnd_List parameter, parameter_list #affects a specific command Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
لنطل على النوع الأول من الافتراضيات في الأشكال أدناه. قد تكون المعلمات علمات، قيم صحيحة، سلاسل، أو قوائم.
يجب عليك ملاحظة أن العلمات هي بوولية ضمناً ويمكن إيقافها باستخدام عامل '!'
، والقوائم لديها عاملين إضافيين للتعيين، +=
(إضافة إلى القائمة) و -=
(إزالة من القائمة).
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. تعيين مسار آمن
هذا هو المسار المستخدم لكل أمر يتم تشغيله بـ sudo، له أهميتان:
- يُستخدم عندما لا يثق مسؤول النظام بمستخدمي sudo بوجود متغير بيئة مسار آمن
- لفصل “مسار الجذر” و “مسار المستخدم”، فقط المستخدمون المحددين بواسطة exempt_group لا يتأثرون بهذا الإعداد.
لتعيينه، أضف السطر:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. تمكين sudo على جلسة تسجيل دخول المستخدم TTY
لتمكين sudo من أن يُستدعى من tty حقيقي وليس من خلال طرق مثل النصوص cron أو cgi-bin، أضف السطر:
Defaults requiretty
3. تشغيل أمر Sudo باستخدام pty
A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.
لتجنب مثل هذا السيناريو، يمكنك تكوين sudo لتشغيل أوامر أخرى فقط من خلال pty مزيف باستخدام المعلمة use_pty
، سواء تم تشغيل تسجيل الإدخال/الإخراج أم لا على النحو التالي:
Defaults use_pty
4. إنشاء ملف تسجيل Sudo
بشكل افتراضي، يسجّل سودو عبر syslog(3). ومع ذلك، لتحديد ملف تسجيل مخصص، استخدم معامل الملف السجل كما يلي:
Defaults logfile="/var/log/sudo.log"
لتسجيل اسم المضيف والسنة المكوّنة من أربعة أرقام في ملف السجل المخصص، استخدم المعاملات log_host و log_year على التوالي كما يلي:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
فيما يلي مثال على ملف سجل سودو مخصص:

تسجيل إدخال/إخراج أمر سودو:
المعاملات log_input و log_output تمكّن سودو من تشغيل أمر في شبكة زائفة وتسجيل جميع إدخالات المستخدم وجميع الإخراجات المُرسلة إلى الشاشة على التوالي.
المسار الافتراضي لسجلات الإدخال/الإخراج هو /var/log/sudo-io، وإذا كان هناك رقم تسلسل للجلسة، يتم تخزينه في هذا الدليل. يمكنك تحديد دليل مخصص من خلال المعامل iolog_dir.
Defaults log_input, log_output
يتم دعم بعض تسلسلات الهروب مثل %{seq}
التي توسّع إلى رقم تسلسلي قاعدي 36 متزايد، مثل 000001، حيث يتم استخدام كل رقمين لتشكيل دليل جديد، مثل 00/00/01 كما في المثال أدناه:
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

يمكنك عرض باقي الملفات في ذلك الدليل باستخدام أمر cat.
تدريس مستخدمي سودو:
لتدريس مستخدمي سودو حول استخدام كلمة المرور على النظام، استخدم المعامل lecture كما يلي.
له ثلاث قيم ممكنة:
- دائمًا – تدريس المستخدم دائمًا.
- مرة واحدة – فقط قم بإلقاء محاضرة على المستخدم في المرة الأولى التي يقوم فيها بتنفيذ أمر sudo (يتم استخدام هذا عندما لا يتم تحديد قيمة)
- أبدًا – لا تقم بإلقاء محاضرة على المستخدم.
Defaults lecture="always"
بالإضافة إلى ذلك، يمكنك تعيين ملف محاضرة مخصص باستخدام معلمة lecture_file، اكتب الرسالة المناسبة في الملف:
Defaults lecture_file="/path/to/file"

7. عرض رسالة مخصصة عند إدخال كلمة مرور sudo خاطئة
عندما يدخل المستخدم كلمة مرور خاطئة، يتم عرض رسالة معينة على سطر الأوامر. الرسالة الافتراضية هي “عذرًا، حاول مرة أخرى”، يمكنك تعديل الرسالة باستخدام معلمة badpass_message على النحو التالي:
Defaults badpass_message="Password is wrong, please try again"
8. زيادة حد محاولات كلمة مرور sudo
تستخدم المعلمة passwd_tries لتحديد عدد مرات يمكن للمستخدم محاولة إدخال كلمة مرور.
القيمة الافتراضية هي 3:
Defaults passwd_tries=5

لتعيين مهلة لكلمة المرور (القيمة الافتراضية هي 5 دقائق) باستخدام معلمة passwd_timeout، أضف السطر أدناه:
Defaults passwd_timeout=2
9. دع sudo يهينك عند إدخال كلمة مرور خاطئة
في حال قام المستخدم بإدخال كلمة مرور خاطئة، سيقوم sudo بعرض إهانات على الطرفية باستخدام معلمة الإهانات. سيتم إيقاف تلقائيًا معلمة badpass_message.
Defaults insults

اقرأ المزيد: دع sudo يهينك عند إدخال كلمة مرور غير صحيحة
10. تعرف على المزيد حول تكوينات sudo
يمكنك التعرف على المزيد من تكوينات أمر sudo عبر قراءة: الفارق بين su و sudo وكيفية تكوين sudo في Linux.
هذا كل شيء! يمكنك مشاركة تكوينات أمر sudo الأخرى أو الحيل والنصائح مع مستخدمي Linux الآخرين عبر قسم التعليقات أدناه.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/