ไฟล์ Sudoers เปิดใช้งาน NOPASSWD สำหรับผู้ใช้ทุกคำสั่ง


142

คำนำ

นี่เป็นคำถามที่ค่อนข้างซับซ้อนที่เกี่ยวข้องกับไฟล์ Sudoers และคำสั่ง sudo โดยทั่วไป

หมายเหตุ: ฉันได้ทำการเปลี่ยนแปลงเหล่านี้บนเครื่องเฉพาะที่ใช้ Ubuntu Desktop 13.04 ซึ่งฉันใช้เพื่อวัตถุประสงค์ในการเรียนรู้เท่านั้น ฉันเข้าใจว่าเป็นความเสี่ยงด้านความปลอดภัยขนาดใหญ่ที่จะเปิดใช้งาน sudo NOPASSWD

คำถาม

เริ่มแรกการเปลี่ยนเฉพาะไฟล์ sudoers (/ etc / sudoers) ของฉันคือหนึ่งบรรทัดข้อมูลจำเพาะผู้ใช้ที่ควรเปิดใช้งาน 'nicholsonjf' เพื่อเรียกใช้คำสั่งทั้งหมดด้วย sudo โดยไม่ต้องป้อนรหัสผ่าน (ดูบรรทัดที่ขึ้นต้นด้วย 'nicholsonjf '):

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

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

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

อย่างไรก็ตามนี่ใช้งานไม่ได้และฉันก็ยังได้รับรหัสผ่านของฉันทุกครั้งที่ฉันรันคำสั่งในชื่อ 'nicholsonjf' ฉันสามารถเริ่มต้นใช้งานคำสั่ง sudo เป็น 'nicholsonjf' เมื่อฉันลบ 'nicholsonjf' ออกจากกลุ่ม sudo และ admin เท่านั้น

ใครสามารถอธิบายได้ว่าทำไมสิ่งนี้ถึงได้ผล

เป็นเพราะผู้ใช้ 'nicholsonjf' ได้รับสิทธิ์ sudo จากข้อกำหนดกลุ่มสองกลุ่มของ 'admin' และ 'sudo' (ดูด้านล่างในไฟล์ sudoers) ซึ่งมีการแทนที่ข้อมูลจำเพาะของผู้ใช้ 'nicholsonjf' เพราะพวกเขายังอยู่ใน ไฟล์ config หรือไม่


7
หมายเหตุ: ALL = NOPASSWD: ALL ต้องเป็น ALL = (ALL) NOPASSWD: ทั้งหมดไม่อย่างนั้นจะใช้งานไม่ได้ ...
André Verwijs

ดูเพิ่มเติมที่คำตอบนี้: askubuntu.com/questions/139723/sudo-does-not-ask-for-password/ ......
JB

คำตอบ:


164

บรรทัดที่คุณเพิ่มถูกเขียนทับ จากman sudoers:

เมื่อมีหลายรายการที่ตรงกับผู้ใช้รายการเหล่านั้นจะถูกนำไปใช้ตามลำดับ ในกรณีที่มีการแข่งขันหลายนัดการแข่งขันครั้งสุดท้ายจะใช้ (ซึ่งไม่จำเป็นต้องตรงกับที่เฉพาะเจาะจงมากที่สุด)

ในกรณีของคุณnicholsonjfเป็นสมาชิกของกลุ่มsudoดังนั้นสำหรับเขาบรรทัดนี้ใช้:

%sudo   ALL=(ALL:ALL) ALL

หากคุณต้องการแทนที่รายการ/etc/sudoersเพียงใส่รายการใหม่หลังจากนั้น

รายการใหม่ควรมีลักษณะเหมือน

myuser ALL=(ALL) NOPASSWD: ALL สำหรับผู้ใช้คนเดียวหรือ

%sudo ALL=(ALL) NOPASSWD: ALL สำหรับกลุ่ม


6
สำหรับโซลูชั่นที่สมบูรณ์ผมอยากจะเห็นอะไรบางอย่างเกี่ยวกับNOPASSWDในคำตอบนี้ ...
แดเนียล Alder

22
ฉันคิดว่าวิธีแก้ปัญหาควรเป็น:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder

3
@DanielAlder: บรรทัดข้อกำหนดจากคำถามnicholsonjf ALL=NOPASSWD: ALLนั้นถูกต้อง มันผิดที่ฉันอธิบายไว้ในคำตอบ ------ สRunasเปค - ในกรณีของคุณ(ALL)- เป็นทางเลือก ถ้าคุณไม่ใช้สเปคที่คุณสามารถเรียกใช้คำสั่งเป็นrootและคุณไม่สามารถใช้-uและตัวเลือกของ-g sudo
pabouk

นี่เป็นความเสี่ยงด้านความปลอดภัยที่แย่ลงเนื่องจากให้สิทธิ์การเข้าถึงโดยไม่ต้องใช้รหัสผ่านแก่ผู้ใช้หลายคน หากเป็นพีซีส่วนตัวของคุณนั่นอาจไม่สำคัญ ฉันจะย้ายสายส่วนบุคคลไปยังหน้าล่าสุด
Mark Williams

4
นอกจากนี้แทนที่จะแก้ไขหากใช้สิ่งที่ debian / ubuntu based (อาจใช้โดยทั่วไปไม่เห็นที่อื่น) เดิมพันที่ดีที่สุดของคุณคือการเพิ่มคำสั่งที่กำหนดเองไปยังไฟล์ใน /etc/sudoers.d/ และออกจาก sudoers ตัวเองจะได้รับการจัดการโดยผู้จัดการแพคเกจ
Aquarion

119

สำหรับผู้ใช้คนเดียวให้เพิ่มบรรทัดนี้ที่ท้ายsudoersไฟล์โดยใช้sudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

สำหรับกลุ่ม

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
ก่อนที่ฉันจะอ่านคำตอบนี้ฉันทำ%sudo ALL=NOPASSWD: ALLและใช้งานได้ ฉันเป็นคนเดียวที่พบว่า Extended Backus-Naur Form เข้าใจยากจริงๆหรือ
Vince

4
@Vince เมื่อใช้คำสั่งของคุณฉันไม่สามารถsudoไม่มีรหัสผ่านในฐานะผู้ใช้โดยไม่มีสิทธิ์ sudo เช่นsudo -u root -iทำงานได้ แต่sudo -u git -iไม่ได้
NeverEndingQueue

นี่เป็นคำตอบที่มีประโยชน์มากกว่าคำตอบที่ยอมรับซึ่งแม้ว่าจะตอบคำถามของ OP ได้ แต่อาจไม่ใช่สิ่งที่คนส่วนใหญ่เข้าถึงหน้านี้ผ่านทาง Google ที่ต้องการ
Mahmoud Al-Qudsi

3

ไม่ให้ผู้ใช้ปัจจุบันใส่รหัสผ่านเมื่อผู้ใช้sudoนั้นใช้

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

สิ่งนี้จะสร้างไฟล์ชื่อ/etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordและจะหมายความว่าผู้ใช้ที่คุณรันคำสั่งนั้นจะไม่ได้รับพร้อมท์ให้ใส่รหัสผ่านเมื่อดำเนินการsudoคำสั่ง คุณจะยังคงได้รับแจ้งให้ใส่รหัสผ่านในบริบทอื่น ๆ เช่นการติดตั้งเนื้อหาจากแอพกราฟิกของUbuntu Software

ข้อดีของการทำแบบนี้มากกว่าการเพิ่มบรรทัดในechoคำสั่งเพื่อ/etc/sudoersใช้sudo visudo(ตามคำแนะนำของคำตอบอื่น ๆ ) คือ

  1. /etc/sudoersบางครั้งมีการแก้ไขโดยการอัปเดตระบบในขณะที่ไฟล์/etc/sudoers.dนั้นไม่ใช่
  2. sudo visudoวิธีการมีแนวโน้มที่จะเกิดข้อผิดพลาด (เป็นหลักฐานโดยคำถามนี้มาก) ในขณะที่คัดลอก / วางคำสั่งจะยากมากที่จะเลอะ

ตามsudo cat /etc/sudoers.d/READMEคุณสมบัตินี้ (ของการใส่ไฟล์ sudoer พิเศษใน/etc/sudoers.d) ได้รับการเปิดใช้งานโดยค่าเริ่มต้นตั้งแต่ Debian 1.7.2p1-1 ซึ่งออกมาในปลายปี 1990 (Ubuntu ใช้ Debian )


(รู้สึกอิสระที่จะแก้ไขคำตอบของฉันถ้าคุณสามารถมากับชื่อไฟล์ที่ดีกว่า)
บอริส

0

ตามที่Vinceได้พูดถึงในความคิดเห็นคุณสามารถใช้บรรทัดนี้:

%sudo ALL=NOPASSWD: ALL

(นี่แตกต่างจากบรรทัดที่แสดงในคำตอบเหล่านั้น และมันแก้ปัญหาให้ฉัน)


@Eliah นี้ไม่แตกต่างจากคำตอบอื่น ๆ ทั้งหมดมันไม่คือแทนที่ตัวยึดsupergroupในคำตอบ Fedir sudoกับ ถัดไปผู้ใช้อื่นสำหรับกลุ่มwheelคืออะไร หรือกลุ่มอื่น ๆ ที่ผู้ใช้กำลังใช้อยู่?
muru

1
@muru "สิ่งที่มันทำคือแทนที่ตัวยึดตำแหน่งsupergroupในคำตอบของ Fedir ด้วยsudo" อะไร? แทนที่supergroupด้วยsudoในเส้น%supergroup ALL=(ALL) NOPASSWD:ALLอัตราผลตอบแทนไม่ได้%sudo ALL=(ALL) NOPASSWD:ALL %sudo ALL=NOPASSWD: ALL
Eliah Kagan

ซึ่งเลวร้ายยิ่งกว่าเนื้อหาตั้งแต่ตอนนี้ NOPASSWD สำหรับรูตในฐานะผู้ใช้เป้าหมายเท่านั้น ดังนั้นมันไม่ได้ตอบคำถามอย่างถูกต้อง!
muru

@muru อะไรคือสิ่งที่จะไม่ได้เนื้อหาแต่เป็นทดแทนด้วยsupergroup sudoนี่คือคำตอบของตัวเองไม่ใช่โพสต์ขอบคุณหรือสำเนาของคำตอบอื่น แต่ใช่ฉันเห็นด้วย: หากพวกเขาตั้งใจว่าจะไม่ดีสำหรับผู้ใช้ส่วนใหญ่เป็นวิธีการในคำตอบอื่น ๆ (แต่โดยเฉพาะการพิจารณาคำถามที่ว่า "คำสั่งทั้งหมด" ไม่ใช่ "ผู้ใช้เป้าหมายทั้งหมด" ฉันไม่คิดว่าจะมีผลแม้แต่จะพยายามตอบคำถามที่ถาม)
Eliah Kagan

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