ความแตกต่างระหว่างผู้ใช้ sudo และผู้ใช้รูท [ปิด]


21

/etc/sudoersรายชื่อไฟล์ที่ผู้ใช้สามารถทำในสิ่งที่มีsudoคำสั่ง

ผู้ใช้รูทสร้างและแก้ไข/etc/sudoersไฟล์

แนวคิดนี้ยากสำหรับฉันที่จะเข้าใจ

หากผู้ใช้ทั้งหมดที่มี sudo privilage อยู่ในsudoersกลุ่มผู้ใช้ทั้งหมดจะกลายเป็นรูตได้ด้วยการให้sudo suคำสั่ง

แล้วใครคือผู้ใช้รูทจริงและเขาควบคุมพลังของผู้ใช้ในกลุ่ม sudoers อย่างไร

กรุณาอธิบายให้ฉัน


4
ฉันคิดว่าคุณต้องขยายในส่วนที่ยากต่อการเข้าใจ
garethTheRed

ใครคือผู้ใช้รูท? คำถามนี้ยากสำหรับฉันที่จะเข้าใจ เนื่องจากผู้ใช้ที่มีอำนาจสามารถใช้งานกลุ่ม sudoers ได้เท่านั้น
rancho

@rancho อัปเดตคำถามได้โปรด
peterph


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

คำตอบ:


29

บทสรุปผู้บริหาร: "root" เป็นชื่อจริงของบัญชีผู้ดูแลระบบ "sudo" เป็นคำสั่งที่อนุญาตให้ผู้ใช้ทั่วไปสามารถทำงานการดูแลระบบ "Sudo" ไม่ใช่ผู้ใช้


คำตอบยาว:

"root" (aka "superuser") เป็นชื่อของบัญชีผู้ดูแลระบบ ต้นกำเนิดของชื่อนั้นค่อนข้างโบราณ แต่ก็ไม่สำคัญ

ผู้ใช้รูทมีรหัสผู้ใช้ 0 และในนามมีสิทธิ์ไม่ จำกัด รูทสามารถเข้าถึงไฟล์ใด ๆ เรียกใช้โปรแกรมเรียกใช้ระบบใด ๆ และแก้ไขการตั้งค่าใด ๆ (แต่ดูด้านล่าง¹)

ก่อนที่จะมีการประดิษฐ์คำสั่ง "sudo" หากคุณต้องการทำงานด้านการดูแลระบบคุณต้องเข้าสู่ระบบในฐานะ root ไม่ว่าจะโดยการเข้าสู่ระบบprompt²อย่างใดหรือด้วยsuคำสั่ง ("su" สั้นสำหรับผู้ใช้สำรอง) ³

นั่นเป็นเรื่องที่ค่อนข้างยุ่งยากและไม่อนุญาตให้คุณมอบอำนาจการบริหารบางส่วนให้กับผู้ใช้ ดังนั้นคำสั่ง "sudo" (ย่อมาจากคำว่า "user replace do") จึงถูกประดิษฐ์ขึ้น

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

ดังนั้นเช่นsudo vi /etc/hostsจะช่วยให้คุณสามารถแก้ไขไฟล์โฮสต์ราวกับว่าคุณกำลังทำงานเป็นรูท คุณไม่จำเป็นต้องใช้รหัสผ่านรูทเพียงแค่ใช้รหัสผ่านเข้าสู่ระบบ

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

ไฟล์ sudoers พิจารณาว่าใครสามารถใช้คำสั่ง sudo และทำอะไรได้บ้าง

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

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

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


¹อีกสิ่งหนึ่ง: รุ่น Unix ที่ทันสมัยสามารถ จำกัด ได้แม้ในสิ่งที่ผู้ใช้รูทสามารถทำได้

ภายใต้SELinux (Security Enhanced Linux) มีรายการควบคุมการเข้าถึงที่กำหนดว่าโปรแกรมใดสามารถทำอะไรได้อย่างมีประสิทธิภาพและแม้แต่รูทไม่สามารถผ่านข้อ จำกัด เหล่านั้นได้

ภายใต้ระบบการป้องกันความสมบูรณ์ของระบบ (SIP) ของแอปเปิล(aka "รูท") ระบบไฟล์และไดเรกทอรีบางอย่างจะถูกล็อคลงเพื่อให้เฉพาะแอปพลิเคชั่นที่อยู่ในบัญชีปลอดภัยที่เหมาะสมเท่านั้นที่สามารถเข้าถึงได้

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

²พรอมต์ "ล็อกอิน:" เป็นอีกส่วนหนึ่งของประวัติศาสตร์ Unix ย้อนหลังไปถึงตอนที่เราทุกคนใช้ขั้ว ASCII บนสายอนุกรมแทนที่จะเป็นระบบหน้าต่าง คุณยังสามารถรับพรอมต์ "เข้าสู่ระบบ:" เพียงแค่พิมพ์loginในหน้าต่างเทอร์มินัลใด ๆ หรือโดยการเปิดการเชื่อมต่อ ssh (หรือ telnet หรือ rsh) ไปยังคอมพิวเตอร์ของคุณจากที่อื่น คุณสามารถเข้าสู่ระบบในฐานะผู้ใช้รายอื่นได้หากต้องการ (และหากคอมพิวเตอร์ของคุณมีพอร์ตอนุกรมคุณยังสามารถกำหนดค่าให้อนุญาตการเข้าสู่ระบบได้)

³เป็นไปได้ที่แต่ละโปรแกรมจะสามารถเข้าถึงรูทได้ โปรแกรมเหล่านี้สามารถทำสิ่งใดก็ตามที่ผู้ใช้ที่มีการเข้าถึงรูทสามารถทำได้แม้เมื่อเรียกใช้โดยผู้ใช้ทั่วไป โดยทั่วไปจะ จำกัด เฉพาะงาน ตัวอย่างเช่นโปรแกรมcrontabมีสิทธิ์รูทเพื่อให้สามารถแก้ไขตาราง cron เห็นได้ชัดว่า "sudo" มีสิทธิ์ใช้งานรูทเพื่อให้สามารถทำสิ่งที่มันทำ

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

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

หากคุณต้องการทำงานการบริหารฐานข้อมูลคุณจะกลายเป็น "mysql" ด้วยsu mysqlคำสั่งหรือใช้sudoตำแหน่งที่ไฟล์ sudoers จะให้สิทธิ์ mysql แก่คุณสำหรับคำสั่งเฉพาะเหล่านั้น


1
ไฟล์ sudoers เป็นสิ่งที่ทำให้คุณมีผู้ดูแลระบบหลายคน ผู้ดูแลระบบของคุณจะได้รับการรูทอย่างมีประสิทธิภาพรวมถึงทุกคนที่อยู่ในไฟล์ sudoers หากไม่มีไฟล์ sudoers ผู้ดูแลระบบเพียงรายเดียวคือรูท
Edward Falk

1
"ภายใต้ SELinux (Security Enhanced Linux) มีรายการควบคุมการเข้าถึงอย่างมีประสิทธิภาพที่กำหนดว่าใครสามารถทำอะไรได้และแม้แต่รูทไม่สามารถผ่านข้อ จำกัด เหล่านั้นได้" - ถ้าหากรูทไม่สามารถผ่านข้อ จำกัด เหล่านั้นได้ใครเป็นผู้สร้างข้อ จำกัด เหล่านั้นตั้งแต่แรก?
rancho

1
ในการชี้แจงสิ่งนี้: "อย่างมีประสิทธิภาพผู้ดูแลระบบของคุณคือรูทรวมถึงทุกคนที่อยู่ในไฟล์ sudoers" รายการ sudoers ไม่จำเป็นต้องหมายถึงรูทเต็มที่หรือแม้แต่การเข้าถึงระดับรูท ฉันอาจให้ Sven ความสามารถในการรีสตาร์ทเอเจนต์การตรวจสอบที่ทำงานเป็นตัวตรวจสอบ
Jeff Schaller

1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]. บนเครื่องของฉัน (Solus OS 3) สิ่งนี้ผิด ชื่อผู้ใช้ของฉันไม่ได้อยู่ในไฟล์ sudoers sudoและฉันยังคงสามารถทำ
Martin Andersson

2
คำตอบเก่าและนี่คือโอ้อวด แต่suเป็นตัวย่อของ "ผู้ใช้แทน"; sudoจึงเป็น "ผู้ใช้สำรองทำ" คุณสามารถใช้เพื่อเข้าสู่ระบบเป็นผู้ใช้อื่นที่ไม่เพียงsu rootและคุณสามารถใช้sudoเพื่อรันคำสั่งในฐานะผู้ใช้รายอื่น
josaphatv
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.