sudoers - ขอคำอธิบายง่ายๆ


24

ทุกครั้งที่ฉันต้องการเรียกใช้บางสิ่งบางอย่างที่ต้องใช้ฉันเป็นsudoerจำนวนมากเกินไปฉันต้อง google เพื่อจัดรูปแบบ/etc/sudoersเพื่อเตือนฉันอีกครั้งว่าวิธีที่เหมาะสมในการเขียนคืออะไร

ตอนนี้ฉันเห็นสไตล์การเขียนที่แตกต่างกันในsudoersไฟล์ของฉันซึ่งเป็นผลมาจากผลการค้นหา google ที่แตกต่างกันในช่วงหลายเดือนที่ผ่านมา ฉันยังสังเกตเห็นว่าตัวอย่างที่สอง (ด้านล่าง) ดูเหมือนว่าจะทำงานใน XFCE แต่ไม่ใช่ใน Cinnamon (Gnome 3) สิ่งนี้อาจไม่เกี่ยวข้องกันโดยสิ้นเชิง แต่ถึงกระนั้นฉันอยากรู้เพียงครั้งเดียวไวยากรณ์ที่ถูกต้องของสาย sudoer คืออะไรและอะไรคือความแตกต่างระหว่างตัวอย่างที่ให้มา

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

นอกจากนี้ยังมีไว้ALLเพื่ออะไร? ผู้ใช้หนึ่งคนหนึ่งคำสั่ง แต่ฉันต้องใช้ALLคำหลักมากถึงสามครั้ง? ฉันทำสิ่งนี้ผิดหรือเปล่า?

แน่นอนถนัดNOPASSWD:ทำให้คุณใส่รหัสผ่านของคุณก่อนที่คุณจะได้รับอนุญาตให้ใช้คำสั่ง แต่จุดหนึ่งของความสับสนคือการใช้งานของ=และ:สำหรับคำสั่งสุดท้ายที่เป็นเรื่องของสายที่สามารถใช้ได้โดยทั้ง=, :, หรือ), ไวยากรณ์ทำให้สับสนสำหรับความหมายที่คล้ายกัน


3
ฉันยังรู้สึกผิดหวังกับsudoersไวยากรณ์ การอ่าน man page นั้นน่าหงุดหงิดยิ่งขึ้น: มันอธิบายถึงสิ่งที่เรียกว่า EBNF ที่กระชับและถูกต้องตัวอย่างที่มีความยาวอย่างละเอียด ดังนั้นฉันไม่แปลกใจที่พบเธรดจำนวนมากที่นี่เกี่ยวกับไฟล์นี้
m-ric

1
ขอบคุณสำหรับสิ่งนี้. เคยต้องการถามคำถามนี้นับตั้งแต่ฉันเจอไฟล์ sudoers เมื่อหลายปีก่อน :-)
vahidg

คำตอบ:


35

มันเป็นมากกว่าแค่ผู้ใช้และคำสั่ง:


redsandro host=(user:group) tag:commands
  • hostระบุชื่อโฮสต์บรรทัดนี้ใช้ได้สำหรับ นอกจากว่าคุณกำลังแชร์ไฟล์ asudoers ระหว่างโฮสต์ที่แตกต่างกันซึ่งต้องการกฎที่แตกต่างกันโดยใช้ค่าพิเศษALLความหมาย "โฮสต์ทั้งหมด" เป็นตัวเลือกที่ดี

  • userระบุผู้ใช้ที่คุณสามารถใช้กับ-uตัวเลือกเพื่อเรียกใช้คำสั่ง หากคุณข้ามสิ่งนี้ไปคุณจะไม่สามารถใช้-uตัวเลือกนี้ได้

  • groupระบุกลุ่มที่คุณสามารถใช้กับ-gตัวเลือก หากคุณไม่ใช้งานคุณจะไม่สามารถใช้-gตัวเลือกนี้ได้

ทั้งสองuserและgroupเข้าใจคุณค่าพิเศษALLว่า "ผู้ใช้ / กลุ่มทั้งหมด"

หากคุณข้าม(user:group)สิ่งทั้งหมดที่คุณไม่สามารถใช้-uและ-gเพียงเรียกใช้คำสั่งเป็น root

  • tag ให้คุณระบุตัวเลือกบางอย่างเช่น NOPASSWD

ดังนั้นด้วยตัวอย่างแรกของคุณคุณสามารถเรียกใช้คำสั่งในฐานะรูท แต่ไม่สามารถใช้-uและ-gเรียกใช้ในฐานะผู้ใช้หรือกลุ่มอื่น ๆ

ด้วยตัวอย่างที่ 2 คุณสามารถรันคำสั่งในฐานะรูทหรือใช้-uเพื่อรันในฐานะผู้ใช้อื่น ๆ

ด้วย 3. คุณสามารถเรียกใช้คำสั่งเป็นรูตหรือใช้-uหรือ-gเพื่อรันคำสั่งในฐานะผู้ใช้หรือกลุ่มอื่น ๆ


นี่คือสิ่งที่ฉันกำลังมองหา ฉันยอมรับคำตอบของคุณแล้วและขอบคุณสำหรับผลงานของคุณ
Redsandro

1
ความคิดสุดท้ายที่ฉันสามารถใช้127.0.0.1หรือlocalhostเป็นhostสำหรับเล็กน้อยเพิ่มความปลอดภัย?
Redsandro

5
manpage บอกว่า'Note sudo ตรวจสอบเน็ตเวิร์กอินเตอร์เฟสจริงเท่านั้น ซึ่งหมายความว่าที่อยู่ IP 127.0.0.1 (localhost) จะไม่ตรงกัน นอกจากนี้ชื่อโฮสต์ "localhost" จะจับคู่หากเป็นชื่อโฮสต์จริงซึ่งโดยปกติจะเป็นกรณีสำหรับระบบที่ไม่ใช่เครือข่ายเท่านั้น '
Florian Diesch

1
ขอบคุณ ไม่มีชื่อโฮสต์ให้ฉันโดยเฉพาะอย่างยิ่งเนื่องจากฉันต้องการคัดลอก sudoersfile ไปยังหลายเครื่อง ALLมันคือ.
Redsandro

9

ลองแยกอันนี้ออกจากกัน:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro เป็นชื่อผู้ใช้ที่เราอนุญาตให้ วาง% ที่ด้านหน้าเพื่อทำให้มันใช้ได้กับกลุ่ม

ALL เป็นชื่อสำหรับกฎนี้ Sudoers สามารถทำได้มากกว่าการให้สิทธิ์ระดับโลก นั่นคือสิ่งที่มันซับซ้อน

= ไม่ต้องการคำอธิบาย

ALL: ALL อ่านว่า (who_to_run_it_as: what_group_to_run_it_as) วิธีนี้คุณสามารถอนุญาตให้เรียกใช้คำสั่ง แต่เฉพาะในบริบทของผู้ใช้หรือกลุ่มที่ระบุ

NOPASSWD: บอกให้ปิดพรอมต์รหัสผ่าน

/ path / to / command ให้คุณระบุคำสั่งเฉพาะ path_to_commmand, another_command

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


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