sudo، sudoedit — تنفيذ أمر كمستخدم آخر
ملخص
sudo -h | -K | -k | -V
sudo -v [-ABkNnS] [-g group] [-h host] [-p prompt] [-u user]
sudo -l [-ABkNnS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command [arg ...]]
sudo [-ABbEHnPS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory]
[-r role] [-t type] [-T timeout] [-u user] [VAR=value] [-i | -s] [command [arg ...]]
sudoedit [-ABkNnS] [-C num] [-D directory] [-g group] [-h host] [-p prompt] [-R directory]
[-r role] [-t type] [-T timeout] [-u user] file ...
الوصف
sudo يسمح للمستخدم المسموح له بتنفيذ أمر كالمستخدم الخارق أو كمستخدم آخر، كما هو محدد
بواسطة سياسة الأمان. يتم استخدام معرف المستخدم الحقيقي (وليس الفعال) للمستخدم الذي يستدعي الأمر لتحديد
اسم المستخدم الذي سيتم استخدامه للاستعلام عن سياسة الأمان.
يدعم sudo بنية إضافية لسياسات الأمان، والتدقيق، وتسجيل الإدخال/الإخراج.
يمكن لأطراف ثالثة تطوير وتوزيع الإضافات الخاصة بها للعمل بسلاسة مع واجهة sudo.
سياسة الأمان الافتراضية هي sudoers، والتي يتم تكوينها عبر الملف /etc/sudoers، أو عبر LDAP.
انظر قسم "الإضافات" لمزيد من المعلومات.
تحدد سياسة الأمان الامتيازات التي يتمتع بها المستخدم لتشغيل sudo. قد تتطلب السياسة من المستخدمين المصادقة باستخدام كلمة مرور أو آلية مصادقة أخرى. إذا كانت المصادقة مطلوبة، فسوف يخرج sudo إذا لم يتم إدخال كلمة مرور المستخدم ضمن حد زمني قابل للتكوين. هذا الحد خاص بالسياسة؛ الحد الزمني الافتراضي لمطالبة كلمة المرور لسياسة sudoers هو 0 دقيقة.
قد تدعم سياسات الأمان تخزين بيانات الاعتماد مؤقتًا للسماح للمستخدم بتشغيل sudo مرة أخرى لفترة من الوقت دون الحاجة إلى المصادقة. بشكل افتراضي، تقوم سياسة sudoers بتخزين بيانات الاعتماد مؤقتًا على أساس لكل طرفية لمدة 15 دقيقة. انظر خيارات timestamp_type و timestamp_timeout في sudoers(5) لمزيد من المعلومات. من خلال تشغيل sudo مع الخيار -v، يمكن للمستخدم تحديث بيانات الاعتماد المخزنة مؤقتًا دون تشغيل أمر.
على الأنظمة التي يكون فيها sudo الطريقة الأساسية للحصول على امتيازات المستخدم الخارق، من الضروري تجنب أخطاء بناء الجملة في ملفات تكوين سياسة الأمان. بالنسبة لسياسة الأمان الافتراضية، sudoers(5)، يجب إجراء التغييرات على ملفات التكوين باستخدام الأداة المساعدة visudo(8) والتي ستضمن عدم إدخال أي أخطاء في بناء الجملة.
عند استدعاء sudoedit، يتم تضمين الخيار -e (الموصوف أدناه).
قد تقوم سياسات الأمان وإضافات التدقيق بتسجيل محاولات ناجحة وفاشلة لتشغيل sudo. إذا تم تكوين إضافة الإدخال/الإخراج، فقد يتم تسجيل إدخال وإخراج الأمر الذي يتم تنفيذه.
الخيارات كالتالي:
-A، --askpass
عادةً، إذا كان `sudo` يتطلب كلمة مرور، فسيقوم بقراءتها من محطة المستخدم. إذا تم تحديد الخيار `-A` (askpass)، فسيتم تنفيذ برنامج مساعد (ربما يكون رسوميًا) لقراءة كلمة مرور المستخدم وإخراج كلمة المرور إلى الإخراج القياسي. إذا تم تعيين متغير البيئة `SUDO_ASKPASS`، فإنه يحدد مسار البرنامج المساعد. وإلا، إذا كان `sudo.conf(5)` يحتوي على سطر يحدد برنامج askpass، فسيتم استخدام هذه القيمة. على سبيل المثال:
# مسار برنامج المساعد askpass
Path askpass /usr/bin/ssh-askpass
إذا لم يكن برنامج askpass متاحًا، فسوف يخرج `sudo` مع وجود خطأ.
-B، --bell
أصدر صوت تنبيه كجزء من مطالبة كلمة المرور عند وجود محطة طرفية. هذا الخيار ليس له تأثير إذا تم استخدام برنامج askpass.
-b، --background
قم بتشغيل الأمر المحدد في الخلفية. لا يمكن استخدام التحكم في مهام shell لمعالجة العمليات الخلفية التي بدأها `sudo`. ستفشل معظم الأوامر التفاعلية في العمل بشكل صحيح في وضع الخلفية.
-C num، --close-from=num
أغلق جميع واصفات الملفات الأكبر من أو تساوي `num` قبل تنفيذ أمر. القيم الأقل من ثلاثة غير مسموح بها. افتراضيًا، سيقوم `sudo` بإغلاق جميع واصفات الملفات المفتوحة باستثناء الإدخال القياسي والإخراج القياسي والخطأ القياسي عند تنفيذ أمر. قد يقيد سياسة الأمان قدرة المستخدم على استخدام هذا الخيار. تسمح سياسة `sudoers` باستخدام خيار `-C` فقط عندما يكون المسؤول قد قام بتمكين خيار `closefrom_override`.
-D directory، --chdir=directory
قم بتشغيل الأمر في الدليل المحدد بدلاً من الدليل الحالي. قد تُرجع سياسة الأمان خطأ إذا لم يكن لدى المستخدم إذن لتحديد دليل العمل.
-E، --preserve-env
يشير إلى سياسة الأمان أن المستخدم يرغب في الحفاظ على متغيرات البيئة الموجودة. قد تُرجع سياسة الأمان خطأ إذا لم يكن لدى المستخدم إذن للحفاظ على البيئة.
--preserve-env=list
يشير إلى سياسة الأمان أن المستخدم يرغب في إضافة قائمة متغيرات البيئة المفصولة بفواصل إلى المتغيرات التي يتم الحفاظ عليها من بيئة المستخدم. قد تُرجع سياسة الأمان خطأ إذا لم يكن لدى المستخدم إذن للحفاظ على البيئة. يمكن تحديد هذا الخيار عدة مرات.
-e، --edit
قم بتحرير ملف واحد أو أكثر بدلاً من تشغيل أمر. بدلاً من اسم المسار، يتم استخدام السلسلة "sudoedit" عند استشارة سياسة الأمان. إذا كان المستخدم مصرحًا له من قبل السياسة، فسيتم اتخاذ الخطوات التالية:
يتم إنشاء نسخ مؤقتة من الملفات المراد تحريرها بحيث يتم تعيين المالك للمستخدم الذي قام باستدعاء الأمر.
يتم تشغيل المحرر المحدد بواسطة السياسة لتحرير الملفات المؤقتة. تستخدم سياسة `sudoers` متغيرات البيئة `SUDO_EDITOR` و `VISUAL` و `EDITOR` (بهذا الترتيب). إذا لم يتم تعيين أي من `SUDO_EDITOR` أو `VISUAL` أو `EDITOR`، فسيتم استخدام البرنامج الأول المدرج في خيار `editor` في `sudoers(5)`.
إذا تم تعديلها، يتم نسخ الملفات المؤقتة مرة أخرى إلى موقعها الأصلي، ويتم إزالة النسخ المؤقتة.
لمنع تعديل الملفات غير المصرح بها، يتم تطبيق القيود التالية ما لم يسمح بذلك صراحةً في سياسة الأمان:
- لا يمكن تعديل الروابط الرمزية (الإصدار 1.8.15 والإصدارات الأحدث).
- لا يتم تتبع الروابط الرمزية الموجودة في المسار المراد تعديله عند كتابة الدليل الأصل بواسطة المستخدم الذي يقوم بتشغيل الأمر، إلا إذا كان هذا المستخدم هو المستخدم الجذر (الإصدار 1.8.16 والإصدارات الأحدث).
- لا يمكن تعديل الملفات الموجودة في دليل يمكن للمستخدم الذي يقوم بتشغيل الأمر الكتابة إليه، إلا إذا كان هذا المستخدم هو المستخدم الجذر (الإصدار 1.8.16 والإصدارات الأحدث).
- لا يُسمح للمستخدمين أبدًا بتعديل الملفات الخاصة بالأجهزة.
إذا لم يكن الملف المحدد موجودًا، فسيتم إنشاؤه. على عكس معظم الأوامر التي يتم تشغيلها بواسطة `sudo`، يتم تشغيل المحرر مع ترك بيئة المستخدم التي تقوم بتشغيل الأمر دون تغيير. إذا أصبح الملف المؤقت فارغًا بعد التحرير، فسيتم مطالبة المستخدم قبل تثبيته. إذا، لسبب ما، لم يتمكن `sudo` من تحديث ملف بإصداره الذي تم تحريره، فسيتم عرض تحذير على المستخدم وستظل النسخة التي تم تحريرها في ملف مؤقت.
-g مجموعة، --group=مجموعة
شغل الأمر مع تعيين المجموعة الأساسية إلى مجموعة بدلاً من المجموعة الأساسية المحددة في قاعدة بيانات كلمات مرور المستخدم المستهدف. يمكن أن تكون المجموعة اسم مجموعة أو معرف مجموعة رقمي (GID) مسبوق بعلامة `#` (على سبيل المثال، `#0` لمعرف المجموعة 0). عند تشغيل أمر كـ GID، تتطلب العديد من الأغلفة أن يتم إلغاء رمز `#` باستخدام شرطة مائلة عكسية (`\`). إذا لم يتم تحديد خيار `-u`، فسيتم تشغيل الأمر كالمستخدم الذي يقوم بتشغيله. في أي من الحالتين، سيتم تعيين المجموعة الأساسية إلى مجموعة. تسمح سياسة `sudoers` بتحديد أي من مجموعات المستخدم المستهدف عبر الخيار `-g` طالما لم يتم استخدام الخيار `-P`.
-H، --set-home
اطلب أن تقوم سياسة الأمان بتعيين متغير بيئة `HOME` إلى الدليل الرئيسي المحدد في قاعدة بيانات كلمات مرور المستخدم المستهدف. اعتمادًا على السياسة، قد يكون هذا هو السلوك الافتراضي.
-h، --help
اعرض رسالة مساعدة موجزة على الإخراج القياسي واخرج.
-h مضيف، --host=مضيف
شغل الأمر على المضيف المحدد إذا كانت سياسة الأمان تدعم الأوامر عن بُعد. لا يدعم مكون `sudoers` حاليًا تشغيل الأوامر عن بُعد. يمكن أيضًا استخدامه بالاشتراك مع الخيار `-l` لعرض امتيازات المستخدم للمضيف البعيد.
-i، --login
شغل الصدفة المحددة في قاعدة بيانات كلمات مرور المستخدم المستهدف كصدفة تسجيل دخول. هذا يعني أن ملفات موارد تسجيل الدخول مثل `.profile` أو `.bash_profile` أو `.login` سيتم قراءتها بواسطة الصدفة. إذا تم تحديد أمر، فسيتم تمريره إلى الصدفة كأمر بسيط باستخدام خيار `-c`. يتم دمج الأمر وأي وسائط، مع الفصل بينها بمسافات، بعد إلغاء رمز كل حرف (بما في ذلك المسافات البيضاء) باستخدام شرطة مائلة عكسية (`\`) باستثناء الأحرف الأبجدية الرقمية والشرطات السفلية والواصلات وعلامات الدولار. إذا لم يتم تحديد أمر، فسيتم تنفيذ صدفة تفاعلية. يحاول `sudo` تغيير الدليل إلى الدليل الرئيسي لهذا المستخدم قبل تشغيل الصدفة. يتم تشغيل الأمر ببيئة مماثلة لتلك التي سيتلقاها المستخدم عند تسجيل الدخول. تتصرف معظم الأصداف بشكل مختلف عند تحديد أمر مقارنةً بجلسة تفاعلية؛ راجع دليل الصدفة للحصول على التفاصيل. يوثق قسم "بيئة الأمر" في دليل `sudoers(5)` كيفية تأثير الخيار `-i` على البيئة التي يتم فيها تشغيل الأمر عند استخدام سياسة `sudoers`.
-K, --remove-timestamp
مشابه للخيار -k، باستثناء أنه يزيل جميع بيانات الاعتماد المخزنة مؤقتًا للمستخدم، بغض النظر عن الطرفية أو معرف العملية الأصل. في المرة التالية التي يتم فيها تشغيل sudo، يجب إدخال كلمة مرور إذا كانت سياسة الأمان تتطلب المصادقة. لا يمكن استخدام الخيار -K بالتزامن مع أمر أو خيار آخر. هذا الخيار لا يتطلب كلمة مرور. لا تدعم جميع سياسات الأمان التخزين المؤقت لبيانات الاعتماد.
-k, --reset-timestamp
عند استخدامه بدون أمر، يبطل بيانات الاعتماد المخزنة مؤقتًا للمستخدم للجلسة الحالية. في المرة التالية التي يتم فيها تشغيل sudo في الجلسة، يجب إدخال كلمة مرور إذا كانت سياسة الأمان تتطلب المصادقة. بشكل افتراضي، تستخدم سياسة sudoers سجلًا منفصلاً في ذاكرة التخزين المؤقت لبيانات الاعتماد لكل طرفية (أو معرف العملية الأصل إذا لم تكن هناك طرفية). يمنع هذا الخيار من التدخل في أوامر sudo التي يتم تشغيلها في جلسة طرفية مختلفة. راجع خيار `timestamp_type` في sudoers(5) لمزيد من المعلومات. هذا الخيار لا يتطلب كلمة مرور، وتمت إضافته للسماح للمستخدم بإلغاء أذونات sudo من ملف .logout.
عند استخدامه بالتزامن مع أمر أو خيار قد يتطلب كلمة مرور، سيؤدي هذا الخيار إلى قيام sudo بتجاهل بيانات الاعتماد المخزنة مؤقتًا للمستخدم. ونتيجة لذلك، سيطالب sudo بكلمة مرور (إذا كانت مطلوبة بواسطة سياسة الأمان) ولن يقوم بتحديث بيانات الاعتماد المخزنة مؤقتًا للمستخدم.
لا تدعم جميع سياسات الأمان التخزين المؤقت لبيانات الاعتماد.
-l, --list
إذا لم يتم تحديد أي أمر، فسيتم سرد الامتيازات الخاصة بالمستخدم الذي قام باستدعاء الأمر (أو المستخدم المحدد بواسطة الخيار -U) على المضيف الحالي. يتم استخدام تنسيق قائمة أطول إذا تم تحديد هذا الخيار عدة مرات وكانت سياسة الأمان تدعم تنسيق إخراج مفصل.
إذا تم تحديد أمر وتمت الموافقة عليه بواسطة سياسة الأمان للمستخدم الذي قام باستدعاء الأمر (أو المستخدم المحدد بواسطة الخيار -U) على المضيف الحالي، فسيتم عرض المسار الكامل للأمر جنبًا إلى جنب مع أي وسيطات. إذا تم تحديد -l أكثر من مرة (وكانت سياسة الأمان تدعم ذلك)، فسيتم عرض القاعدة المطابقة بتنسيق مفصل جنبًا إلى جنب مع الأمر. إذا تم تحديد أمر ولكن لم يتم السماح به بواسطة السياسة، فسوف يخرج sudo بقيمة حالة قدرها 1.
-N، --no-update
لا تقم بتحديث بيانات الاعتماد المخزنة مؤقتًا للمستخدم، حتى إذا نجح المستخدم في المصادقة.
على عكس العلامة -k، يتم استخدام بيانات الاعتماد المخزنة مؤقتًا الموجودة إذا كانت صالحة. لتحديد
متى تكون بيانات الاعتماد المخزنة مؤقتًا للمستخدم صالحة (أو متى لا تكون هناك حاجة إلى مصادقة)، يمكن استخدام ما يلي:
sudo -Nnv
لا تدعم جميع سياسات الأمان التخزين المؤقت لبيانات الاعتماد.
-n، --non-interactive
تجنب مطالبة المستخدم بإدخال أي شيء. إذا كانت هناك حاجة إلى كلمة مرور لتشغيل الأمر، فسيعرض sudo رسالة خطأ ويخرج.
-P، --preserve-groups
احتفظ بمتجه مجموعة المستخدم الذي قام باستدعاء الأمر دون تغيير. افتراضيًا، ستقوم سياسة sudoers بتهيئة متجه المجموعة إلى قائمة المجموعات التي يكون المستخدم المستهدف عضوًا فيها. ومع ذلك، يتم تعيين معرّفات المجموعة الفعليّة والفعّالة لتطابق المستخدم المستهدف.
-p prompt، --prompt=prompt
استخدم مطالبة كلمة مرور مخصصة مع تسلسلات هروب اختيارية. تدعم سياسة sudoers تسلسلات الهروب التالية باستخدام علامة النسبة المئوية ('%'):
%H يتم توسيعه إلى اسم المضيف بما في ذلك اسم المجال (فقط إذا كان اسم الجهاز اسمًا كاملاً أو تم تعيين خيار fqdn في sudoers(5))
%h يتم توسيعه إلى اسم المضيف المحلي بدون اسم المجال
%p يتم توسيعه إلى اسم المستخدم الذي يتم طلب كلمة مروره (يحترم العلامات rootpw، و targetpw، و runaspw في sudoers(5))
%U يتم توسيعه إلى اسم تسجيل الدخول للمستخدم الذي سيتم تشغيل الأمر كـ (افتراضيًا إلى root ما لم يتم تحديد خيار -u أيضًا)
%u يتم توسيعه إلى اسم تسجيل الدخول للمستخدم الذي قام باستدعاء الأمر
%% يتم دمج علامتي النسبة المئوية المتتاليتين ('%') في علامة واحدة ('%')
ستتجاوز المطالبة المخصصة المطالبة الافتراضية المحددة إما بواسطة سياسة الأمان أو متغير بيئة SUDO_PROMPT. على الأنظمة التي تستخدم PAM، ستتجاوز أيضًا المطالبة المخصصة المطالبة المحددة بواسطة وحدة PAM ما لم يتم تعطيل علامة passprompt_override في sudoers.
-R directory، --chroot=directory
تغيير إلى دليل الجذر المحدد (انظر chroot(8)) قبل تشغيل الأمر. قد تُرجع سياسة الأمان خطأ إذا لم يكن لدى المستخدم إذن لتحديد دليل الجذر.
هذا الخيار مهمل وسيتم إزالته في إصدار مستقبلي من sudo.
-r role، --role=role
تشغيل الأمر بسياق أمان SELinux يتضمن الدور المحدد.
-S، --stdin
اكتب المطالبة إلى الخطأ القياسي واقرأ كلمة المرور من الإدخال القياسي بدلاً من استخدام جهاز الطرفية.
-s، --shell
قم بتشغيل shell المحدد بواسطة متغير بيئة SHELL إذا تم تعيينه أو shell المحدد بواسطة إدخال كلمة مرور المستخدم الذي قام باستدعاء الأمر. إذا تم تحديد أمر، فإنه يتم تمريره إلى shell كأمر بسيط باستخدام خيار -c. يتم ربط الأمر وأي وسائط، مفصولة بمسافات، بعد هروب كل حرف (بما في ذلك المسافات البيضاء) باستخدام شرطة مائلة ('\') باستثناء الأحرف الأبجدية الرقمية والشرطات السفلية والواصلات وعلامات الدولار. إذا لم يتم تحديد أي أمر، يتم تنفيذ shell تفاعلي. تتصرف معظم shells بشكل مختلف عند تحديد أمر مقارنة بجلسة تفاعلية؛ راجع دليل shell للحصول على التفاصيل.
-t type, --type=type
قم بتشغيل الأمر بسياق أمان SELinux يتضمن النوع المحدد. إذا لم يتم تحديد نوع، يتم اشتقاق النوع الافتراضي من الدور.
-U user, --other-user=user
يُستخدم بالتزامن مع الخيار -l لسرد الامتيازات للمستخدم بدلاً من المستخدم الذي قام باستدعاء الأمر. قد يقيد سياسة الأمان سرد امتيازات المستخدمين الآخرين. عند استخدام سياسة sudoers، يقتصر الخيار -U على مستخدم الجذر والمستخدمين الذين لديهم إما امتياز "list" للمستخدم المحدد أو القدرة على تشغيل أي أمر كمستخدم الجذر أو المستخدم على المضيف الحالي.
-T timeout, --command-timeout=timeout
يُستخدم لتعيين مهلة للأمر. إذا انتهت المهلة قبل انتهاء الأمر، فسيتم إنهاء الأمر. قد تقيد سياسة الأمان قدرة المستخدم على تعيين مهلات. تتطلب سياسة sudoers أن يتم تمكين المهلات المحددة من قبل المستخدم بشكل صريح.
-u user, --user=user
قم بتشغيل الأمر كمستخدم آخر غير مستخدم الهدف الافتراضي (عادةً مستخدم الجذر). يمكن أن يكون المستخدم اسم مستخدم أو معرف مستخدم رقمي (UID) مسبوقًا بحرف '#' (مثل '#0' لمعرف المستخدم 0). عند تشغيل الأوامر باستخدام معرف المستخدم، تتطلب العديد من الأصداف أن يتم إلغاء حرف '#' باستخدام علامة الشرطة المائلة العكسية ('\'). قد تقيد بعض سياسات الأمان معرفات المستخدم بقائمة معرفات المستخدم الموجودة في قاعدة بيانات كلمات المرور. تسمح سياسة sudoers بمعرفات المستخدم التي ليست في قاعدة بيانات كلمات المرور طالما لم يتم تعيين خيار targetpw. قد لا تدعم سياسات الأمان الأخرى ذلك.
-V, --version
اطبع سلسلة إصدار sudo بالإضافة إلى سلسلة إصدار أي مكونات إضافية مُكوَّنة. إذا كان المستخدم الذي قام باستدعاء الأمر هو بالفعل مستخدم الجذر، فسيقوم الخيار -V بعرض الخيارات التي تم تمريرها إلى configure عند إنشاء sudo؛ قد تعرض المكونات الإضافية معلومات إضافية مثل الخيارات الافتراضية.
-v, --validate
قم بتحديث بيانات اعتماد المستخدم المخزنة مؤقتًا، وقم بمصادقة المستخدم إذا لزم الأمر. بالنسبة لمكوِّن sudoers، يمدد هذا الخيار مهلة sudo لمدة 15 دقيقة إضافية افتراضيًا، ولكنه لا يقوم بتشغيل أي أمر. لا تدعم جميع سياسات الأمان بيانات الاعتماد المخزنة مؤقتًا.
--
يُستخدم "--" لتحديد نهاية خيارات sudo. يتم تمرير الخيارات اللاحقة إلى الأمر.
يمكن تحديد الخيارات التي تأخذ قيمة مرة واحدة فقط، ما لم يُذكر خلاف ذلك في الوصف. هذا للمساعدة في الحماية من المشاكل التي تسببها البرامج النصية المكتوبة بشكل سيئ والتي تستدعي sudo بإدخال يتحكم فيه المستخدم.
يمكن أيضًا تمرير متغيرات البيئة التي سيتم تعيينها للأمر كخيارات إلى sudo بالصيغة VAR=value، على سبيل المثال LD_LIBRARY_PATH=/usr/local/pkg/lib. قد تخضع متغيرات البيئة لقيود تفرضها سياسة الأمان. تخضع سياسة sudoers لمتغيرات البيئة التي يتم تمريرها كخيارات لنفس القيود التي تخضع لها متغيرات البيئة الموجودة مع وجود فرق مهم واحد. إذا تم تعيين خيار setenv في sudoers، فإن الأمر الذي سيتم تشغيله لديه علامة SETENV أو الأمر المطابق هو ALL، فيمكن للمستخدم تعيين متغيرات كان من شأنها أن تُمنع. راجع sudoers(5) لمزيد من المعلومات.
تنفيذ الأمر
عندما يقوم sudo بتنفيذ أمر، تحدد سياسة الأمان بيئة التنفيذ لهذا الأمر. عادةً، يتم تعيين مُعرّف المستخدم والمجموعة الفعلي والفعلي ليطابقا مُعرّفات المستخدم المستهدف، كما هو محدد في قاعدة بيانات كلمات المرور، ويتم تهيئة متجه المجموعة بناءً على قاعدة بيانات المجموعة (إلا إذا تم تحديد الخيار -P).
يمكن تحديد المعلمات التالية بواسطة سياسة الأمان:
معرّف المستخدم الفعلي والفعلي
معرّف المجموعة الفعلي والفعلي
معرّفات المجموعة التكميلية
قائمة البيئة
دليل العمل الحالي
قناع وضع إنشاء الملف (umask)
دور ونوع SELinux
أولوية الجدولة (المعروفة أيضًا باسم قيمة "nice")
نموذج العملية
هناك طريقتان مختلفتان يمكن لـ sudo من خلالهما تشغيل أمر.
إذا تم تكوين مكون إضافي لتسجيل إدخال/إخراج الجهاز الطرفي لتسجيل إدخال/إخراج الجهاز الطرفي، أو إذا طلبت سياسة الأمان ذلك بشكل صريح، فسيتم تخصيص جهاز طرفي زائف ("pty") ويتم استخدام fork(2) لإنشاء عملية sudo ثانية، يُشار إليها باسم "المراقب". يقوم المراقب بإنشاء جلسة طرفية جديدة بحيث يكون هو القائد ويتم تعيين pty كطرفية التحكم الخاصة به، ثم يستدعي fork(2) مرة أخرى، ويقوم بإعداد بيئة التنفيذ كما هو موضح أعلاه، ثم يستخدم استدعاء النظام execve(2) لتشغيل الأمر في العملية الفرعية. يوجد المراقب لإعادة توجيه إشارات التحكم في الوظائف بين طرفية المستخدم و pty التي يتم تشغيل الأمر فيها. وهذا يجعل من الممكن تعليق واستئناف الأمر بشكل طبيعي. بدون المراقب، سيكون الأمر في ما يسمى POSIX بـ "مجموعة عمليات يتيمة" ولن يتلقى أي إشارات تحكم في الوظائف من النواة. عندما يخرج الأمر أو يتم إنهاؤه بواسطة إشارة، يقوم المراقب بتمرير حالة الخروج الخاصة بالأمر إلى عملية sudo الرئيسية ويخرج. بعد تلقي حالة الخروج الخاصة بالأمر، تقوم عملية sudo الرئيسية بتمرير حالة الخروج الخاصة بالأمر إلى وظيفة الإغلاق الخاصة بسياسة الأمان، بالإضافة إلى وظيفة الإغلاق الخاصة بأي مكون إضافي للتنقيح تم تكوينه، ثم تخرج. هذا هو الوضع الافتراضي لإصدارات sudo 1.9.14 والإصدارات الأحدث عند استخدام سياسة sudoers.
إذا لم يتم استخدام pty، فإن sudo يستدعي fork(2)، ويقوم بإعداد بيئة التنفيذ كما هو موضح أعلاه، ويستخدم استدعاء النظام execve(2) لتشغيل الأمر في العملية الفرعية. تنتظر عملية sudo الرئيسية حتى يكتمل الأمر، ثم تقوم بتمرير حالة الخروج الخاصة بالأمر إلى وظيفة الإغلاق الخاصة بسياسة الأمان، بالإضافة إلى وظيفة الإغلاق الخاصة بأي مكونات إضافية للتنقيح تم تكوينها، ثم تخرج. في حالة خاصة، إذا لم تحدد سياسة المكون الإضافي وظيفة إغلاق، فسيقوم sudo بتنفيذ الأمر مباشرةً بدلاً من استدعاء fork(2) أولاً. ستقوم سياسة sudoers بتحديد وظيفة إغلاق فقط عندما يتم تمكين تسجيل إدخال/إخراج الجهاز الطرفي، أو يلزم وجود pty، أو يتم تحديد دور SELinux، أو يحتوي الأمر على مهلة زمنية مرتبطة به، أو يتم تمكين خياري pam_session أو pam_setcred. يتم تمكين كل من pam_session و pam_setcred افتراضيًا على الأنظمة التي تستخدم PAM. هذا هو الوضع الافتراضي لإصدارات sudo السابقة للإصدار 1.9.14 عند استخدام سياسة sudoers.
في الأنظمة التي تستخدم PAM، تكون دالة الإغلاق الخاصة بسياسة الأمان مسؤولة عن إغلاق جلسة PAM. قد تقوم أيضًا بتسجيل حالة خروج الأمر.
معالجة الإشارات
عند تشغيل الأمر كعملية فرعية لعملية sudo، ستقوم sudo بإعادة توجيه الإشارات التي تتلقاها إلى الأمر. يتم إعادة توجيه إشارتي SIGINT و SIGQUIT فقط عندما يتم تشغيل الأمر في pty جديدة أو عندما تم إرسال الإشارة بواسطة عملية مستخدم، وليس النواة. هذا يمنع الأمر من تلقي SIGINT مرتين في كل مرة يضغط فيها المستخدم على Ctrl+C. لا يمكن اعتراض بعض الإشارات، مثل SIGSTOP و SIGKILL، وبالتالي لن يتم إعادة توجيهها إلى الأمر. كقاعدة عامة، يجب استخدام SIGTSTP بدلاً من SIGSTOP عندما تريد تعليق أمر يتم تشغيله بواسطة sudo.
في حالة خاصة، لن تقوم sudo بإعادة توجيه الإشارات التي تم إرسالها بواسطة الأمر الذي تقوم بتشغيله. هذا يمنع الأمر من قتل نفسه عن طريق الخطأ. في بعض الأنظمة، ترسل أداة reboot(8) إشارة SIGTERM إلى جميع العمليات غير النظامية باستثناء نفسها قبل إعادة تشغيل النظام. هذا يمنع sudo من إعادة توجيه إشارة SIGTERM التي تلقاها مرة أخرى إلى reboot(8)، والتي قد تخرج بعد ذلك قبل إعادة تشغيل النظام بالفعل، مما يترك النظام في حالة "ميتة" جزئيًا مشابهة لوضع المستخدم الواحد. لاحظ، مع ذلك، أن هذا الفحص ينطبق فقط على الأمر الذي يتم تشغيله بواسطة sudo وليس على أي عمليات أخرى قد ينشئها الأمر. نتيجة لذلك، قد يؤدي تشغيل برنامج نصي يستدعي reboot(8) أو shutdown(8) عبر sudo إلى ترك النظام في هذه الحالة غير المحددة ما لم يتم تشغيل reboot(8) أو shutdown(8) باستخدام عائلة دوال exec() بدلاً من system() (التي تضع shell بين الأمر والعملية التي تستدعي).
المكونات الإضافية
يمكن تحديد المكونات الإضافية عبر توجيهات Plugin في ملف sudo.conf(5). يمكن تحميلها كمكتبات مشتركة ديناميكية (في الأنظمة التي تدعمها)، أو يمكن تجميعها مباشرة في ملف sudo التنفيذي. إذا لم يكن هناك ملف sudo.conf(5) موجود، أو إذا لم يحتوي على أي أسطر Plugin، فستستخدم sudo ملف sudoers(5) للمكونات الإضافية الخاصة بالسياسة والتدقيق وتسجيل الإدخال/الإخراج. راجع الدليل sudo.conf(5) للحصول على تفاصيل حول ملف /etc/sudo.conf والدليل sudo_plugin(5) للحصول على مزيد من المعلومات حول بنية مكونات sudo الإضافية.
قيمة الخروج
عند التنفيذ الناجح للأمر، ستكون قيمة الخروج من sudo هي قيمة الخروج للبرنامج الذي تم تنفيذه. إذا انتهى الأمر بسبب تلقي إشارة، فسترسل sudo نفس الإشارة إلى نفسها التي أنهت الأمر.
إذا تم تحديد الخيار -l بدون أمر، فسيخرج sudo بقيمة 0 إذا كان المستخدم مسموحًا له بتشغيل sudo وقد قام بالمصادقة بنجاح (كما هو مطلوب بواسطة سياسة الأمان). إذا تم تحديد أمر باستخدام الخيار -l، فستكون قيمة الخروج 0 فقط إذا كان الأمر مسموحًا به بواسطة سياسة الأمان، وإلا فستكون 1.
إذا كان هناك فشل في المصادقة، أو مشكلة في التكوين/الأذونات، أو إذا تعذر تنفيذ الأمر المحدد، فسوف يخرج sudo بقيمة 1. في الحالة الأخيرة، تتم طباعة سلسلة الخطأ إلى الخطأ القياسي. إذا لم يتمكن sudo من تنفيذ الأمر [stat]({filename}../../stat)(2) لواحد أو أكثر من الإدخالات في مسار المستخدم، فسيتم طباعة خطأ إلى الخطأ القياسي. (إذا كان الدليل غير موجود أو إذا لم يكن في الواقع دليلًا، فسيتم تجاهل الإدخال ولن تتم طباعة أي خطأ). لا ينبغي أن يحدث هذا في الظروف العادية. السبب الأكثر شيوعًا لـ [stat]({filename}../../stat)(2) لإرجاع "تم رفض الإذن" هو إذا كنت تقوم بتشغيل مُجمِّع تلقائي وكان أحد الأدلة في مسارك على جهاز غير متصل حاليًا.
ملاحظات أمنية
يحاول sudo أن يكون آمنًا عند تنفيذ أوامر خارجية.
لمنع تزوير الأوامر، يتحقق sudo من "." و "" (كلاهما يشيران إلى الدليل الحالي) أخيرًا عند البحث عن أمر في مسار المستخدم (إذا كان أحدهما أو كلاهما موجودين في المسار). اعتمادًا على سياسة الأمان، يمكن تعديل متغير بيئة المستخدم PATH، أو استبداله، أو تمريره دون تغيير إلى البرنامج الذي ينفذه sudo.
يجب ألا يُمنح المستخدمون أبدًا امتيازات sudo لتنفيذ ملفات يمكن للمستخدم الكتابة فيها أو التي تقع في دليل يمكن للمستخدم الكتابة فيه. إذا كان بإمكان المستخدم تعديل أو استبدال الأمر، فلا توجد طريقة للحد من الأوامر الإضافية التي يمكنه تشغيلها.
افتراضيًا، سيسجل sudo فقط الأمر الذي يقوم بتنفيذه بشكل صريح. إذا قام المستخدم بتشغيل أمر مثل sudo su أو sudo sh، فلن تخضع الأوامر اللاحقة التي يتم تشغيلها من هذا الصدفة لسياسة أمان sudo. وينطبق الشيء نفسه على الأوامر التي توفر وسائل للخروج من الصدفة (بما في ذلك معظم المحررين). إذا تم تمكين تسجيل الإدخال/الإخراج، فسيتم تسجيل إدخال و/أو إخراج الأوامر اللاحقة، ولكن لن تكون هناك سجلات تقليدية لهذه الأوامر. لهذا السبب، يجب توخي الحذر عند منح المستخدمين حق الوصول إلى الأوامر عبر sudo للتحقق من أن الأمر لا يمنح المستخدم عن غير قصد وصولاً فعالاً إلى جذر. للحصول على معلومات حول طرق لمعالجة هذا، راجع قسم "منع الخروج من الصدفة" في sudoers(5).
لمنع الكشف عن معلومات حساسة محتملة، يعطّل sudo افتراضيًا عمليات التفريغ الأساسية أثناء تنفيذه (يتم إعادة تمكينها للأمر الذي يتم تشغيله). يعود هذا الممارسة التاريخية إلى وقت كانت فيه معظم أنظمة التشغيل تسمح بعمليات مجموعة المستخدم بتفريغ النواة افتراضيًا. للمساعدة في تصحيح أعطال sudo، قد ترغب في إعادة تمكين عمليات التفريغ الأساسية عن طريق تعيين "disable_coredump" على "false" في ملف sudo.conf(5) كما يلي:
اضبط disable_coredump على false
راجع دليل sudo.conf(5) للحصول على مزيد من المعلومات.
البيئة
يستخدم sudo متغيرات البيئة التالية. يتحكم مبدأ الأمان في المحتوى الفعلي لبيئة الأمر.
EDITOR المحرر الافتراضي المستخدم في وضع -e (sudoedit) إذا لم يتم تعيين SUDO_EDITOR أو VISUAL.
MAIL يتم تعيينه إلى ملف البريد الخاص بالمستخدم الهدف عند تحديد الخيار -i أو عند تمكين env_reset في ملف sudoers (إلا إذا كان MAIL موجودًا في قائمة env_keep).
HOME يتم تعيينه إلى الدليل الرئيسي للمستخدم الهدف عند تحديد الخيارات -i أو -H، أو عند تحديد الخيار -s وتم تعيين set_home في ملف sudoers، أو عند تمكين always_set_home في ملف sudoers، أو عند تمكين env_reset في ملف sudoers ولا يكون HOME موجودًا في قائمة env_keep.
LOGNAME يتم تعيينه إلى اسم تسجيل الدخول الخاص بالمستخدم الهدف عند تحديد الخيار -i، أو عند تمكين الخيار set_logname في ملف sudoers، أو عند تمكين الخيار env_reset في ملف sudoers (إلا إذا كان LOGNAME موجودًا في قائمة env_keep).
PATH قد يتم تجاوزه بواسطة مبدأ الأمان.
SHELL يستخدم لتحديد shell الذي سيتم تشغيله باستخدام الخيار -s.
SUDO_ASKPASS يحدد مسار برنامج مساعد يستخدم لقراءة كلمة المرور إذا لم يكن هناك طرفية متاحة أو إذا تم تحديد الخيار -A.
SUDO_COMMAND يتم تعيينه إلى الأمر الذي يتم تشغيله بواسطة sudo، بما في ذلك أي وسائط. يتم اقتطاع الوسائط عند 4096 حرفًا لمنع خطأ تنفيذي محتمل.
SUDO_EDITOR المحرر الافتراضي المستخدم في وضع -e (sudoedit).
SUDO_GID يتم تعيينه إلى معرف المجموعة للمستخدم الذي قام باستدعاء sudo.
SUDO_HOME يتم تعيينه إلى الدليل الرئيسي للمستخدم الذي قام باستدعاء sudo.
SUDO_PROMPT يستخدم كمطالبة كلمة المرور الافتراضية ما لم يتم تحديد الخيار -p.
SUDO_PS1 إذا تم تعيينه، فسيتم تعيين PS1 إلى قيمته للبرنامج الذي يتم تشغيله.
SUDO_TTY يتم تعيينه إلى جهاز الطرفية الخاص بالمستخدم الذي قام باستدعاء sudo، إذا كان موجودًا.
SUDO_UID يتم تعيينه إلى معرف المستخدم للمستخدم الذي قام باستدعاء sudo.
SUDO_USER يتم تعيينه إلى اسم تسجيل الدخول الخاص بالمستخدم الذي قام باستدعاء sudo.
USER يتم تعيينه إلى نفس قيمة LOGNAME، كما هو موضح أعلاه.
VISUAL المحرر الافتراضي المستخدم في وضع -e (sudoedit) إذا لم يتم تعيين SUDO_EDITOR.
الملفات
/etc/sudo.conf تكوين الواجهة الأمامية لـ sudo
أمثلة
تفترض الأمثلة التالية وجود مبدأ أمان مُعد بشكل صحيح.
لعرض قائمة بملفات دليل لا يمكن قراءته:
$ sudo ls /usr/local/protected
لعرض الدليل الرئيسي للمستخدم yaz على جهاز حيث لا يتم تصدير نظام الملفات الذي يحتوي على \~yaz كـ root:
$ sudo -u yaz ls ~yaz
لتحرير ملف index.html كمستخدم www:
$ sudoedit -u www ~www/htdocs/index.html
لعرض سجلات النظام التي لا يمكن الوصول إليها إلا بواسطة المستخدم root والمستخدمين في مجموعة adm:
$ sudo -g adm more /var/log/syslog
لتشغيل محرر كمستخدم "jim" مع مجموعة أساسية مختلفة:
$ sudoedit -u jim -g audio ~jim/sound.txt
لإيقاف تشغيل الجهاز:
$ sudo shutdown -r +15 "إعادة تشغيل سريعة"
لإنشاء قائمة استخدام للمجلدات في قسم /home. يتم تشغيل الأوامر في صُدفة فرعية للسماح لـ "cd" بالعمل وتوجيه الإخراج إلى ملف.
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
رسائل الخطأ
رسائل الخطأ التي ينتجها sudo تشمل:
تحرير الملفات في دليل قابل للكتابة غير مسموح به
بشكل افتراضي، لا يسمح sudoedit بتحرير ملف عندما يكون أي من الدلائل الأصلية قابلاً للكتابة بواسطة المستخدم الذي يقوم بتشغيل الأمر. هذا يتجنب حالة سباق قد تسمح للمستخدم بالكتابة فوق أي ملف. انظر خيار sudoedit_checkdir في sudoers(5) لمزيد من المعلومات.
تحرير الروابط الرمزية غير مسموح به
بشكل افتراضي، لا يتبع sudoedit الروابط الرمزية عند فتح الملفات. انظر خيار sudoedit_follow في sudoers(5) لمزيد من المعلومات.
معرف المستخدم الفعلي ليس 0، هل تم تثبيت sudo كملف ذي صلاحيات المستخدم الجذر؟
لم يتم تشغيل sudo بامتيازات المستخدم الجذر. يجب أن يكون للملف الثنائي sudo مالك هو المستخدم الجذر وأن يكون لديه بت تعيين هوية المستخدم. بالإضافة إلى ذلك، يجب ألا يكون موجودًا على نظام ملفات مثبت بخيار "nosuid" أو على نظام ملفات NFS يقوم بتعيين معرف المستخدم 0 إلى معرف مستخدم غير مميز.
معرف المستخدم الفعلي ليس 0، هل يوجد sudo على نظام ملفات تم تعيين خيار "nosuid" له أو نظام ملفات NFS بدون امتيازات المستخدم الجذر؟
لم يتم تشغيل sudo بامتيازات المستخدم الجذر. يحتوي الملف الثنائي sudo على المالك والأذونات الصحيحة ولكنه لا يزال لم يتم تشغيله بامتيازات المستخدم الجذر. السبب الأكثر شيوعًا لذلك هو أن نظام الملفات الذي يوجد عليه الملف الثنائي sudo مثبت بخيار "nosuid" أو أنه نظام ملفات NFS يقوم بتعيين معرف المستخدم 0 إلى معرف مستخدم غير مميز.
خطأ فادح، تعذر تحميل المكونات الإضافية
حدث خطأ أثناء تحميل أو تهيئة المكونات الإضافية المحددة في sudo.conf(5).
اسم متغير بيئة غير صالح
يحتوي اسم متغير بيئة واحد أو أكثر محدد عبر الخيار -E على علامة يساوي ('='). يجب أن تكون الوسيطات للخيار -E أسماء متغيرات بيئة بدون قيمة مرتبطة بها.
لم يتم توفير كلمة مرور
عندما حاول sudo قراءة كلمة المرور، لم يتلق أي أحرف. قد يحدث هذا إذا لم يكن هناك جهاز طرفي متاح (أو تم تحديد الخيار -S) وتمت إعادة توجيه الإدخال القياسي من /dev/null.
يلزم وجود جهاز طرفي لقراءة كلمة المرور
يحتاج sudo إلى قراءة كلمة المرور ولكن لا توجد آلية متاحة للقيام بذلك. لا تحتوي الأوامر البعيدة التي يتم تشغيلها عبر ssh(1) على جهاز طرفي افتراضيًا؛ يؤدي تمرير الخيار -t إلى ssh(1) إلى تخصيص جهاز طرفي يجب أن يسمح لـ sudo بقراءة كلمة المرور. للسماح لـ sudo بتشغيل الأوامر المحلية بدون جهاز طرفي، يمكن استخدام الخيار -S لقراءة كلمة مرور من الإدخال القياسي، أو يمكن تهيئة أداة مساعدة askpass عبر ملف sudo.conf(5) أو عن طريق تعيين متغير البيئة SUDO_ASKPASS.
لم يتم العثور على دليل مؤقت قابل للكتابة
لم يتمكن sudoedit من العثور على دليل مؤقت قابل للاستخدام لتخزين الملفات الوسيطة فيه.
تم تعيين العلامة "لا توجد امتيازات جديدة"، مما يمنع sudo من التشغيل كجذر.
تم تشغيل sudo بواسطة عملية تم تعيين علامة "لا توجد امتيازات جديدة" الخاصة بنظام Linux عليها. وهذا يتسبب في تجاهل بت تعيين المستخدم عند تشغيل ملف قابل للتنفيذ، مما يمنع sudo من العمل. السبب الأكثر ترجيحًا هو تشغيل sudo داخل حاوية تقوم بتعيين هذه العلامة. تحقق من الوثائق لمعرفة ما إذا كان من الممكن تكوين الحاوية بحيث لا يتم تعيين العلامة.
يجب أن يكون sudo مملوكًا لمعرف المستخدم 0 وأن يكون لديه بت تعيين المستخدم.
لم يتم تشغيل sudo بامتيازات المستخدم الجذر. لا يمتلك ملف sudo الثنائي المالك أو الأذونات الصحيحة. يجب أن يكون مملوكًا لمستخدم الجذر وأن يكون لديه بت تعيين المستخدم.
لا يتم دعم sudoedit على هذه المنصة
من الممكن فقط تشغيل sudoedit على الأنظمة التي تدعم تعيين معرف المستخدم الفعال.
انتهى وقت قراءة كلمة المرور
لم يدخل المستخدم كلمة المرور قبل انتهاء المهلة المحددة لكلمة المرور (5 دقائق افتراضيًا).
أنت لا تظهر في قاعدة بيانات المستخدمين
لا يظهر معرف المستخدم الخاص بك في قاعدة بيانات المستخدمين الخاصة بالنظام.
قد لا تحدد متغيرات البيئة في وضع التحرير
من الممكن فقط تحديد متغيرات البيئة عند تشغيل أمر. عند تحرير ملف، يتم تشغيل المحرر مع بيئة المستخدم دون تغيير.
انظر أيضًا
su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)
التاريخ
راجع ملف HISTORY.md في توزيعة sudo (https://www.sudo.ws/about/history/) للحصول على تاريخ موجز لـ sudo.
المؤلفون
لقد عمل العديد من الأشخاص على sudo على مر السنين؛ يتكون هذا الإصدار من التعليمات البرمجية التي كتبها في الغالب:
تود سي. ميلر
راجع ملف CONTRIBUTORS.md في توزيعة sudo (https://www.sudo.ws/about/contributors/) للحصول على قائمة شاملة بالأشخاص الذين ساهموا في sudo.
التحذيرات
لا توجد طريقة سهلة لمنع المستخدم من الحصول على shell المستخدم الجذر إذا كان يُسمح لهذا المستخدم بتشغيل أوامر عشوائية عبر sudo. أيضًا، تسمح العديد من البرامج (مثل المحررين) للمستخدم بتشغيل أوامر عبر عمليات الهروب من shell، وبالتالي تجنب فحوصات sudo. ومع ذلك، في معظم الأنظمة، من الممكن منع عمليات الهروب من shell باستخدام وظيفة noexec الخاصة بـ sudoers(5).
لا معنى لتشغيل الأمر "cd" مباشرةً عبر sudo، على سبيل المثال:
$ sudo cd /usr/local/protected
لأن عند انتهاء الأمر، ستظل العملية الأصلية (shell الخاص بك) هي نفسها. يمكن استخدام الخيار "-D" لتشغيل أمر في دليل معين.
يمكن أن يؤدي تشغيل البرامج النصية shell عبر sudo إلى نفس الأخطاء في النواة التي تجعل البرامج النصية shell التي تم تعيين معرف المستخدم لها غير آمنة على بعض أنظمة التشغيل (إذا كان نظام التشغيل الخاص بك يحتوي على دليل /dev/fd/، فإن البرامج النصية shell التي تم تعيين معرف المستخدم لها آمنة بشكل عام).
الأخطاء
إذا كنت تعتقد أنك وجدت خطأ في برنامج sudo، فيمكنك إما تقديم تقرير عن الخطأ في قاعدة بيانات أخطاء sudo، وهي https://bugzilla.sudo.ws/، أو فتح مشكلة على https://github.com/sudo-project/sudo/issues. إذا كنت تفضل استخدام البريد الإلكتروني، فيمكن إرسال الرسائل إلى قائمة بريدية sudo-workers، وهي https://www.sudo.ws/mailman/listinfo/sudo-workers (عامة) أو <_> (خاصة).
يرجى عدم الإبلاغ عن الثغرات الأمنية من خلال مشكلات GitHub أو Bugzilla أو القوائم البريدية العامة. بدلاً من ذلك، أبلغ عنها عبر البريد الإلكتروني إلى <_>. يمكنك تشفير رسالتك باستخدام PGP إذا أردت، باستخدام المفتاح الموجود على https://www.sudo.ws/dist/PGPKEYS.
الدعم
يتوفر دعم مجاني محدود عبر القائمة البريدية sudo-users، راجع https://www.sudo.ws/mailman/listinfo/sudo-users للاشتراك أو البحث في الأرشيفات.
إخلاء المسؤولية
يتم توفير برنامج sudo "كما هو" ويتم رفض أي ضمانات صريحة أو ضمنية، بما في ذلك، على سبيل المثال لا الحصر، الضمانات الضمنية المتعلقة بالتسويق والملاءمة لغرض معين. انظر ملف LICENSE.md الموزع مع برنامج sudo أو https://www.sudo.ws/about/license/ للحصول على التفاصيل الكاملة.