كيفية تحرير ملف Sudoers

مقدمة

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

A special user, called root, has super-user privileges. This is an administrative account without the restrictions that are present on normal users. Users can execute commands with super-user or root privileges in a number of different ways.

في هذا المقال، سنتحدث عن طريقة حصول بشكل صحيح وآمن على أذونات root، بتركيز خاص على تحرير ملف /etc/sudoers.

سنقوم بإتمام هذه الخطوات على خادم Ubuntu 20.04، ولكن أغلب التشغيلات الحديثة مثل Debian و CentOS يعمل بنفس الطريقة.

تestr assume أنك قمت بإكمال إعداد الخادم الأولي الذي تم تداوله هنا. انضم إلى خادمك بمستخدم عادي غير root واستمر أدناه.ملاحظة: يتحدث هذا الدليل بعمق عن تصعيد الأذونات وملف sudoers. إذا كنتem ترغبem فقط في إضافة أذونات sudo إلى مستخدم، فانظر إلى دلائلنا التوضيحية السريعة كيفية إنشاء مستخدم جديد مملوك ل-sudo ل-Ubuntu و-CentOS.

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

كيفية إكتساب أذونات المسؤول

هناك ثلاث طرق أساسية للحصول على أذونات المسؤول، وهذا يختلف باختلاف مستوى تعقيدها.

الدخول كمسؤول

أبسط وأكثر الطرق سهولة للحصول على أذونات المسؤول هو الدخول مباشرة إلى خادمك كمستخدم المسؤول.

إذا كنت تدخل إلى جهاز محلي (أو باستخدام ميزة وحدة التحكم خارج النطاق على خادم تخزين مرن)، أدخل المسؤول كاسم المستخدم عند موجه الدخول وأدخل كلمة المرور المسؤول عند الطلب.

إذا كنت تقوم بتسجيل الدخول عبر SSH، فأشارك إلى المستخدم root قبل عنوان IP أو اسم المجال في سلسلة اتصال SSH الخاصة بك:

  1. ssh root@server_domain_or_ip

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

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

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

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

يمكننا القيام بذلك عن طريق استدعاء الأمر su، الذي يعني “مستخدم بديل”. للحصول على أذونات root، اكتب:

  1. su

سيُطلب منك كلمة المرور للمستخدم root، وبعد ذلك، ستُسقط في جلسة طابعة root.

عندما تنتهي من المهام التي تتطلب أذونات root، عد إلى طابعة الغرض العادية عن طريق كتابة التالي:

  1. exit

استخدام sudo لتنفيذ الأوامر كـ root

الطريقة النهائية للحصول على أذونات الجذر التي سنناقشها هي باستخدام الأمر sudo.

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

  1. sudo command_to_execute

على عكس su، سيطلب الأمر sudo كلمة مرور المستخدم الحالي وليس كلمة مرور الجذر.

بسبب مخاطرها الأمنية، لا يتم منح حق الوصول إلى sudo للمستخدمين افتراضيًا، ويجب إعداده قبل أن يعمل بشكل صحيح. تحقق من كيفية إنشاء مستخدم جديد بأذونات sudo البرنامج التعليمي السريع لـ Ubuntu و CentOS لتعرف كيفية إعداد مستخدم مفعل بـ sudo.

في القسم التالي، سنناقش كيفية تعديل تكوين sudo بتفصيل أكبر.

ما هو Visudo؟

يتم تكوين الأمر sudo من خلال ملف يقع في /etc/sudoers.

تحذير: لا تقم أبدًا بتحرير هذا الملف باستخدام محرر نص عادي! استخدم دائمًا الأمر visudo بدلاً من ذلك!

لأن التركيب الخاطئ للبرمجية /etc/sudoers يمكن أن يتركك مع نظام مكسور حيث يكون من المستحيل الحصول على أمنيات مرتفعة ، من المهم استخدام الأمر visudo لتعديل الملف.

يفتح الأمر visudo محرر النص مثل العادية ، لكنه يتحقق من تركيب البرمجية عند حفظها. هذا يمنع الأخطاء في التكوين من حظر عمليات sudo ، التي قد تكون طريقتك الوحيدة للحصول على الأمان الجذري.

تقليديًا ، يفتح visudo ملف /etc/sudoers باستخدام محرر النص vi. على أي حال ، قام Ubuntu بتكوين visudo لاستخدام محرر النص nano بدلاً من ذلك.

إذا كنت ترغب في تغييره مرة أخرى إلى vi ، فقم بإرسال الأمر التالي:

  1. sudo update-alternatives --config editor
Output
There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 10 manual mode Press <enter> to keep the current choice[*], or type selection number:

حدد الرقم الذي يتوافق مع الخيار الذي ترغب في اتخاذه.

على CentOS ، يمكنك تغيير هذه القيمة من خلال إضافة السطر التالي إلى ~/.bashrc:

  1. export EDITOR=`which name_of_editor`

استدعاء الملف لتنفيذ التغييرات:

  1. . ~/.bashrc

بعد تكوين visudo ، قم بتنفيذ الأمر للوصول إلى ملف /etc/sudoers:

  1. sudo visudo

كيفية تعديل ملف Sudoers

سيتم تقديم ملف /etc/sudoers في محرر النص المختار.

I have copied and pasted the file from Ubuntu 20.04, with comments removed. The CentOS /etc/sudoers file has many more lines, some of which we will not discuss in this guide.

/etc/sudoers
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root    ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

دعونا نلقي نظرة على إذا ماذا تفعل هذه الخطوط.

خطوط افتراضية

الخط الأول، Defaults env_reset، يعيد تعيين بيئة المحطة العرضية لإزالة أي متغيرات مستخدم. هذا تدبير أمان يستخدم لإزالة المتغيرات البيئية المحتملة الضارة من جلسة sudo.

الخط الثاني، Defaults mail_badpass، يطلب من النظام إرسال إشعارات عن محاولات كلمة مرور sudo سيئة إلى المستخدم mailto المعروفة. افتراضيا، هذا هو حساب الجذر.

الخط الثالث، الذي يبدأ بـ Defaults secure_path=...، يحدد PATH (الأماكن في الملف سيستخدم النظام للبحث عن التطبيقات) التي ستستخدم لعمليات sudo. هذا يمنع استخدام مسارات المستخدم التي قد تكون ضارة.

خطوط امتياز المستخدم

الخط الرابع، الذي يحدد امتيازات sudo المستخدم الجذر، يختلف عن الخطوط السابقة. دعونا نلقي نظرة على معنى الحقول المختلفة:

  • الجذر ALL=(ALL:ALL) ALL
    الحقل الأول يشير إلى اسم المستخدم الذي ستنطبق عليه القاعدة (الجذر).

  • root ALL=(ALL:ALL) ALL
    أول “كل” يشير إلى أن هذه القاعدة تنطبق على جميع المضيفين.

  • root ALL=(ALL:ALL) ALL
    هذا “كل” يشير إلى أن مستخدم root يمكنه تشغيل الأوامر لجميع المستخدمين.

  • root ALL=(ALL:ALL) ALL
    هذا “كل” يشير إلى أن مستخدم root يمكنه تشغيل الأوامر لجميع المجموعات.

  • root ALL=(ALL:ALL) ALL
    آخر “كل” يشير إلى أن هذه القواعد تنطبق على جميع الأوامر.

هذا يعني أن مستخدمنا root يمكنه تشغيل أي أمر باستخدام sudo، طالما قاموا بتزويد كلمة المرور الخاصة بهم.

خطوط سماحية المجموعة

السطور التاليتني مشابهة لسطور سماحية المستخدم، لكنها تحدد قواعد sudo للمجموعات.

الأسماء التي تبدأ برمز % تشير إلى أسماء المجموعات.

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

خط تضمين /etc/sudoers.d

قد يبدو السطر الأخير مثل تعليق للوهلة الأولى:

/etc/sudoers
. . .

#includedir /etc/sudoers.d

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

الملفات داخل هذا الدليل يتبع نفس القواعد كما في ملف /etc/sudoers نفسه. أي ملف لا ينتهي به ~ ولا يحتوي على . فيه سيتم قراءته وإلحاقه بتكوين sudo.

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

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

  1. sudo visudo -f /etc/sudoers.d/file_to_edit

كيفية تعيين أذونات sudo للمستخدم

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

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

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

  1. sudo usermod -aG sudo username

يمكن استخدام الأمر gpasswd أيضًا:

  1. sudo gpasswd -a username sudo

كلاهما يحقق نفس الغرض.

على CentOS، هذا عادة مجموعة wheel بدلاً من مجموعة sudo:

  1. sudo usermod -aG wheel username

أو، باستخدام gpasswd:

  1. sudo gpasswd -a username wheel

على CentOS، إذا لم ينجح إضافة المستخدم إلى المجموعة على الفور، قد تضطر إلى تعديل ملف /etc/sudoers لفك تعليق اسم المجموعة:

  1. sudo visudo
/etc/sudoers
. . .
%wheel ALL=(ALL) ALL
. . .

كيفية إعداد قواعد مخصصة

الآن بعد أن أصبحنا على دراية ببناء الجملة العام للملف، لنقم بإنشاء بعض القواعد الجديدة.

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

يمكن تنظيم ملف sudoers بشكل أسهل من خلال تجميع الأشياء باستخدام أنواع مختلفة من “أسماء مستعارة”.

على سبيل المثال، يمكننا إنشاء ثلاث مجموعات مختلفة من المستخدمين، بتداخل في العضوية:

/etc/sudoers
. . .
User_Alias		GROUPONE = abby, brent, carl
User_Alias		GROUPTWO = brent, doris, eric,
User_Alias		GROUPTHREE = doris, felicia, grant
. . .

يجب أن يبدأ اسم المجموعة بحرف كبير. بعد ذلك يمكننا السماح لأعضاء GROUPTWO بتحديث قاعدة بيانات apt عن طريق إنشاء قاعدة مثل هذه:

/etc/sudoers
. . .
GROUPTWO	ALL = /usr/bin/apt-get update
. . .

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

يمكننا السماح لأعضاء GROUPTHREE بإيقاف تشغيل وإعادة تشغيل الجهاز عن طريق إنشاء “إسم مستعار للأوامر” واستخدام ذلك في قاعدة لـ GROUPTHREE:

/etc/sudoers
. . .
Cmnd_Alias		POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE	ALL = POWER
. . .

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

يمكننا أيضًا إنشاء اسم مستعار “Run as”، الذي يمكن أن يحل محل جزء من القاعدة التي تحدد المستخدم لتنفيذ الأمر كما يلي:

/etc/sudoers
. . .
Runas_Alias		WEB = www-data, apache
GROUPONE	ALL = (WEB) ALL
. . .

وهذا يسمح لأي شخص ينتمي إلى GROUPONE بتنفيذ الأوامر كمستخدم www-data أو مستخدم apache.

فقط ضع في اعتبارك أن القواعد اللاحقة ستلغي القواعد السابقة عند وجود تعارض بين الاثنين.

كيفية تأمين قواعد

هناك عدة طرق يمكنك من خلالها الحصول على المزيد من السيطرة على كيفية رد فعل sudo على مكالمة.

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

/etc/sudoers
. . .
GROUPONE	ALL = NOPASSWD: /usr/bin/updatedb
. . .

NOPASSWD هو “العلامة” التي تعني أنه لن يتم طلب كلمة مرور. لديها أمر مرافق يسمى PASSWD، وهو السلوك الافتراضي. العلامة مهمة لبقية القاعدة ما لم يتم إلغاؤها بواسطة “العلامة التوأم” لها فيما بعد.

على سبيل المثال، يمكننا وجود سطر مثل هذا:

/etc/sudoers
. . .
GROUPTWO	ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .

يوجد علامة أخرى مفيدة تسمى NOEXEC، والتي يمكن استخدامها لمنع بعض السلوكيات الخطرة في برامج معينة.

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

!command_to_run

هذا يقوم أساسًا بتنفيذ أي أمر يعطيه المستخدم بنفس الأذونات التي يعمل بها less، وهو أمر خطير للغاية.

للحد من هذا، يمكننا استخدام سطر مثل هذا:

/etc/sudoers
. . .
username	ALL = NOEXEC: /usr/bin/less
. . .

معلومات ثانوية

هناك بضع معلومات أخرى قد تكون مفيدة عند التعامل مع sudo.

إذا كنت قد حددت مستخدمًا أو مجموعة للتوجيه كـ “run as” في ملف التكوين، يمكنك تنفيذ الأوامر كمستخدمين أو مجموعات باستخدام العلامات -u و -g على التوالي:

  1. sudo -u run_as_user command
  2. sudo -g run_as_group command

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

لأغراض الأمان، إذا كنت ترغب في مسح هذا المؤقت عندما تنتهي من تشغيل الأوامر الإدارية، يمكنك التشغيل:

  1. sudo -k

من ناحية أخرى، إذا كنت ترغب في “تعديل” أمر sudo بحيث لن يتم مطالبتك لاحقًا، أو لتجديد إيجار sudo الخاص بك، يمكنك دائمًا كتابة:

  1. sudo -v

سيُطلب منك كلمة المرور التي سيتم تخزينها لاستخدامات sudo لاحقة حتى ينتهي الوقت المحدد لـ sudo.

إذا كنت مجرد متسائلًا عن أي نوع من الأذونات محددة لاسم المستخدم الخاص بك، فيمكنك كتابة:

  1. sudo -l

هذا سيُظهر كل القواعد في ملف /etc/sudoers التي تنطبق على مستخدمك. هذا يعطيك فكرة جيدة عن ما ستكون أو لن تكون مسموحًا لك بفعله باستخدام sudo كأي مستخدم.

هناك عدة أوقات ستُنفذ فيها أمرًا وسيفشل لأنك نسيت أن تُلحقه بـ sudo. لتجنب الحاجة إلى إعادة كتابة الأمر، يمكنك الاستفادة من وظيفة bash تعني “كرر الأمر الأخير”:

  1. sudo !!

علامة التعجب المزدوجة ستكرر الأمر الأخير. لقد سبقناها بـ sudo لتغيير الأمر غير المكتسب بسرور إلى أمر مكتسب.

لبعض المرح، يمكنك إضافة السطر التالي إلى ملف /etc/sudoers الخاص بك باستخدام visudo:

  1. sudo visudo
/etc/sudoers
. . .
Defaults	insults
. . .

هذا سيجعل sudo يعيد إرسال نكتة سخيفة عندما يدخل المستخدم كلمة مرور غير صحيحة لـ sudo. يمكننا استخدام sudo -k لمسح كلمة مرور sudo المخزنة السابقة لتجربتها:

  1. sudo -k
  2. sudo ls
Output
[sudo] password for demo: # enter an incorrect password here to see the results 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. لا تتعامل مع المسؤولية بطريقة طفولية. تعلم الطريقة الأفضل لاستخدام هذه الأدوات لحالتك، واقفل أي وظيفة غير ضرورية.

Source:
https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file