ฉันจะรันคำสั่ง sudo เฉพาะโดยไม่มีรหัสผ่านได้อย่างไร


211

ในเครื่องหนึ่งฉันมักจะต้องใช้sudoคำสั่งทุกครั้งแล้ว ฉันสบายดีกับการป้อนรหัสผ่านsudoในกรณีส่วนใหญ่

อย่างไรก็ตามมีสามsudoคำสั่งที่ฉันต้องการเรียกใช้โดยไม่ต้องป้อนรหัสผ่าน :

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

ฉันจะยกเว้นคำสั่งเหล่านี้จากการป้องกันด้วยรหัสผ่านได้sudoอย่างไร


คำตอบ:


283

ใช้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ไม่ให้เข้า

การแก้ปัญหาอาจจะมีการแก้ไขไฟล์โดยใช้ซึ่งเป็นทางเลือกในการpkexecsudo

วิธีแก้ไข/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

2
ทั้งสองบรรทัดอ้างถึงคำสั่งสองคำสั่งเหล่านี้โดยเฉพาะ หากuserไม่ได้อยู่ในวิธีการอื่นที่ให้sudoสิทธิ์ผู้ใช้นี้จะไม่สามารถใช้คำสั่งอื่นใดได้ มีลักษณะที่และman sudo man sudoers
mgd

4
@StanKurdziel ฉันพยายามกับบรรทัดนี้บน Mac OS X Yosemite mgd ALL=(root) NOPASSWD: /var/root/testและการทำงานดี: ผมใช้mgdและALLวิธีการ"จากครอบครัวทุกคน" /var/root/testเป็นเรื่องง่าย "Hello World" -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/testเชลล์สคริปต์ด้วยสิทธิ์: ฉันไม่ทำการเปลี่ยนแปลงอื่น ๆ กับระบบ
mgd

2
คืออะไรhostใน sudoers ไฟล์?
user106563

1
มันไม่ใช่คำตอบมันเป็นคู่มือฉบับเต็มเกือบเกี่ยวกับคำสั่ง NOPASSWD ขอขอบคุณ.
Eray

1
@Michael โปรดอ่าน man page มันเขียนไว้ที่นั่นทั้งหมด หากต้องการอ้างถึง: อย่างไรก็ตามคุณอาจระบุอาร์กิวเมนต์บรรทัดคำสั่ง (รวมถึงอักขระตัวแทน) อีกวิธีหนึ่งคุณสามารถระบุ "" เพื่อระบุว่าคำสั่งอาจทำงานได้โดยไม่มีอาร์กิวเมนต์บรรทัดคำสั่งเท่านั้น
mgd

3

ขออภัยที่มีความสับสนมากเกี่ยวกับเรื่องนี้และคำตอบที่ซับซ้อนบางอย่างที่ฉันรู้สึกว่าฉันต้องชั่งน้ำหนักที่นี่ก่อนที่จะมีคนเข้าใจผิดและทำอะไรที่บ้า

ใช้ visudo !!

เพิ่มบรรทัดต่อไปนี้ในการกำหนดค่า:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

สิ่งนี้อนุญาตให้คำสั่งรีบูตและปิดด้วยพารามิเตอร์ใด ๆ ที่จะถูกเรียกใช้จากผู้ใช้ใด ๆ

กรุณาสลับแลกเปลี่ยนเพียงให้คำตอบสั้น ๆ ง่ายๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.