مقدمة
يعتبر تفريق الأهداف المتمثل في تطبيق برامج الأمن في 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
. إذا كنت ترغب فقط في إضافة الأمان sudo
إلى مستخدم، فتحقق من برامجنا التعليمية السريعة كيفية إنشاء مستخدم جديد بأمان sudo لـ Ubuntu و CentOS.
كيفية إكتساب أذونات المسؤول
هناك ثلاث طرق أساسية للحصول على أذونات المسؤول، وهذا يختلف باختلاف مستوى تعقيدها.
الدخول كمسؤول
أبسط وأكثر الطرق سهولة للحصول على أذونات المسؤول هو الدخول مباشرة إلى خادمك كمستخدم المسؤول.
إذا كنت تدخل إلى جهاز محلي (أو باستخدام ميزة وحدة التحكم خارج النطاق على خادم تخزين مرن)، أدخل المسؤول
كاسم المستخدم عند موجه الدخول وأدخل كلمة المرور المسؤول عند الطلب.
إذا كنت تقوم بتسجيل الدخول عبر SSH، فأشارك إلى المستخدم root قبل عنوان IP أو اسم المجال في سلسلة اتصال SSH الخاصة بك:
إذا لم تقم بإعداد أزواج المفتاحين للمستخدم root، فأدخل كلمة المرور root عندما يطلب منك ذلك.
استخدام su
لتصبح root
التسجيل مباشرة كـ root غالبًا ما يُعتبر غير موصى به، لأنه من السهل البدء في استخدام النظام لأدوار غير الإدارية، وهذا أمر خطير.
الطريقة التالية للحصول على أذونات المستخدم المشرف يتيح لك أن تصبح المستخدم root في أي وقت تحتاج إليه.
يمكننا القيام بذلك عن طريق استدعاء الأمر su
، الذي يعني “مستخدم بديل”. للحصول على أذونات root، اكتب:
سيُطلب منك كلمة المرور للمستخدم root، وبعد ذلك، ستُسقط في جلسة طابعة root.
عندما تنتهي من المهام التي تتطلب أذونات root، عد إلى طابعة الغرض العادية عن طريق كتابة التالي:
استخدام sudo
لتنفيذ الأوامر كـ root
الطريقة النهائية للحصول على أذونات الجذر التي سنناقشها هي باستخدام الأمر sudo
.
يسمح لك الأمر sudo
بتنفيذ أوامر منفردة بأذونات الجذر دون الحاجة إلى إنشاء طابعة جديدة. يتم تنفيذه على النحو التالي:
على عكس 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
، فقم بإرسال الأمر التالي:
OutputThere 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
:
استدعاء الملف لتنفيذ التغييرات:
بعد تكوين visudo
، قم بتنفيذ الأمر للوصول إلى ملف /etc/sudoers
:
كيفية تعديل ملف 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.
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
قد يبدو السطر الأخير مثل تعليق للوهلة الأولى:
. . .
#includedir /etc/sudoers.d
يبدأ به رمز #
، الذي عادة ما يشير إلى تعليق. ومع ذلك، فإن هذا السطر يشير في الواقع إلى أن الملفات داخل الدليل /etc/sudoers.d
سيتم استدعاؤها وتطبيقها أيضًا.
الملفات داخل هذا الدليل يتبع نفس القواعد كما في ملف /etc/sudoers
نفسه. أي ملف لا ينتهي به ~
ولا يحتوي على .
فيه سيتم قراءته وإلحاقه بتكوين sudo
.
هذا يهدف بشكل أساسي لتطبيقات تغيير الأذونات sudo
عند التثبيت. وضع جميع القواعد المرتبطة في ملف واحد في الدليل /etc/sudoers.d
يمكن أن يجعل من السهل رؤية الأذونات المرتبطة بحسابات معينة وإلغاء المصادقات بسهولة دون الحاجة إلى محاولة التلاعب بملف /etc/sudoers
مباشرة.
كما هو الحال مع ملف /etc/sudoers
نفسه، يجب عليك دائمًا تحرير الملفات داخل الدليل /etc/sudoers.d
باستخدام visudo
. سيكون بناء الجملة لتحرير هذه الملفات:
كيفية تعيين أذونات sudo للمستخدم
أكثر العمليات التي يرغب فيها المستخدمون عند إدارة أذونات sudo
هو منح مستخدم جديد حق الوصول العام إلى sudo
. يمكن أن يكون هذا مفيدًا إذا كنت ترغب في منح حساب كامل الوصول إلى إدارة النظام.
أسهل طريقة للقيام بذلك على نظام معين تم إعداده لمجموعة إدارة متعارف عليها ، مثل نظام Ubuntu في هذا الدليل، هو إضافة المستخدم المعني إلى تلك المجموعة.
على سبيل المثال، في Ubuntu 20.04، يحتوي مجموعة sudo
على أذونات إدارة تامة. يمكننا منح المستخدم نفس هذه الأذونات عن طريق إضافتهم إلى المجموعة بهذه الطريقة:
يمكن استخدام الأمر gpasswd
أيضًا:
كلاهما يحقق نفس الغرض.
على CentOS، هذا عادة مجموعة wheel
بدلاً من مجموعة sudo
:
أو، باستخدام gpasswd
:
على CentOS، إذا لم ينجح إضافة المستخدم إلى المجموعة على الفور، قد تضطر إلى تعديل ملف /etc/sudoers
لفك تعليق اسم المجموعة:
. . .
%wheel ALL=(ALL) ALL
. . .
كيفية إعداد قواعد مخصصة
الآن بعد أن أصبحنا على دراية ببناء الجملة العام للملف، لنقم بإنشاء بعض القواعد الجديدة.
كيفية إنشاء أسماء مستعارة
يمكن تنظيم ملف sudoers
بشكل أسهل من خلال تجميع الأشياء باستخدام أنواع مختلفة من “أسماء مستعارة”.
على سبيل المثال، يمكننا إنشاء ثلاث مجموعات مختلفة من المستخدمين، بتداخل في العضوية:
. . .
User_Alias GROUPONE = abby, brent, carl
User_Alias GROUPTWO = brent, doris, eric,
User_Alias GROUPTHREE = doris, felicia, grant
. . .
يجب أن يبدأ اسم المجموعة بحرف كبير. بعد ذلك يمكننا السماح لأعضاء GROUPTWO
بتحديث قاعدة بيانات apt
عن طريق إنشاء قاعدة مثل هذه:
. . .
GROUPTWO ALL = /usr/bin/apt-get update
. . .
إذا لم نحدد مستخدمًا/مجموعة لتشغيله، كما هو الحال أعلاه، يتوقف sudo
على المستخدم root.
يمكننا السماح لأعضاء GROUPTHREE
بإيقاف تشغيل وإعادة تشغيل الجهاز عن طريق إنشاء “إسم مستعار للأوامر” واستخدام ذلك في قاعدة لـ GROUPTHREE
:
. . .
Cmnd_Alias POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
GROUPTHREE ALL = POWER
. . .
قمنا بإنشاء اسم مستعار للأمر يسمى POWER
يحتوي على أوامر لإيقاف تشغيل وإعادة تشغيل الجهاز. ثم سمحنا لأعضاء GROUPTHREE
بتنفيذ هذه الأوامر.
يمكننا أيضًا إنشاء اسم مستعار “Run as”، الذي يمكن أن يحل محل جزء من القاعدة التي تحدد المستخدم لتنفيذ الأمر كما يلي:
. . .
Runas_Alias WEB = www-data, apache
GROUPONE ALL = (WEB) ALL
. . .
وهذا يسمح لأي شخص ينتمي إلى GROUPONE
بتنفيذ الأوامر كمستخدم www-data
أو مستخدم apache
.
فقط ضع في اعتبارك أن القواعد اللاحقة ستلغي القواعد السابقة عند وجود تعارض بين الاثنين.
كيفية تأمين قواعد
هناك عدة طرق يمكنك من خلالها الحصول على المزيد من السيطرة على كيفية رد فعل sudo
على مكالمة.
أمر updatedb
المرتبط بحزمة mlocate
غير ضار نسبيًا على نظام للمستخدم الواحد. إذا أردنا السماح للمستخدمين بتنفيذه بأذونات رئيسية بدون الحاجة إلى كتابة كلمة مرور، يمكننا عمل قاعدة مثل هذه:
. . .
GROUPONE ALL = NOPASSWD: /usr/bin/updatedb
. . .
NOPASSWD
هو “العلامة” التي تعني أنه لن يتم طلب كلمة مرور. لديها أمر مرافق يسمى PASSWD
، وهو السلوك الافتراضي. العلامة مهمة لبقية القاعدة ما لم يتم إلغاؤها بواسطة “العلامة التوأم” لها فيما بعد.
على سبيل المثال، يمكننا وجود سطر مثل هذا:
. . .
GROUPTWO ALL = NOPASSWD: /usr/bin/updatedb, PASSWD: /bin/kill
. . .
يوجد علامة أخرى مفيدة تسمى NOEXEC
، والتي يمكن استخدامها لمنع بعض السلوكيات الخطرة في برامج معينة.
على سبيل المثال، بعض البرامج، مثل less
، يمكنها تشغيل أوامر أخرى عن طريق كتابة هذا من داخل واجهتها:
!command_to_run
هذا يقوم أساسًا بتنفيذ أي أمر يعطيه المستخدم بنفس الأذونات التي يعمل بها less
، وهو أمر خطير للغاية.
للحد من هذا، يمكننا استخدام سطر مثل هذا:
. . .
username ALL = NOEXEC: /usr/bin/less
. . .
معلومات ثانوية
هناك بضع معلومات أخرى قد تكون مفيدة عند التعامل مع sudo
.
إذا كنت قد حددت مستخدمًا أو مجموعة للتوجيه كـ “run as” في ملف التكوين، يمكنك تنفيذ الأوامر كمستخدمين أو مجموعات باستخدام العلامات -u
و -g
على التوالي:
للراحة، بشكل افتراضي، سيحفظ sudo
تفاصيل التوثيق الخاصة بك لفترة معينة من الزمن في صندوق الأوامر. هذا يعني أنك لن تضطر إلى كتابة كلمة المرور مرة أخرى حتى ينتهي توقيت المؤقت.
لأغراض الأمان، إذا كنت ترغب في مسح هذا المؤقت عندما تنتهي من تشغيل الأوامر الإدارية، يمكنك التشغيل:
من ناحية أخرى، إذا كنت ترغب في “تعديل” أمر sudo
بحيث لن يتم مطالبتك لاحقًا، أو لتجديد إيجار sudo
الخاص بك، يمكنك دائمًا كتابة:
سيُطلب منك كلمة المرور التي سيتم تخزينها لاستخدامات sudo
لاحقة حتى ينتهي الوقت المحدد لـ sudo
.
إذا كنت مجرد متسائلًا عن أي نوع من الأذونات محددة لاسم المستخدم الخاص بك، فيمكنك كتابة:
هذا سيُظهر كل القواعد في ملف /etc/sudoers
التي تنطبق على مستخدمك. هذا يعطيك فكرة جيدة عن ما ستكون أو لن تكون مسموحًا لك بفعله باستخدام sudo
كأي مستخدم.
هناك عدة أوقات ستُنفذ فيها أمرًا وسيفشل لأنك نسيت أن تُلحقه بـ sudo
. لتجنب الحاجة إلى إعادة كتابة الأمر، يمكنك الاستفادة من وظيفة bash تعني “كرر الأمر الأخير”:
علامة التعجب المزدوجة ستكرر الأمر الأخير. لقد سبقناها بـ sudo
لتغيير الأمر غير المكتسب بسرور إلى أمر مكتسب.
لبعض المرح، يمكنك إضافة السطر التالي إلى ملف /etc/sudoers
الخاص بك باستخدام visudo
:
. . .
Defaults insults
. . .
هذا سيجعل sudo
يعيد إرسال نكتة سخيفة عندما يدخل المستخدم كلمة مرور غير صحيحة لـ sudo
. يمكننا استخدام sudo -k
لمسح كلمة مرور sudo
المخزنة السابقة لتجربتها:
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