أمثلة سودورز. استخدام Sudo في Ubuntu للمبتدئين. س1. كيف يتم استخدام سودو وسو؟ ما هو الفرق بينهما

09.10.2021

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

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

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

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

ما هو سودو

Sudo هي أداة تمنح امتيازات الجذر لإجراء العمليات الإدارية وفقًا لإعداداتها. يتيح لك التحكم بسهولة في الوصول إلى التطبيقات المهمة على النظام. بشكل افتراضي، متى تثبيت أوبونتويُمنح المستخدم الأول (الذي تم إنشاؤه أثناء التثبيت) الحقوق الكاملة لاستخدام Sudo. أولئك. في الواقع، يتمتع المستخدم الأول بنفس حرية العمل التي يتمتع بها الجذر. ومع ذلك، من السهل تغيير سلوك Sudo هذا، انظر أدناه في القسم الخاص بتكوين sudo.

أين يتم استخدام سودو؟

يتم استخدام Sudo عندما تقوم بتشغيل شيء ما من قائمة إدارة النظام. على سبيل المثال، عند تشغيل Synaptic، سيُطلب منك إدخال كلمة المرور الخاصة بك. Synaptic هو برنامج مثبت لإدارة البرامج، لذا لتشغيله تحتاج إلى حقوق المسؤول، والتي تحصل عليها من خلال Sudo عن طريق إدخال كلمة المرور الخاصة بك.

ومع ذلك، لا تعمل جميع البرامج التي تتطلب امتيازات إدارية تلقائيًا من خلال sudo. عادةً ما يتعين عليك تشغيل البرامج يدويًا باستخدام حقوق المسؤول.

تشغيل البرامج الرسومية مع حقوق المسؤول

للبدء برامج الرسوماتباستخدام حقوق المسؤول، يمكنك استخدام مربع حوار تشغيل البرنامج، والذي يتم استدعاؤه افتراضيًا باستخدام اختصار لوحة المفاتيح Alt + F2.

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

جكسودو نوتيلوس

يمكن استبدال gksudo بـ gksu، ويجب على مستخدمي KDE أيضًا كتابة kdesu بدلاً من gksudo. سيُطلب منك إدخال كلمة المرور الخاصة بك، وإذا كان لديك الحقوق اللازمةسيتم تشغيل Nautilus كمسؤول. يمكنك تشغيل أي برنامج رسومي يتمتع بحقوق المسؤول بمجرد الكتابة في مربع حوار التشغيل

جكسودو<имя_команды>

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

تشغيل البرامج مع حقوق المسؤول في المحطة

لتشغيل أمر في محطة مع حقوق المسؤول، ما عليك سوى كتابة sudo أمامه:

سودو<команда>

سيُطلب منك إدخال كلمة المرور الخاصة بك. كن حذرا عند إدخال كلمة المرور مستحيللم يتم عرض هذا، وهذا أمر طبيعي ولأغراض أمنية، فقط اكتب حتى النهاية واضغط على Enter. بعد إدخال كلمة المرور، سيتم تنفيذ الأمر المحدد كجذر.

يتذكر النظام كلمة المرور المدخلة لبعض الوقت (يبقي جلسة sudo مفتوحة). لذلك، قد لا تتطلب عمليات التنفيذ اللاحقة لـ Sudo إدخال كلمة مرور. لضمان إنهاء جلسة sudo، اكتب في المحطة

بالإضافة إلى ذلك، تعد الأخطاء المتعلقة بالقنوات في Linux شائعة. عند تنفيذ أمر

اختبار سودو القط.txt | نص grep > نتيجة.txt

مع حقوق الجذرسيتم تنفيذ cat فقط، لذا فإن الملف result.txtقد لا تسجل. تحتاج إما إلى كتابة sudo قبل كل أمر، أو التبديل مؤقتًا إلى المستخدم المتميز.

الحصول على حقوق المستخدم المتميز لتشغيل أوامر متعددة

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

سودو -s سودو -i

سيضعك هذا في وضع المستخدم المتميز (مع القيود المفروضة من خلال إعدادات Sudo)، كما هو موضح بالرمز # في نهاية موجه سطر الأوامر. هذه الأوامر مشابهة في عملها لـ su ، ولكن: - سودو -s- لا يغير الدليل الرئيسي إلى /root، ويظل الدليل الرئيسي للمستخدم المتصل هو المنزل سودو -s، والتي عادة ما تكون مريحة للغاية. - سودو -i- سيتم أيضًا تغيير الدليل الرئيسي إلى /root.

للخروج مرة أخرى إلى وضع المستخدم العادي، اكتب "خروج" أو ببساطة اضغط على Ctrl + D.

باستخدام حساب الجذر التقليدي والأمر su

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

أوبونتو 11.04 والإصدارات الأقدم

لتسجيل الدخول كجذر، فقط قم بإعطائه كلمة مرور:

سودو كلمة المرور الجذر

ثم في شاشة تسجيل الدخول، انقر فوق أخرى... وأدخل اسم المستخدم (الجذر) وكلمة المرور اللذين قمت بتعيينهما.

أوبونتو 11.10 وما فوق

بدءًا من الإصدار 11.10، تم تثبيت مدير تسجيل الدخول lightdm، وأصبح تسجيل الدخول كجذر أكثر تعقيدًا بعض الشيء.

1. قم بتعيين كلمة مرور الجذر. أدخل في المحطة:

سودو كلمة المرور الجذر

2. قم بتشغيل عنصر "أدخل تسجيل الدخول". أدخل في المحطة:

Gksu gedit /etc/lightdm/lightdm.conf

في نهاية الملف أضف:

Greeter-show-manual-login=true

3. أعد تشغيل Lightdm. أدخل في المحطة:

إعادة تشغيل خدمة Sudo lightdm

هذا كل شيء، سيظهر عنصر "تسجيل الدخول" على شاشة تسجيل الدخول. في حقل تسجيل الدخول ندخل "الجذر"، في حقل كلمة المرور - كلمة المرور التي قمنا بتعيينها في المرحلة الأولى.

لعكس قفل حساب الجذر، ستحتاج إلى التراجع عن التغييرات في إعدادات lightdm، وكذلك قفل حساب الجذر باستخدام الأمر الموجود في الجهاز:

سودو passwd -l الجذر

إعداد sudo والأذونات لتشغيل الأوامر المختلفة

يسمح لك Sudo بالسماح أو تعطيل المستخدمين من تشغيل مجموعة معينة من البرامج. يتم تخزين جميع الإعدادات المتعلقة بحقوق الوصول في ملف /etc/sudoers. هذا ليس ملفا عاديا. لتحريره ضروري(لأسباب أمنية) استخدم الأمر

سودو فيسودو

بشكل افتراضي، تقول أن جميع أعضاء المجموعة مسؤللديك حق الوصول الكامل إلى Sudo، كما هو موضح في السطر

%admin ALL=(ALL) ALL

يمكنك قراءة المزيد حول خيارات بناء الجملة والتخصيص لهذا الملف عن طريق التشغيل

رجل سودورز

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

السماح للمستخدم بتنفيذ أمر دون إدخال كلمة مرور

لمنع النظام من طلب كلمة مرور لأوامر معينة، من الضروري إضافة sudoers بعد السطر # مواصفات الاسم المستعار Cmndأضف سطرًا تدرج فيه الأوامر المطلوبة مع فصل المسار الكامل بفواصل (يمكن العثور على مسار الأمر عن طريق التشغيل أي أمر_اسم:

# مواصفات الاسم المستعار Cmnd_Alias ​​​​SHUTDOWN_CMDS = /sbin/shutdown, /usr/sbin/pm-hibernate, /sbin/reboot

وأضف السطر إلى نهاية الملف

اسم المستخدم الكل=(الكل) NOPASSWD: SHUTDOWN_CMDS

انتباه! الخطوات المذكورة أعلاه لا تحل محل الحاجة إلى إدخال أمر sudo قبل الأمر

إنشاء المرادفات (الأسماء المستعارة)

ليس فقط لتجنب الاضطرار إلى إدخال كلمة مرور لـ Sudo، ولكن أيضًا لتجنب الاضطرار إلى إدخال Sudo على الإطلاق، قم بما يلي: افتح ملف .bashrc الموجود في الدليل الرئيسي لديك

نانو ~/bashrc

وأضف الأسطر إلى نهاية الملف

الاسم المستعار إعادة التشغيل ="sudo reboot" الاسم المستعار poweroff ="sudo poweroff" الاسم المستعار PM-hibernate = "sudo PM-hibernate" الاسم المستعار السبات ="sudo PM-hibernate" الاسم المستعار إيقاف التشغيل ="Sudo Shutdown"

مدة صلاحية كلمة المرور المدخلة

ربما تريد تغيير طول المدة التي يظل فيها sudo ساري المفعول دون إدخال كلمة مرور. يمكن تحقيق ذلك بسهولة عن طريق إضافة شيء مثل ما يلي إلى /etc/sudoers (visudo):

الافتراضي:foo timestamp_timeout=20

هنا سودو للمستخدم fooصالحة دون الحاجة إلى إدخال كلمة مرور لمدة 20 دقيقة. إذا كنت تريد أن يطلب sudo كلمة مرور دائمًا، فاضبط timestamp_timeout على 0.

Sudo لا يطلب كلمة المرور

يعد Sudo بدون كلمة مرور ثغرة أمنية رهيبة، حيث يُسمح لأي شخص بفعل ما يريد. إذا سمحت بذلك عن عمد، فأعده على الفور إلى ما كان عليه.

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

الكل الكل=(الكل) NOPASSWD:ALL

على الأرجح، تمت إضافة هذا الخط الكارثي عند تثبيت برنامج مثل Connect Manager من MTS أو Megafon. في هذه الحالة، يجب تغييره إلى سطر يسمح فقط بتشغيل Connect Manager كجذر، مثل هذا:

اسم المستخدم ALL= NOPASSWD: /path/to/program

هناك خيارات أخرى لحل المشكلة، مناقشة قصيرة.

منذ العصور القديمة، كان الكثيرون في حيرة من أمرهم بسبب تنوع خيارات الأمان عند إجراء العمليات بأقصى قدر من الامتيازات. على سبيل المثال، في وثائق Ubuntu الرسمية، يوصى باستخدام شيء مثل sudo nano كأمر تحرير، وفي العديد من أدلة الهواة (بأسلوب "5 حيل في سطر الأوامر، والتي ستفاجئ جدتك") للحصول على غلاف الجذر، يُقترح كتابة sudo su -. سأحاول أن أشرح لماذا يبدو هذا الوضع خاطئًا بالنسبة لي.

تاريخيا الوحيد بطريقة عالميةتنفيذ أمر كمستخدم آخر في Unix كان هناك برنامج يسمى su. تم إطلاقه بدون معلمات، وطلب كلمة مرور المستخدم المتميز، وإذا نجح، فما عليك سوى استبدال اسم المستخدم الحالي بالجذر، مع ترك جميع متغيرات البيئة تقريبًا من المستخدم القديم (باستثناء PATH وUSER واثنين آخرين، راجع man su من توزيعتك ). سيكون من الأصح تشغيله كـ su - وفي هذه الحالة ستتلقى الصدفة أيضًا البيئة الصحيحة. باستخدام الخيار -c يمكنك تشغيل الأمر: su -c "vim /etc/fstab" .

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

ثم جاء أمر Sudo وكان بمثابة اختراق. الآن يمكن للمسؤول تحديد قائمة بالأوامر المسموح بها لكل مستخدم (أو مجموعة من المستخدمين)، والملفات المتاحة للتحرير، ومتغيرات البيئة الخاصة وغير ذلك الكثير (يتم التحكم في كل هذا الجمال من خلال /etc/sudoers، راجع man sudoers من توزيعتك) . عند تشغيله، يطلب sudo من المستخدم كلمة المرور الخاصة به، وليس كلمة مرور الجذر. يمكن الحصول على الصدفة الكاملة باستخدام "sudo -i"

تجدر الإشارة بشكل خاص إلى الأمر الخاص sudoedit، الذي يقوم بتشغيل المحرر المحدد في متغير البيئة $EDITOR بأمان. باستخدام مخطط أكثر تقليدية، يتم تحرير الملفات على النحو التالي:
سودو السادس /etc/fstab

تم إطلاقه بهذه الطريقة، وقد ورثت الصدفة بحقوق غير مقيدة ومن خلال:! يمكن للمستخدم تشغيل أي أمر (ما لم يعتني المسؤول بذلك مسبقًا بالطبع) وفتح أي ملف.

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

في التوزيعات المستندة إلى دبيان، لا يملك المستخدم الجذر كلمة مرور بدلاً من ذلك، يجب تنفيذ جميع الإجراءات الإدارية من خلال sudo أو ما يعادله رسوميًا gksudo. كبديل كامل لـ su، يجب أن يكون sudo هو الأمر الوحيد للتبديل بين المستخدمين، ولكن كما قلنا في البداية، في اللحظة الحاليةهذا غير صحيح ولسبب ما يخترع الجميع تسلسلات جامحة من sudo وsu وvi وشرطات.

لذلك أقترح على الجميع أن يتذكروا مرة واحدة وإلى الأبد:

بعد النشر الأول لهذه المذكرة، طرحت علي عدة أسئلة. من الإجابات تمكنا من تقديم الأسئلة الشائعة المصغرة.

س: كيف يمكنني استخدام sudo للقيام بـ su -c "echo 1 > /etc/privileged_file"؟ Sudo echo 1 /etc/privileged_file يشكو من "رفض الإذن"
ج: يحدث هذا لأنه يتم تنفيذ أمر الصدى فقط بحقوق مرتفعة، ويتم إعادة توجيه النتيجة إلى الملف بحقوق المستخدم العادي. لإضافة شيء إلى ملف مميز، تحتاج إلى تشغيل الأمر التالي:
$ صدى 1| Sudo Tee - ملف مميز >/dev/null
أو تصبح جذرًا مؤقتًا:
$ sudo -i # echo 1 > ملف مميز # خروج $
س: sudo -i أطول من su - ولكن يبدو أنه لا يوجد فرق بينهما، لماذا طباعة المزيد؟
ج: يتمتع sudo بالعديد من المزايا التي تستحق عناء كتابة بضعة أحرف إضافية:

  • افتراضيًا، يسجل sudo جميع أنشطة المستخدم في قناة authpriv syslog (كقاعدة عامة، يتم وضع النتيجة في الملف /var/log/auth.log)، وفي su يجب تمكين ميزة مماثلة عن طريق تعيين معلمة خاصة في ملف الإعدادات، والذي يختلف من توزيع إلى توزيع (SULOG_FILE في /etc/login.defs في أوبونتو لينكسو /etc/login.conf و/etc/pam.d/su على FreeBSD، وما إلى ذلك.)
  • في حالة su، لا يستطيع مسؤول النظام تقييد الأوامر التي ينفذها المستخدمون، لكن في sudo يمكنه ذلك
  • إذا كان المستخدم محرومًا من الحقوق الإدارية، في حالة su، بعد إزالته من مجموعة العجلات، يجب عليه أن ينسى كلمة مرور الجذر، إذا تم استخدام sudo، فهذا يكفي لإزالته من المجموعة المقابلة (على سبيل المثال، wheel أو admin) و/أو ملف sudoers، إذا تم تخصيصه بشكل أكبر.
س: أنا المستخدم الوحيد على نظامي وأنا معتاد على استخدام sudo، لماذا أحتاج إلى sudo؟
ج: سأجيب على السؤال بسؤال: إذا كان هناك sudo صحيح، فلماذا نستخدم su القديم؟

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

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

ومع ذلك، يمكنك تغيير السلوك الموصوف إذا كنت ترغب في ذلك. للقيام بذلك، افتح ملف التكوين /etc/sudoers باستخدام الأمر التالي:

سودو فيسودو

بعد هذا عليك أن تذهب إلى الخط

الإعدادات الافتراضية env_reset

وأضف المتغير التالي بالقيمة الجديدة (بالخط العريض) إلى نهاية هذا السطر:

الإعدادات الافتراضية env_reset ,timestamp_timeout=[قيمة جديدة]

يجب استبدال الحقل "[قيمة جديدة]" بعدد الدقائق التي يجب أن تكون جلسة Sudo الخاصة بك موجودة فيها. على سبيل المثال، استخدمت القيمة 40.

إذا كنت تريد أن تتم مطالبتك بكلمة مرور في كل مرة تستخدم فيها الأمر sudo، فيمكنك ضبط هذا المتغير على 0. وإذا كنت تريد أن تستمر جلسة sudo إلى الأبد، فيمكنك ضبط هذا المتغير على -1.

يرجى ملاحظة أنه لا يُنصح بشدة باستخدام قيمة -1 للمتغير المعني.

كلمة مرور سودو

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

ولحسن الحظ، فإن وضع كلمة المرور المقابل سهل التنشيط. كل ما عليك فعله هو تغيير السطر التالي في ملف /etc/sudoers الخاص بك:

الإعدادات الافتراضية env_reset

لكل سطر

الإعدادات الافتراضية env_reset،pwfeedback

الآن، سيتم عرض العلامات النجمية عند إدخال كلمة المرور الخاصة بك أثناء استخدام الأداة المساعدة sudo.

بعض خيارات أوامر Sudo المهمة

بالإضافة إلى الخيار -u (الذي ناقشناه في بداية هذه المقالة)، هناك عدة خيارات أخرى المعلمات الهامةأوامر Sudo الجديرة بالذكر. وسنناقش بعضًا منها في هذا القسم.

الخيار -ك

لنفترض أنك قمت للتو بتشغيل أمر باستخدام sudo وأدخلت كلمة المرور الخاصة بك. كما تعلم، افتراضيًا، لن يطلب Sudo كلمة المرور لمدة 15 دقيقة القادمة. لنفترض الآن أنك بحاجة إلى منح شخص ما إمكانية الوصول إلى جهازك الطرفي دون القدرة على استخدام Sudo. ما الذي يمكن عمله في هذه الحالة؟

لحسن الحظ، هناك خيار -k لإنهاء جلسة Sudo بالقوة. إليك ما هو مكتوب حول هذه المعلمة في صفحة دليل Sudo:

-ك، --إعادة تعيين الطابع الزمني

عند استخدامه بدون أمر، يسمح لك بإعادة ضبط إعدادات المستخدم المخزنة مؤقتًا. بمعنى آخر، في المرة التالية التي تتصل فيها بـ Sudo، سيُطلب منك كلمة المرور. لا يتطلب هذا الخيار كلمة مرور وقد تمت إضافته خصيصًا للسماح للمستخدمين بإزالة معلومات إذن sudo من ملف .logout.

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

-الخيار

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

في هذه الحالة، قد تجد الخيار -s مفيدًا. هذا هو وصف هذا الخيار من صفحة رجل Sudo:

-s، --shell

إطلاق قذيفة الأوامر، المسار إلى ملف ثنائيوالذي يتم تحديده باستخدام متغير بيئة SHELL، إن وجد، أو قذيفة الأوامر التي تم تحديد مسارها الثنائي في معلمات حساب المستخدم المتصل. إذا تم استخدام أمر، فسيتم تمريره إلى هذه الصدفة للتنفيذ اللاحق باستخدام الخيار -c القياسي. إذا لم يتم إعطاء أي أمر، فسيتم منح المستخدم حق الوصول إلى غلاف الأوامر التفاعلي قيد التشغيل.

لذلك تقوم هذه المعلمة بما يلي:

  1. تشغيل غلاف أوامر جديد، يتم تحديد المسار إلى الملف الثنائي الخاص به باستخدام متغير البيئة $SHELL. إذا كان متغير البيئة $SHELL فارغًا، فسيتم تشغيل غلاف الأوامر، ويتم تحديد المسار إلى الملف الثنائي الخاص به في السطر الذي يصف معلمات حساب المستخدم الحالي في الملف /etc/passwd.
  2. إذا قمت بتمرير الأمر مع الخيار -s (على سبيل المثال، تشغيل sudo -s whoami)، فسيتم تنفيذ الأمر التالي: sudo /bin/bash -c whoami .
  3. إذا لم تحاول تنفيذ أي من أوامرك (أي أنك قمت فقط بتشغيل sudo -s)، فلديك حق الوصول إلى غلاف أوامر تفاعلي يتمتع بامتيازات الجذر.

لاحظ أن الخيار -s يمنحك واجهة أوامر ذات امتيازات الجذر، ولكن بدون بيئة الجذر - ستستخدم هذه الصدفة ملف .bashrc الخاص بك. هذا يعني بشكل أساسي أنه، على سبيل المثال، عند تشغيل أمر whoami باستخدام هذه الصدفة، فإنه سيطبع اسم المستخدم الخاص بك بدلاً من الجذر.

الخيار -i

الخيار -i مشابه للخيار -s الذي ناقشناه للتو. ومع ذلك، هناك بعض الاختلافات بينهما. أحد الاختلافات الرئيسية هو أن الخيار -i يمنحك أيضًا بيئة المستخدم الجذر، لذلك يتم تجاهل ملف .bashrc (المستخدم) الخاص بك. وهذا مشابه لاستخدام حساب المستخدم الجذر دون تسجيل الدخول كجذر. بالإضافة إلى ذلك، لن تضطر إلى إدخال كلمة مرور الجذر الخاصة بك.

ملاحظة هامة:تذكر أن هناك أيضًا أمر su يسمح لك بالتشغيل كمستخدمين آخرين (افتراضيًا تصبح جذرًا). يتطلب هذا الأمر كلمة مرور المستخدم الجذر. لتجنب الاضطرار إلى إدخال كلمة مرور ذلك المستخدم، يمكنك أيضًا استخدام البادئة sudo (أي الأمر sudo su)؛ في هذه الحالة سيكون عليك إدخال كلمة المرور الخاصة بك. ومع ذلك، هناك بعض الاختلافات بين الأمرين su وsudo su؛ من أجل فهمها، وكذلك التعرف على مقارنة هذه الأوامر مع الأمر sudo -i، ما عليك سوى الرجوع إلى المناقشة المتاحة على هذا الرابط.

خاتمة

أتمنى أن يكون لديك على الأقل فهم أساسي لكيفية عمل أمر sudo، بالإضافة إلى كيفية تغيير سلوكه الافتراضي. جرب التعديلات على /etc/sudoers بنفسك، وراجع المناقشة (المرتبطة في الفقرة السابقة) إذا كنت تريد معرفة المزيد عن هذا الأمر.

يعد الأمر sudo مهمًا جدًا لإدارة حقوق الوصول في غرفة العمليات. نظام لينكس. بفضل هذا الأمر الصغير، يمكنك منح أذونات لتنفيذ إجراءات معينة نيابة عن المسؤول لمستخدمين آخرين، دون منحهم كلمة مرور المستخدم المتميز نفسها. أيضًا، ليس عليك الجلوس دائمًا في الأسفل حسابالمستخدم المتميز لتنفيذ الإجراءات الإدارية في بعض الأحيان.

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

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

اسم الفريق يعني المستخدم البديل يفعلأو المستخدم الفائق يفعل.تتيح لك الأداة المساعدة تشغيل البرامج كمستخدم آخر، ولكن في أغلب الأحيان كمستخدم جذر. تم تطوير الأداة المساعدة في عام 1980 بواسطة Bob Cogshell وCliff Spencer. خلال هذا الوقت، تغير العديد من المطورين وتمت إضافة العديد من الميزات.

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

الآن بعد أن عرفت النظرية، دعونا نلقي نظرة على كيفية إعداد sudo على Linux.

إعداد سودو على لينكس

جميع إعدادات Sudo موجودة في الملف /etc/sudores. هنا يمكنك تكوين الكثير من المعلمات، بدءًا من الشخص الذي سيُسمح له بتنفيذ الأوامر نيابة عن المستخدم المتميز وانتهاءً بالحد من مجموعة الأوامر المتاحة.

لفتح ملف لتحريره، اكتب الأمر التالي كمستخدم متميز:

يمكنك أيضًا تحديد محرر النصوصحيث تريد تحرير ملف التكوين:

EDITOR=nano visudo

بعد ذلك، سنلقي نظرة على الإعدادات الأكثر إثارة للاهتمام التي يمكنك تعيينها في هذا الملف. لكن أولاً، دعونا نلقي نظرة على بناء جملة الملف الأساسي. يتكون من نوعين من السلاسل، وهي أسماء مستعارة تسمح لك بإنشاء قوائم المستخدمين والأعلام، بالإضافة إلى القواعد نفسها التي تحدد كيفية تصرف أمر Sudo. يبدو بناء جملة الاسم المستعار كما يلي:

اكتب الاسم المستعار = العنصر 1، العنصر 2، العنصر 3

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

يحتوي وصف أذونات المستخدم على بناء جملة مختلف قليلاً:

مضيف المستخدم = (مستخدم_آخر:مجموعة)فرق

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

المعلمات الأساسية

يتيح لك الاسم المستعار الافتراضي تعيين المعلمات القياسية لتشغيل الأداة المساعدة، والتي سنأخذها في الاعتبار في هذا القسم. يبدأ هذا الاسم المستعار بالكلمة Defaults، متبوعة باسم العلم. إذا كان هناك رمز ! أمام الاسم، فهذا يعني أنه يجب تشغيل العلم؛ وإلا قم بإيقاف تشغيله:

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

افتراضيات!محاضرة

لا يمكن للمستخدم المتميز القيام بـ sudo:

الإعدادات الافتراضية !root_sudo

الآن إذا حاولت تشغيل sudo sudo فلن يعمل شيء:

قم بتغيير الدليل الرئيسي للمستخدم المستهدف، مع ترك مجلد المستخدم الحالي كدليل رئيسي افتراضيًا:

الإعدادات الافتراضية set_home

احفظ قائمة مجموعات المستخدم الحالي:

الإعدادات الافتراضية !preserve_groups

طلب كلمة مرور المستخدم المتميز بدلاً من كلمة مرور المستخدم:

قم بتعيين عدد محاولات كلمة المرور قبل إنهاء sudo، الافتراضي هو 3:

الإعدادات الافتراضية passwd_tries=5

عدد الدقائق التي ستمر قبل أن يطلب Sudo كلمة المرور مرة أخرى هو 5 بشكل افتراضي. إذا قمت بتعيين القيمة على 0، فسوف يطلب منك دائمًا كلمة المرور، بغض النظر عن المدة التي مضت على استخدام الأداة المساعدة:

الإعدادات الافتراضية timestamp_timeout=10

تحدد المعلمة التالية عدد الدقائق التي سينتظرها Sudo حتى تتم إعادة كتابة كلمة المرور إذا تم إدخالها بشكل غير صحيح:

الإعدادات الافتراضية passwd_timeout=10

يمكنك تغيير الرسالة التي تظهر عند مطالبتك بكلمة المرور:

الإعدادات الافتراضية passprompt = "كلمة المرور الخاصة بك:"

يمكنك تحديد مستخدم آخر، وليس الجذر، الذي سيتم تنفيذ جميع الأوامر منه، لهذا الاستخدام:

الإعدادات الافتراضية runas_default = "المستخدم"

يمكنك تسجيل جميع محاولات الاتصال بـ Sudo:

ملف السجل الافتراضي=/var/log/sudo

ثم نحاول التحقق من تشغيل السجل:

سودو القط /var/log/sudo

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

إعداد مستخدمي Sudo

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

الكل الكل = (الكل) الكل

مثل هذا الفريق غير آمن للغاية، فهو يسمح للجميع وكل شيء. الأول ALL هو السماح لجميع المستخدمين، والثاني ALL هو لجميع المضيفين، والثالث ALL هو السماح بتسجيل الدخول كأي مستخدم، والرابع هو السماح بتنفيذ أي أمر. ولكن يتم استخدام بناء آخر في كثير من الأحيان:

عجلة٪ الكل = (الكل) الكل

يعني نفس المعنى السابق، هنا فقط لا نسمح لجميع المستخدمين باستخدام sudo، ولكن فقط لأولئك الذين هم أعضاء في مجموعة wheel.

عجلة٪ الكل = (الجذر) الكل

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

%wheel ALL = (الجذر: المشرفون) ALL

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

%wheel ALL = (الجذر) /bin/mount، /bin/umount

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

عجلة٪ الكل = (الجذر) الكل
%wheel ALL = (جذر) NOPASSWD: /bin/mount، /bin/umount

يمكنك أيضًا تقييد المستخدمين حسب المضيف، على سبيل المثال، نسمح باستخدام sudo فقط من host1:

%wheel host1 = (الجذر) الكل

يبقى أن ننظر في كيفية استخدام الأسماء المستعارة. يمكن أن تكون الأسماء المستعارة من الأنواع التالية:

  • User_Alias- الاسم المستعار للمستخدمين الذين سيستخدمون sudo؛
  • Runas_Alias- الاسم المستعار للمستخدمين الذين سيتم تنفيذ الأوامر نيابة عنهم؛
  • Host_Alias- الاسم المستعار للمضيف؛
  • Cmnd_Alias- الاسم المستعار للأمر؛

على سبيل المثال، لنقم بإنشاء أربعة أسماء مستعارة ونستخدمها في قاعدتنا:

User_Alias ​​​​Users = user1,user2,user3
Runas_Alias ​​​​Admins = root,admin
Host_Alias ​​​​Hosts = host1,host2
Cmd_Alias ​​​​Cmds = /bin/mount,/bin/umount

مضيفو المستخدمين = (المسؤولون) Cmds

وهذا يعني أن المستخدمين من قائمة المستخدمين سيكونون قادرين على تنفيذ أوامر Cmds نيابة عن مستخدمي Amdins على مضيفي Hosts.

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

الكل الكل = (الجذر) NOPASSWD: /bin/mount

يمكنك أيضًا منع تنفيذ هذا الأمر على الإطلاق باستخدام علامة NOEXEC:

الكل الكل = (الجذر) NOEXEC /bin/mount

يمكنك التحقق مما إذا كان الملف /etc/sudores قد تم تكوينه بشكل صحيح والاطلاع على جميع القواعد التي تم إنشاؤها باستخدام الأمر:

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

الاستنتاجات

في هذه المقالة نظرنا في كيفية تكوين Sudo في Linux. كما ترون، على الرغم من أن هذه أداة مساعدة بسيطة للغاية، إلا أنها تخفي الكثير إعدادات مفيدةوالتي يمكنك استخدامها في نظامك. إذا كان لديك أي أسئلة، اسأل في التعليقات!

ما هو الصحيح للاستخدام: سو أو سودو؟

منذ العصور القديمة، كان الكثيرون في حيرة من أمرهم بسبب تنوع خيارات الأمان عند إجراء العمليات بأقصى قدر من الامتيازات. على سبيل المثال، توصي وثائق Ubuntu الرسمية باستخدام شيء مثلسودو نانو ، وفي العديد من أدلة الهواة (بأسلوب "5 حيل لسطر الأوامر ستفاجئ جدتك")، للحصول على غلاف جذر يُقترح الكتابةسودو سو - . سأحاول أن أشرح لماذا يبدو لي هذا الوضع خاطئًا.

و تاريخيًا، كانت الطريقة العالمية الوحيدة لتنفيذ أمر كمستخدم آخر في يونكس هي برنامج su. تم إطلاقه بدون معلمات، وطلب كلمة مرور المستخدم المتميز، وإذا نجح، فما عليك سوى استبدال اسم المستخدم الحالي بالجذر، مع ترك جميع متغيرات البيئة تقريبًا من المستخدم القديم (باستثناء PATH وUSER واثنين آخرين، انظر أدناه).رجل سو من التوزيع الخاص بك). سيكون من الأصح تشغيله بهذه الطريقةسو - - في هذه الحالة، تلقت الصدفة أيضًا البيئة الصحيحة. مع المعلمةيمكنك تشغيل الأمر: su -c "vim /etc/fstab" .

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

ثم جاء أمر Sudo وكان بمثابة اختراق. الآن يمكن للمسؤول تحديد قائمة بالأوامر المسموح بها لكل مستخدم (أو مجموعة من المستخدمين)، والملفات المتاحة للتحرير، ومتغيرات البيئة الخاصة وغير ذلك الكثير (يتم التحكم في كل هذا الروعة من/etc/sudoers ، راجع رجل sudoers من التوزيع الخاص بك). عند تشغيله، يطلب sudo من المستخدم كلمة المرور الخاصة به، وليس كلمة مرور الجذر. يمكن الحصول على غلاف كامل باستخدام "سودو -أنا "

فرق خاصة تستحق الذكر بشكل خاص com.sudoedit ، الذي يقوم بتشغيل المحرر المحدد في متغير البيئة بأمانمحرر $ . باستخدام مخطط أكثر تقليدية، يتم تحرير الملفات على النحو التالي:

سودو السادس /etc/fstab

تم إطلاق Vi بهذه الطريقة وورثت الصدفة بحقوق غير مقيدة ومن خلالها:! يمكن للمستخدم تشغيل أي أمر (ما لم يعتني المسؤول بذلك مسبقًا بالطبع) وفتح أي ملف.

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

في التوزيعات المستندة إلى دبيان، لا يملك المستخدم الجذر كلمة مرور بدلاً من ذلك، ويجب تنفيذ جميع الإجراءات الإدارية من خلالها sudo أو التناظرية الرسومية com.gksudo . كونه بديلا كاملاسو، سودو يجب أن يكون الأمر الوحيد للتبديل بين المستخدمين، ولكن، كما قيل في البداية، ليس هذا هو الحال في الوقت الحالي ولسبب ما يخترع الجميع تسلسلات جامحة من sudo وsu وvi وشرطة.

لذلك أقترح على الجميع أن يتذكروا مرة واحدة وإلى الأبد:

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

س: كيف نفعل ذلك باستخدام Sudosu -c "echo 1 > /etc/privileged_file"? سودو صدى 1 /etc/privileged_fileيقسم على "تم رفض الإذن"

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

$ صدى 1| Sudo Tee - ملف مميز >/dev/null

أو تصبح جذرًا مؤقتًا:

$ سودو -i

# صدى 1 > الملف المميز

# مخرج

س: sudo -i أطول من su - ولكن يبدو أنه لا يوجد فرق بينهما، لماذا طباعة المزيد؟

ج: يتمتع sudo بالعديد من المزايا التي تستحق عناء كتابة بضعة أحرف إضافية:

  • افتراضيًا، يسجل sudo جميع أنشطة المستخدم في قناة authpriv syslog (كقاعدة عامة، يتم وضع النتيجة في الملف /var/log/auth.log)، وفي su يجب تمكين ميزة مماثلة عن طريق تعيين معلمة خاصة في ملف الإعدادات، والذي يختلف من توزيع إلى توزيع (SULOG_FILE في /etc/login.defs على Ubuntu Linux، و/etc/login.conf و/etc/pam.d/su على FreeBSD، وما إلى ذلك)
  • في حالة su، لا يستطيع مسؤول النظام تقييد الأوامر التي ينفذها المستخدمون، لكن في sudo يمكنه ذلك
  • إذا كان المستخدم محرومًا من الحقوق الإدارية، في حالة su، بعد إزالته من مجموعة العجلات، يجب عليه أن ينسى كلمة مرور الجذر، إذا تم استخدام sudo، فهذا يكفي لإزالته من المجموعة المقابلة (على سبيل المثال، wheel أو admin) و/أو ملف sudoers، إذا تم تخصيصه بشكل أكبر.

س: أنا المستخدم الوحيد على نظامي وأنا معتاد على استخدام sudo، لماذا أحتاج إلى sudo؟

ج: سأجيب على السؤال بسؤال: إذا كان هناك sudo صحيح، فلماذا نستخدم su القديم؟