sudo ตั้งใจจะนำไปใช้อย่างไร?


24

ฉันเคยลองกำหนดค่าsudoมาก่อน แต่ฉันไม่ได้โชคดีเกินไป แตกต่างจากsu -l -c "x"อย่างไร ดูเหมือนว่าผ่านไฟล์การกำหนดค่าหนึ่งสามารถทำได้เพื่อให้ผู้ใช้สามารถเข้าถึงคำสั่งบางอย่างและอื่น ๆ ฉันมักจะคิดว่าsudoเป็นวิธีการหนึ่งซับคำสั่งเป็นผู้ใช้หรือกลุ่มอื่น เนื่องจาก distros เช่น Ubuntu และ Mint ทำให้ง่ายขึ้นโดยการให้ผู้ใช้หลักเข้าถึง root ผ่านรหัสผ่านได้ง่ายฉันไม่แน่ใจว่าการใช้งานที่ตั้งใจไว้คืออะไร

ฉันจะเพิ่มผู้ใช้ในไฟล์ sudo ได้อย่างไรโดยให้สิทธิ์ผู้ใช้ในการรันคำสั่งบางอย่างที่รูทเท่านั้น ฉันไม่ต้องการเปิดช่องโหว่ใด ๆ

คำตอบ:


16

สำหรับการดำเนินการขั้นพื้นฐาน - คำสั่งที่รันในฐานะรูท - ความแตกต่างที่เห็นได้ชัดเจนที่สุดระหว่าง sudo และ su คือ sudo ต้องการรหัสผ่านของผู้ใช้ที่โทร (เช่นรหัสผ่านของคุณ) ในขณะที่ su ต้องการรหัสผ่านของผู้ใช้เป้าหมาย (เช่นรหัสผ่านรูท) ผลกระทบด้านความปลอดภัยมีการพูดคุยกันอย่างกว้างขวางในคำถามก่อนหน้านี้: วิธีใดที่ปลอดภัยที่สุดในการรับสิทธิ์รูท: sudo, su หรือ login? .

Sudo มีคุณสมบัติเพิ่มเติมนอกเหนือจาก su โดยเฉพาะเมื่อคุณมีรหัสผ่านของผู้ใช้คุณสามารถเรียกใช้คำสั่งใดก็ได้ในฐานะผู้ใช้นั้น ในทางกลับกัน sudo สามารถกำหนดค่าเพื่อให้ผู้ใช้สามารถเรียกใช้คำสั่งที่เฉพาะเจาะจงในฐานะผู้ใช้อื่น สิ่งนี้อาจเกิดขึ้นได้เนื่องจาก sudo ไม่ต้องการการรับรองความถูกต้องใด ๆ (นอกเหนือจากการยืนยันว่าคุณเป็นคุณด้วยการพิมพ์รหัสผ่านของคุณ

คุณเปลี่ยนการกำหนดค่า sudo โดยเรียกใช้visudoคำสั่งในฐานะรูท (ไม่ต้องแก้ไขการกำหนดค่าโดยตรง) ตรวจสอบให้แน่ใจว่าตัวแปรสภาพแวดล้อมEDITORหรือVISUALตั้งค่าเป็นโปรแกรมแก้ไขรายการโปรดของคุณหรือคุณอาจได้รับโปรแกรมแก้ไขที่ไม่คุ้นเคย sudoersหน้าคนเป็นบิตสั้น แต่มีตัวอย่าง ในการอนุญาตให้ผู้ใช้bobเรียกใช้/bin/foo(ด้วยจำนวนอาร์กิวเมนต์ใด ๆ ) และ/bin/bar --safe(แต่ไม่มีอาร์กิวเมนต์อื่นใด) เป็นrootให้ใช้บรรทัดต่อไปนี้:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe

2
sudoมันเป็นสิ่งประดิษฐ์ที่น่ากลัว
tshepang

1
ว่า sudo ต้องการรหัสผ่านรูทหรือรหัสผ่านรูทขึ้นอยู่กับการกำหนดค่า สามารถตั้งค่าได้ทั้งสองทาง
Jonathan M Davis

3
@Tshepang อาเมนพี่ชาย หากฉันต้องปล่อยรหัสผ่านรูทและอธิบายฝ่ายสนับสนุนด้านเทคนิคเกี่ยวกับวิธีการใช้ SU และไม่ทำสิ่งใด ๆ นอกเหนือไปจากที่apache2ctl gracefulฉันคิดว่าฉันชอบที่จะกรีดข้อมือของฉัน
Shadur

6

ความแตกต่างที่ใหญ่ที่สุดคือกับคุณไม่ต้องใช้รหัสผ่านรากเพื่อเรียกใช้คำสั่งเป็นรากที่คุณต้องการสำหรับsudo suคุณต้องใช้รหัสผ่านรูทเพื่อเพิ่มบางคนลงในsudoersไฟล์ แต่หลังจากนั้นบุคคลนั้นสามารถเรียกใช้ทั้งหมดหรือบางส่วน (ถ้าคุณ จำกัด ไว้) เป็นรูทโดยไม่ต้องใช้รหัสผ่านเพิ่มเติม

ความแตกต่างอื่น ๆ คือตามที่คุณบันทึกไว้sudoช่วยให้สามารถควบคุมคำสั่งที่สามารถรันได้อย่างละเอียดยิ่งขึ้น

สำหรับรายละเอียดของรูปแบบของไฟล์วิ่งsudoers man sudoersคุณจะพบตัวอย่างของการอนุญาตให้เรียกใช้คำสั่งบางอย่างเป็นรูทเท่านั้น โครงสร้างพื้นฐานของแต่ละบรรทัดคือ:

user_list host_list = cmd_list

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

ตัวอย่างบรรทัดอาจเป็น:

joe  ALL=(ALL) ALL

ซึ่งหมายความว่า: ให้ joe รันคำสั่งใด ๆ บนโฮสต์ใด ๆ ในฐานะผู้ใช้ใด ๆ บรรทัดที่เข้มงวดมากขึ้นอาจเป็น:

joe  ALL=(operator) /usr/local/ops/

ซึ่งหมายความว่า: ให้ joe รันคำสั่งใด ๆ ในไดเร็กทอรี / usr / local / ops ในฐานะผู้ใช้ "โอเปอเรเตอร์"

มีตัวอย่างมากมายในตอนท้ายของหน้า man sudoers

คุณควรแก้ไขด้วยคำสั่ง/etc/sudoers visudoการตรวจสอบนี้จะตรวจสอบว่าไฟล์ถูกกฎหมายและช่วยป้องกันคุณจากการทำลายไฟล์โดยไม่ตั้งใจ


จำเป็นต้องใช้รหัสผ่านหรือไม่เมื่อใช้ sudo ขึ้นอยู่กับการsudoersตั้งค่าไฟล์ทั้งหมด สามารถตั้งค่าให้ต้องใช้รหัสผ่านหรือตั้งค่าให้ไม่ต้องใช้รหัสผ่าน
Jonathan M Davis

แนวทางปฏิบัติทั่วไปเพิ่มเติมเพื่อหลีกเลี่ยงการเปลี่ยนไฟล์ / etc / sudoers หลักเนื่องจาก IDS ดูและการจัดรูปแบบของมันสามารถทำลายวันของคุณ: ใช้ตัวอย่าง sudo เป็นไฟล์แยกต่างหากใน /etc/sudoers.d การใช้กลุ่มล้อสำหรับคนที่อนุญาตให้ใช้คำสั่งใด ๆ
bbaassssiiee

2

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


3
มันมีวัตถุประสงค์เพื่อความปลอดภัยเพราะ sudo รองรับการบันทึกไปยัง syslog ซึ่งในการตั้งค่าที่สำคัญใด ๆ ที่เกี่ยวข้องกับความปลอดภัยจะถูกกำหนดค่าให้เข้าสู่ระบบไปยังเครื่องระยะไกลแยกต่างหากเพื่อที่ว่าหากระบบถูกบุกรุก
Arrowmaster

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