سؤال كيف يمكنني تشغيل أوامر sudo محددة بدون كلمة مرور؟


على جهاز معين ، غالباً ما أحتاج إلى الركض sudo الأوامر بين الحين والآخر. أنا بخير مع إدخال كلمة المرور على sudo في معظم الحالات.

ومع ذلك هناك ثلاثة sudo الأوامر أريد أن تشغيل دون إدخال كلمة المرور:

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

كيف يمكنني استبعاد هذه الأوامر من الحماية بكلمة مرور إلى sudo؟


188
2017-07-03 08:31


الأصل


مشابه ل كيف تسمح بالإعدام بدون استخدام sudo؟ - fouric


الأجوبة:


استخدم ال NOPASSWD توجيهات

يمكنك استخدام ال NOPASSWD التوجيه في حياتك /etc/sudoers ملف.

إذا تم استدعاء المستخدم الخاص بك user والمضيف الخاص بك يسمى host يمكنك إضافة هذه الخطوط إلى /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

هذا سيسمح للمستخدم user لتشغيل الأوامر المطلوبة على host دون إدخال كلمة مرور. جميع الآخرين sudoستظل أوامر ed تتطلب كلمة مرور.

الأوامر المحددة في sudoers ملف يجب أن يكون مؤهلاً تمامًا (أي باستخدام المسار المطلق إلى أمر التشغيل) كما هو موضح في sudoers صفحة رجل. يعتبر توفير مسار نسبي خطأ في بناء الجملة.

إذا كان الأمر ينتهي مع زائدة / حرف ويشير إلى دليل ، سيكون المستخدم قادرا على تشغيل أي أمر في هذا الدليل (ولكن ليس في أي أدلة فرعية في ذلك). في المثال التالي ، المستخدم user يمكن تشغيل أي أمر في الدليل /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

ملحوظة: دائما استخدام الأمر visudo لتحرير sudoers الملف للتأكد من أنك لا تحبس نفسك خارج النظام - فقط في حالة كتابة شيء غير صحيح بطريق الخطأ sudoers ملف. visudo سيحفظ الملف المعدل الخاص بك إلى موقع مؤقت وسوف فقط الكتابة الحقيقية sudoers إذا كان الملف المعدل يمكن تحليله بدون أخطاء.

عن طريق /etc/sudoers.d بدلا من تعديل /etc/sudoers

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

ملحوظة: مرة أخرى ، يجب عليك استخدام الأمر visudo لتحرير الملف للتأكد من عدم قفل نفسك خارج النظام:

sudo visudo -f /etc/sudoers.d/shutdown 

يضمن هذا أيضًا تلقائيًا تعيين مالك الملف الجديد وأذوناته بشكل صحيح.

إذا sudoers هو افسدت

إذا كنت لا تستخدم visudo لتحرير الملفات الخاصة بك ثم افسدت عن طريق الخطأ /etc/sudoers أو افسدت ملف في /etc/sudoers.d عندها سوف يتم إقفالها sudo.

قد يكون الحل هو إصلاح الملفات باستخدام pkexec وهو بديل ل sudo.

لإصلاح /etc/sudoers:

pkexec visudo

لإصلاح /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

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

يجب أن تكون الأذونات الصحيحة كما يلي:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

استعمال pkexec مثل هذا لإصلاح الملكية والأذونات:

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

253
2017-07-03 08:43



آمل أن ينطبق هذا فقط على هذين الأمرين ، وأنا لن العبث مع بقية النظام أو أي قيادة أخرى؟ - Z9iT
يشير الخطان تحديدًا إلى هذين الأمرين. إذا user ليس بطرق أخرى sudo حقوق لا يمكن sudoed أي أوامر أخرى من قبل هذا المستخدم. القي نظرة على man sudo و man sudoers. - mgd
في البداية واجهت مشكلة chmod .. أضافت تمرينًا لهذا في الإجابة .. thanxmgd - Z9iT
StanKurdziel لقد حاولت مع هذا الخط على نظام التشغيل Mac OS X Yosemite وعملت بشكل جيد: mgd ALL=(root) NOPASSWD: /var/root/test. أنا مستخدم mgd و ALL يعني "من جميع المضيفين". /var/root/test هو برنامج نصي shell "Hello World" بسيط مع أذونات: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. أنا صنعت لا تغييرات أخرى على النظام. - mgd
Michael يرجى قراءة صفحة الرجل. هو مكتوب كل شيء هناك. اقتباس: ومع ذلك ، يمكنك أيضاً تحديد وسائط سطر الأوامر (بما في ذلك أحرف البدل). بدلاً من ذلك ، يمكنك تحديد "" للإشارة إلى أنه قد يتم تشغيل الأمر فقط بدون وسائط سطر الأوامر. - mgd