บทสรุปผู้บริหาร: "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 แก่คุณสำหรับคำสั่งเฉพาะเหล่านั้น