วิธีการตั้งค่ารหัสผ่าน `sudo 'บน Linux ได้อย่างไร


156

การsudoเข้าถึงแบบไม่ใช้รหัสผ่านสามารถตั้งค่าบน RHEL (Fedora, CentOS, ฯลฯ ) หรือ Ubuntu ได้อย่างไร? (ถ้าเป็นแบบเดียวกันกับ distros ก็จะดีกว่า!)

การตั้งค่า: อุปกรณ์ส่วนบุคคลและ / หรือห้องปฏิบัติการ / ฝึกอบรมโดยไม่ต้องกังวลกับการเข้าถึงที่ไม่ได้รับอนุญาต (เช่นอุปกรณ์นั้นอยู่ในเครือข่ายที่ไม่ใช่สาธารณะและ / / ผู้ใช้ทุกคนมีความน่าเชื่อถืออย่างเต็มที่และเนื้อหาของอุปกรณ์นั้นคือ "วานิลลาธรรมดา") .


1
คำตอบจาก @Richipal เป็นคนที่ทำงานได้ดีที่สุดโดยใช้ความพยายามน้อยที่สุด: ดูเหมือนว่ากฎ sudoers จะใช้ในลำดับที่กลับกัน
a1an

2
@ a1an กฎจะถูกนำไปใช้ในลำดับเดียวกันกับที่ระบุไว้ในไฟล์ sudoers และเมื่อนำไปใช้กฎเหล่านั้นจะถูกแทนที่ด้วยกัน ดังนั้นหากฉันไม่ต้องการให้กฎเปลี่ยนแปลงเลยฉันจะวางไว้ที่ส่วนท้ายของไฟล์เพื่อให้มีการนำไปใช้ในที่สุดและไม่สามารถเขียนทับได้
rsjethani

คำตอบ:


173

แก้ไขขอบคุณความคิดเห็นของเมดินา: ตามหน้า man คุณควรจะสามารถเขียนได้

ALL            ALL = (ALL) NOPASSWD: ALL

เพื่อให้ผู้ใช้ทุกคนสามารถรันคำสั่งทั้งหมดโดยไม่ต้องใช้รหัสผ่าน


สำหรับการอ้างอิงฉันออกจากคำตอบก่อนหน้าของฉัน:

หากคุณเพิ่มบรรทัดของแบบฟอร์ม

%wheel         ALL = (ALL) NOPASSWD: ALL

ถึง/etc/sudoers(โดยใช้visudoคำสั่งแน่นอน) มันจะทำให้ทุกคนในกลุ่มสามารถwheelรันคำสั่งใด ๆ โดยไม่ต้องใส่รหัสผ่าน ดังนั้นฉันคิดว่าทางออกที่ดีที่สุดคือการทำให้ผู้ใช้ทั้งหมดของคุณอยู่ในกลุ่มบางกลุ่มและใส่บรรทัดแบบนั้นsudoers- คุณควรแทนที่wheelกลุ่มที่คุณใช้จริง

หรือคุณสามารถกำหนดชื่อแทนผู้ใช้

User_Alias     EVERYONE = user1, user2, user3, ...

และใช้สิ่งนั้น:

EVERYONE       ALL = (ALL) NOPASSWD: ALL

แม้ว่าคุณจะต้องอัปเดต/etc/sudoersทุกครั้งที่คุณเพิ่มหรือลบผู้ใช้


2
ไม่ALLทำงานแทนที่จะ*ระบุผู้ใช้ทั้งหมดใช่ไหม sudoers(5)ดูตัวอย่างใน
medina

1
@medina: มันก็เป็นเช่นนั้นฉันพลาดไปเมื่อฉันอ่าน man page ฉันจะแก้ไข
David Z

6
ภายใต้ Ubuntu, สร้างไฟล์ภายใต้ /etc/sudoers.d และใส่รายการเหล่านี้ลงไปจากนั้นมันจะหยุดคุณไม่ต้องแก้ไข sudoers
Xetius

1
ใน CentOS7 รายการนี้จะมีตามค่าเริ่มต้นเพียงแสดงความคิดเห็น
killjoy

1
มีการจัดการเพื่อใช้งานใน CentOS เท่านั้นโดยการคัดลอก / การวางล้มเหลวทุกครั้งที่พยายามพิมพ์การกำหนดค่าโดยตรง แต่ผลลัพธ์ดูเหมือนจะเหมือนกันยกเว้นเว้นวรรค ...
MUY เบลเยี่ยม

95

ฉันลองวิธีแก้ปัญหาข้างต้นแล้วก็ไม่มีประโยชน์ วิธีแก้ไขปัญหาต่อไปนี้ใช้งานได้สำหรับฉันแก้ไขไฟล์ / etc / sudoers และเพิ่มบรรทัดต่อไปนี้

username ALL=(ALL) NOPASSWD: ALL

ที่สำคัญคือการเพิ่มมันหลังจากที่บรรทัดสุดท้ายที่บอกว่า

#includedir /etc/sudoers.d

1
//, ดูเหมือนว่าวิธีที่ดีกว่าที่จะทำโดยเฉพาะอย่างยิ่งเมื่อบางแอปพลิเคชันจะเพิ่มกฎของตัวเองสำหรับผู้ใช้ระบบ Richipal ข้อมูลเพิ่มเติมเกี่ยวกับ sudoers.d: sudo.ws/man/1.8.13/sudoers.man.html
Nathan Basanese

1
//, คุณยินดีที่จะเพิ่มการวินิจฉัยบางอย่างจาก Gearoid Murphy ให้กับคำตอบของคุณหรือไม่?
Nathan Basanese

1
ขอบคุณสำหรับคำชี้แจงนี้ การเพิ่มหลังจากบรรทัด #includedir /etc/sudoers.d ดูเหมือนจะสำคัญใน CentOS 7 ในขณะที่ทำงานได้ดีเพื่อให้มีบรรทัดก่อนหน้านี้ในไฟล์ใน CentOS 6
dmohr

3
ปัญหาเกี่ยวกับการเพิกถอน NOPASSWD ของ% wheel ดูเหมือนว่าจะเกิดขึ้นจากการ/etc/sudoers.d/USERNAMEยกเลิกสิทธิ์ NOPASSWD ของกลุ่ม การใช้ NOPASSWD ในการ/etc/sudoers.d/USERNAMEแก้ไขปัญหา
ปลาไหล gEEEz

1
บิ๊กอัพสำหรับคนนี้หลังจากรวมเป็นสิ่งสำคัญ
ธีโอดอร์โฮเวล

27

ฉันลองคำตอบทั้งหมดในหน้านี้โดยไม่มีผลลัพธ์ที่เป็นประโยชน์ ในที่สุดฉันก็พบว่ามันใช้คำสั่งนี้เพื่อแสดงสิทธิ์ sudo ของคุณ:

sudo -l

สิ่งนี้จะให้ผลลัพธ์เช่นนี้:

User gmurphy may run the following commands on this host:
    (root) NOPASSWD: ALL
    (ALL) ALL

มันแสดงให้เห็นว่าฉันได้รับการกำหนดค่าด้วยสิทธิ์ของรูท แต่ฉันยังคงเป็นส่วนหนึ่งของกลุ่ม (ผู้ดูแลระบบ) ที่ตรงกับกฎ sudo ซึ่งคาดว่ารหัสผ่าน ("(ALL) ทั้งหมด") นี่เป็นการบังคับให้ sudo แจ้งฉัน กฎที่เป็นปัญหาคือผู้ใช้ที่เป็นผู้ดูแลระบบ:

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

เมื่อฉันแสดงความคิดเห็นนี้ฉันสามารถ sudo โดยไม่ต้องใช้รหัสผ่าน ฉันหวังว่านี่จะใช้กับคนอื่น


1
อ่าขอบคุณ! นี่คือสิ่งที่ทำให้ฉันบ้า ... ในกรณีของฉันผู้ใช้ของฉันเป็นส่วนหนึ่งของกลุ่ม "sudo" เช่นเดียวกับ "ผู้ดูแลระบบ" (ที่ฉันสร้างขึ้น) และการอนุญาตของแต่ละคนนั้นตรงกับที่ผิดพลาดเหมือนในกรณีของคุณ . ตอนนี้สิ่งนี้ใช้งานได้! :)
neezer

14
การแสดงความคิดเห็นสายออกเป็นเครื่องมือทื่อ คุณอาจสนใจที่จะได้ยินว่า "sudo อ่านไฟล์ sudoers และใช้การอนุญาตตามลำดับจากบนลงล่างดังนั้นบรรทัดสุดท้ายในไฟล์จะเขียนทับความขัดแย้งก่อนหน้านี้" ตามที่ubuntuforums.org/showthread.php?t=1132821 - - และสิ่งนี้ใช้ได้สำหรับฉัน
David J.

10

ภายใน/etc/sudoersตัวอย่างมีเพียงว่าไปทางด้านล่างของไฟล์:

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

2
ตัวอย่างนั้นไม่ได้อยู่ในของฉัน - แต่ขอบคุณ!
วอร์เรน

1
เช่นเดียวกับคำตอบสั้น ๆ ของคุณ
Mr. Pei

6

มีวิธีอื่นในการทำโดยไม่ต้องแตะไฟล์ sudoers

  • แก้ไข/etc/pam.d/suและยกเลิกหมายเหตุบรรทัดด้านล่าง:

    auth           sufficient      pam_wheel.so trust use_uid
    
  • เพิ่มผู้ใช้ไปยังwheelกลุ่ม


2

มีวิธีอื่นในการทำโดยไม่ต้องแตะไฟล์ sudoers

  • แก้ไข/etc/pam.d/sudoและเพิ่มบรรทัดด้านล่าง:

    รับรองความถูกต้อง pam_wheel.so เชื่อถือได้ use_uid
  • เพิ่มผู้ใช้ไปยังwheelกลุ่ม

อุปกรณ์ประกอบฉากเพื่อ "topdog" และ "Daniel Serodio" สำหรับคำตอบดั้งเดิมเกี่ยวกับ "su" มากกว่า "sudo" ฉันใช้มันเพื่อเป็นข้อมูลอ้างอิงและคัดลอกลงคอและแก้ไขโพสต์ของพวกเขา


1
ฉันคิดว่าแทนที่จะคัดลอกคำต่อคำมันจะดีกว่าที่จะให้เครดิตพวกเขา แต่ชัดเจนว่าคำตอบของคุณแตกต่างกันอย่างไร ฉันถือว่าสิ่งนี้อนุญาตให้ไม่มีรหัสผ่านsuแทนที่จะเป็น / เหมือนไม่มีรหัสผ่านsudoหรือไม่ การเพิ่มของ Daniel เป็นการจัดรูปแบบตามวิธี
mwfearnley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.