10 تكوينات مفيدة لملفات Sudoers لضبط ‘sudo’ في Linux

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

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

بديلاً، يمكن لمسؤول النظام مشاركة كلمة مرور مستخدم الجذر (وهو الأمر الذي لا يُنصح به) بحيث يتمكن مستخدمو النظام العاديون من الوصول إلى حساب مستخدم الجذر عبر أمر su.

sudo يسمح للمستخدم المسموح له بتنفيذ أمر كمستخدم جذر (أو مستخدم آخر)، كما هو محدد بسياسة الأمان:

  1. يقرأ ويحلل /etc/sudoers، يبحث عن المستخدم الذي يطلب وأذوناته،
  2. ثم يطلب من المستخدم الذي يطلب تقديم كلمة مرور (عادة كلمة مرور المستخدم، ولكن يمكن أيضًا أن تكون كلمة مرور المستخدم المستهدف. أو يمكن تخطيها باستخدام علامة NOPASSWD)،
  3. بعد ذلك، يقوم sudo بإنشاء عملية فرعية يقوم فيها بالاتصال بـ setuid() للتبديل إلى المستخدم المستهدف
  4. بعد ذلك، يقوم بتنفيذ واجهة سطر أو الأمر المعطى كمدخلات في العملية الفرعية أعلاه.

أدناه عشرة تكوينات ملف /etc/sudoers لتعديل سلوك أمر sudo باستخدام إدخالات Defaults.

$ sudo cat /etc/sudoers
/etc/sudoers File
#
# 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، له أهميتان:

  1. يُستخدم عندما لا يثق مسؤول النظام بمستخدمي sudo بوجود متغير بيئة مسار آمن
  2. لفصل “مسار الجذر” و “مسار المستخدم”، فقط المستخدمون المحددين بواسطة 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"

فيما يلي مثال على ملف سجل سودو مخصص:

Create Custom Sudo Log File

تسجيل إدخال/إخراج أمر سودو:

المعاملات 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
Log sudo Input Output

يمكنك عرض باقي الملفات في ذلك الدليل باستخدام أمر cat.

تدريس مستخدمي سودو:

لتدريس مستخدمي سودو حول استخدام كلمة المرور على النظام، استخدم المعامل lecture كما يلي.

له ثلاث قيم ممكنة:

  1. دائمًا – تدريس المستخدم دائمًا.
  2. مرة واحدة – فقط قم بإلقاء محاضرة على المستخدم في المرة الأولى التي يقوم فيها بتنفيذ أمر sudo (يتم استخدام هذا عندما لا يتم تحديد قيمة)
  3. أبدًا – لا تقم بإلقاء محاضرة على المستخدم.
 
Defaults  lecture="always"

بالإضافة إلى ذلك، يمكنك تعيين ملف محاضرة مخصص باستخدام معلمة lecture_file، اكتب الرسالة المناسبة في الملف:

Defaults  lecture_file="/path/to/file"
Lecture Sudo Users

7. عرض رسالة مخصصة عند إدخال كلمة مرور sudo خاطئة

عندما يدخل المستخدم كلمة مرور خاطئة، يتم عرض رسالة معينة على سطر الأوامر. الرسالة الافتراضية هي “عذرًا، حاول مرة أخرى”، يمكنك تعديل الرسالة باستخدام معلمة badpass_message على النحو التالي:

Defaults  badpass_message="Password is wrong, please try again"

8. زيادة حد محاولات كلمة مرور sudo

تستخدم المعلمة passwd_tries لتحديد عدد مرات يمكن للمستخدم محاولة إدخال كلمة مرور.

القيمة الافتراضية هي 3:

Defaults   passwd_tries=5 
Increase Sudo Password Attempts

لتعيين مهلة لكلمة المرور (القيمة الافتراضية هي 5 دقائق) باستخدام معلمة passwd_timeout، أضف السطر أدناه:

Defaults   passwd_timeout=2

9. دع sudo يهينك عند إدخال كلمة مرور خاطئة

في حال قام المستخدم بإدخال كلمة مرور خاطئة، سيقوم sudo بعرض إهانات على الطرفية باستخدام معلمة الإهانات. سيتم إيقاف تلقائيًا معلمة badpass_message.

Defaults  insults 
Let’s Sudo Insult You When Enter Wrong Password

اقرأ المزيد: دع sudo يهينك عند إدخال كلمة مرور غير صحيحة

10. تعرف على المزيد حول تكوينات sudo

يمكنك التعرف على المزيد من تكوينات أمر sudo عبر قراءة: الفارق بين su و sudo وكيفية تكوين sudo في Linux.

هذا كل شيء! يمكنك مشاركة تكوينات أمر sudo الأخرى أو الحيل والنصائح مع مستخدمي Linux الآخرين عبر قسم التعليقات أدناه.

Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/