มีหลายวิธีในการได้ root session ใน Linux terminal สร้างความสับสนได้ เนื่องจากผู้ใช้มือใหม่ที่หา root privileges อาจไม่คุ้นเคยว่าแต่ละคำสั่งได้ root access อย่างไร ต่างกันที่ไหน และเมื่อไหร่ที่ความแตกต่างเหล่านี้สำคัญ ที่นี่เราจะแยกแยะคำสั่งต่างๆ ที่ใช้ได้ root access ในเทอร์มินัล อธิบายว่ามันได้ root ยังไง เมื่อไหร่ควรใช้ และทุกอย่างระหว่างนั้น
su
คำสั่ง su แทนที่ current user ที่ระบบใช้ใน shell
สามารถสลับไปยัง user ใดๆ ได้โดยพิมพ์ su และตามด้วย username จะบอกระบบให้ switch (และ logout จาก) current user ไปยัง user ที่ระบุ หรือ su ได้ root access โดยพิมพ์ su โดยไม่ระบุอะไรหลังคำสั่ง
"su" เหมาะที่สุดเมื่อ user ต้องการ direct access ไปยัง root account บนระบบ มันไม่ผ่าน sudo หรืออย่างอื่น แทนที่จะถูกถาม root user's password เพราะคุณกำลัง login เข้าไปจริงๆ อีกทั้ง วิธีอื่นในการได้ root access ไม่มีประโยชน์ของการเข้าถึง root home directory และ root environment
sudo su
คำสั่งนี้ขอ current user's password แทน root password
มัน essentially เหมือนแค่รัน su ใน shell ยกเว้นความแตกต่างสำคัญหนึ่ง: แทนที่จะบอกระบบ "switch users" โดยตรง คุณบอกให้รันคำสั่ง "su" เป็น root เมื่อ sudo su รัน ".profile", ".bashrc" และ "/etc/profile" จะเริ่มต้น ทำงานคล้าย su (หรือ su root) หากคำสั่งใดรันกับ sudo นำหน้า จะได้ root privileges
แม้จะไม่มีความแตกต่างมากระหว่าง "sudo su" และ "su" แต่ sudo su ยังคงเป็นคำสั่งที่มีประโยชน์มากเพราะเหตุผลสำคัญ: เมื่อ user รัน "su" เพื่อได้ root access บนระบบ ต้องรู้ root password Root ถูกให้ด้วย sudo su โดยขอ current user's password ทำให้ได้ root โดยไม่ต้องรู้ root password เพิ่มความปลอดภัย
sudo -i
การใช้ sudo -i เกือบเหมือน sudo su ทุกประการ ยกเว้นว่าไม่ได้ interact กับ root user โดยตรง
เหมือน sudo su ฟลาก -i ให้ user ได้ root environment โดยไม่ต้องรู้ root account password sudo -i คล้าย sudo su มาก เพราะจะอ่าน environmental files ทั้งหมด (.profile, ฯลฯ) และตั้งค่า environment ภายใน shell
จุดแตกต่างจาก "sudo su" คือ sudo -i เป็นวิธีที่สะอาดกว่าในการได้ root และ root environment โดยไม่ interact กับ root user โดยตรง เพื่อชี้แจง: ด้วย sudo su คุณใช้ root setuid command มากกว่าหนึ่งในพื้นหลัง ทำให้ยากที่จะ 알아ว่าตัวแปรสภาพแวดล้อมไหนจะถูกเก็บและไหนจะเปลี่ยน (เมื่อสลับไป root environment) สิ่งนี้ไม่เกิดกับ sudo -i ด้วยเหตุนี้ ผู้ส่วนใหญ่มองว่าเป็นวิธีที่ต้องการเพื่อได้ root โดยไม่ login โดยตรง
sudo -s
คำสั่งนี้เรียก shell ด้วยตัวแปร $SHELL ของคุณ
สวิตช์ -s สำหรับคำสั่ง "sudo" อ่านตัวแปร $SHELL ของ current user ที่กำลัง execute คำสั่ง คำสั่งนี้ทำงานเหมือน user รัน sudo /bin/bash Sudo -s เป็น shell แบบ "non-login" ไม่เหมือนคำสั่งอย่าง sudo -i หรือ sudo su ระบบจะไม่อ่าน environmental files ใดๆ เมื่อ user สั่ง shell ให้รัน sudo -s มันได้ root แต่จะไม่เปลี่ยน user หรือ user environment Home ของคุณจะไม่ใช่ root home ฯลฯ
คำสั่งนี้เหมาะที่สุดเมื่อ user ไม่อยากสลับไป root แต่อยากได้ interactive shell กับค่า $SHELL environment คำสั่งอื่นๆ ที่พูดถึงข้างต้นได้ root access แต่แตะ root environmental files และให้ user เข้าถึง root เต็มรูปแบบ (อาจเป็น security issue)
คำถามที่พบบ่อย
1. ควรใช้คำสั่งไหน?
แต่ละคำสั่งมี use-case ของตัวเอง สิ่งสำคัญคือเข้าใจว่าแต่ละคำสั่งทำอะไร และเมื่อไหร่ควรใช้ ตามสถานะปัจจุบัน sudo -i เป็นวิธีที่ practical และสะอาดที่สุดในการได้ root environment ในทางกลับกัน ผู้ใช้ sudo -s จะได้ root shell โดยไม่มีความสามารถแตะ root environment ซึ่งมีประโยชน์ด้านความปลอดภัยเพิ่ม
2. การเข้าถึง root ทำลายระบบได้ไหม?
ในบางกรณี ใช่ เว้นแต่คุณแน่ใจว่าต้องเข้าถึง root สำหรับทุกอย่างใน terminal session นั้น มักดีกว่าที่จะพิมพ์ sudo ตามด้วยคำสั่ง หากต้องการเข้าถึง root สำหรับคำสั่งเฉพาะนั้น ตัวอย่าง พิมพ์ sudo apt install vlc ใน Debian-based Linux ใดๆ จะบอก OS ให้เข้าถึง root เพื่อรัน APT package manager ติดตั้ง VLC
ข้อจำกัดสำคัญของการรัน sudo -i หรือ variant อื่นที่อภิปรายก่อนหน้านี้ เทียบกับการพิมพ์ sudo นำหน้าคำสั่งที่อยากรันเป็น root คือ การรันแบบแรก ไม่ log command history ลง /var/log/auth.log หากคุณทำผิด ไม่สามารถย้อนกลับดูว่าทำอะไรไปเพื่อแก้ไขได้ ต้องทำงานจากความทรงจำ เพราะ root sessions ไม่ถูกบันทึก
3. เมื่อพิมพ์ "sudo" นำหน้าคำสั่ง ทำ variant ไหนของ "sudo su" อยู่?
การพิมพ์ sudo เพื่อ execute คำสั่ง (คือ พิมพ์ในบรรทัดเดียวกับคำสั่งที่อยากรัน) คุณ essentially รันมันภายใต้ interactive root shell นี่คือสิ่งที่คำสั่ง sudo -s standalone ทำ
สรุป
ไม่มีคำสั่งใดในรายการนี้ที่ดีที่สุด 100% เมื่อผู้ใช้คุ้นเคยกับบรรทัดคำสั่งมากขึ้น พวกเขาจะต้องนำแต่ละวิธีในการได้ root (ซึ่งมีมาก) มาพิจารณา pros และ cons และตัดสินใจตามนั้น หวังว่าบทความนี้จะช่วยให้ตัดสินใจง่ายขึ้น หากอยากเรียนรู้คำสั่งเพิ่มเติม อ่าน บทความคำสั่ง Linux ที่มีประโยชน์สำหรับรายการเนื้อหาในไดเรกทอรี