1. แนะนำ: sudo คืออะไร?
ความหมายและบทบาทพื้นฐานของ sudo
ในระบบปฏิบัติการ Linux และ Unix “sudo” เป็นหนึ่งในคำสั่งที่สำคัญอย่างยิ่ง
“sudo” ย่อมาจาก “superuser do” เป็นเครื่องมือที่ช่วยให้สามารถ ยืมสิทธิ์ผู้ดูแลระบบ (root) ชั่วคราวเพื่อรันคำสั่ง ได้ โดยปกติแล้วผู้ใช้ทั่วไปจะไม่มีสิทธิ์ในการดำเนินการที่มีผลต่อระบบทั้งหมด เช่น การติดตั้งแพ็กเกจหรือเปลี่ยนแปลงค่าระบบ อย่างไรก็ตาม ด้วยคำสั่ง sudo
จะสามารถดำเนินการเหล่านี้ได้ในแบบจำกัด
ตัวอย่างเช่น หากรันคำสั่งดังนี้ จะเป็นการสั่ง apt ด้วยสิทธิ์ root:
sudo apt update
ด้วยเหตุนี้ sudo จึงทำหน้าที่ “ระบบสำหรับใช้สิทธิ์ผู้ดูแลอย่างปลอดภัย” ช่วยให้ทั้งความปลอดภัยและความสะดวกสบายในการจัดการระบบควบคู่กัน
ความแตกต่างระหว่าง su และ sudo
คำสั่ง su
ก็ใช้เพื่อจุดประสงค์ใกล้เคียงกันกับ sudo
แต่มีความแตกต่างชัดเจน
su
ย่อมาจาก “substitute user” คือ สลับไปใช้งานในฐานะผู้ใช้รายอื่น (โดยมากคือ root) หากใช้su
จะเหมือนเป็นผู้ใช้งานคนนั้นโดยสมบูรณ์- ในทางกลับกัน
sudo
จะ ใช้สิทธิ์ผู้ดูแลเฉพาะบางคำสั่ง โดยยังคงสถานะเป็นผู้ใช้เดิม
กล่าวคือ su
สลับเป็นอีกรายแบบ session, sudo
จะยกระดับสิทธิ์เป็น root แค่เฉพาะคำสั่งนั้น ความแตกต่างนี้ช่วยให้ sudo
ตรวจสอบประวัติการใช้งานได้ง่ายกว่า จึงกลายเป็นมาตรฐานบนดิสโทรสมัยใหม่
Linux ดิสโทรที่ใช้ sudo เป็นหลัก
ดิสโทร Linux ส่วนใหญ่ตั้งค่า sudo
ไว้เป็นค่าเริ่มต้น โดยเฉพาะดิสโทรเหล่านี้:
- ตระกูล Ubuntu (Ubuntu, Linux Mint ฯลฯ)
→ โดยดีฟอลต์จะไม่ล็อกอิน root โดยตรง ใช้ sudo จัดการทั้งหมด - Debian
→ sudo อาจต้องเปิดใช้งานภายหลัง แต่โดยนโยบายถือว่าแนะนำให้ใช้ - Fedora, CentOS, Red Hat
→ root ใช้งานได้แต่ sudo ก็เป็นมาตรฐานเช่นกัน
โดยเฉพาะ Ubuntu root จะถูกปิดใช้งานโดยค่าเริ่มต้น งานดูแลระบบทั้งหมดต้องผ่าน sudo ดังนั้นจึงจำเป็นสำหรับผู้ใช้ Ubuntu ที่ต้องเข้าใจ sudo
ทำไมถึงมีการค้นหา “sudo sudo”?
คีย์เวิร์ด “sudo sudo” แม้จะดูซ้ำซ้อน แต่จริง ๆ แล้วเกิดจากเหตุผลต่อไปนี้:
- มือใหม่ที่อยากรู้วิธีใช้หรือความหมายของ
sudo
เลยเน้นย้ำซ้ำสอง - ค้นหาปัญหาเกี่ยวกับ
sudo
(เช่นsudo: sudo: command not found
) - เห็นการใช้
sudo
ซ้ำสองในสคริปต์/pipe แล้วสงสัย
ด้วยเหตุนี้ ในบทความถัดไปจะอธิบายการใช้ การตั้งค่า และการแก้ปัญหา sudo
อย่างละเอียด
2. วิธีใช้คำสั่ง sudo เบื้องต้น
โครงสร้างพื้นฐานของ sudo
รูปแบบของ sudo
นั้นเรียบง่ายมาก:
sudo [ออปชั่น] คำสั่ง
ตัวอย่าง หากต้องการอัปเดตข้อมูลแพ็กเกจของระบบ:
sudo apt update
คำสั่งนี้หมายถึง “รัน apt update ด้วยสิทธิ์ root”
ระบบขอรหัสผ่านและการแคช
ครั้งแรกที่ใช้ sudo
หรือหลังเวลาผ่านไป จะถูกขอ รหัสผ่านของผู้ใช้ เพื่อความปลอดภัย ป้องกันการใช้งานโดยไม่ได้รับอนุญาต
หลังกรอกรหัสผ่าน sudo
จะจดจำไว้ช่วงเวลาหนึ่ง (ค่าเริ่มต้นบน Ubuntu คือ 5 นาที) หลังจากนี้สามารถใช้ sudo
ต่อได้โดยไม่ต้องกรอกซ้ำ สามารถปรับเวลาได้ในไฟล์ sudoers
ออปชั่นยอดนิยม
sudo
มีออปชั่นมากมายสำหรับการใช้งานที่สะดวกขึ้น ตัวอย่างที่ใช้บ่อย:
-u (รันในฐานะผู้ใช้อื่น)
ดีฟอลต์คือ root แต่ถ้าใช้ -u
จะ รันเป็นผู้ใช้ที่กำหนด:
sudo -u www-data whoami
ผลลัพธ์จะเป็น www-data
หมายถึงรันในฐานะผู้ใช้ www-data
-s (เปิด shell ด้วย root)
รัน shell ชั่วคราวในสิทธิ์ root ได้ดังนี้:
sudo -s
โปรดใช้ความระมัดระวังเมื่อติด root shell
-i (เข้าสู่ root session เต็มรูปแบบ)
เปลี่ยน environment ทั้งหมดเป็น root session:
sudo -i
-l (ตรวจสอบคำสั่งที่สามารถใช้ sudo ได้)
ตรวจสอบคำสั่งที่ตัวเองมีสิทธิ์ใช้กับ sudo:
sudo -l
เหมาะสำหรับเช็ค policy และ test สิทธิ์
ข้อควรระวังสำหรับมือใหม่
- ต้องมี ช่องว่างระหว่าง sudo กับคำสั่ง เช่น
sudoapt
คือผิด - ถ้ารันหลายคำสั่งพร้อมกันให้ใช้เครื่องหมาย quote (” หรือ ‘) ครอบ หรือคั่นด้วยเซมิโคลอน (;)
- อย่าใช้ sudo กับแอป GUI เช่น
sudo gedit
อาจทำให้ไฟล์ตั้งค่าพัง
3. ไฟล์ sudoers และการควบคุมสิทธิ์การเข้าถึง
ไฟล์ sudoers คืออะไร?
การทำงานของคำสั่ง sudo
จะถูกควบคุมด้วยไฟล์คอนฟิก /etc/sudoers
ซึ่งไฟล์นี้จะกำหนดว่า ใครสามารถรันคำสั่งอะไรด้วย sudo ได้บ้าง
ตัวอย่างเช่น สามารถตั้งให้ผู้ใช้บางคนรันได้เฉพาะคำสั่งที่กำหนดไว้เท่านั้น
จุดนี้ทำให้สามารถควบคุมสิทธิ์อย่างละเอียด และสอดคล้องกับ หลักการสิทธิ์ต่ำสุด (Least Privilege) เพื่อความปลอดภัยของระบบ
แก้ไขอย่างปลอดภัยด้วยคำสั่ง visudo
อย่าแก้ไขไฟล์ /etc/sudoers
ด้วย text editor ปกติเด็ดขาด
เพราะถ้าพิมพ์ผิด syntax อาจทำให้ใช้ sudo ไม่ได้ ซึ่งแก้ไขยากมาก ดังนั้นควรใช้ visudo
ซึ่งจะตรวจสอบ syntax ให้อัตโนมัติ
sudo visudo
visudo
จะเช็ค syntax ก่อนบันทึก ช่วยลดโอกาสผิดพลาด
รูปแบบเบื้องต้นและตัวอย่างการตั้งค่า
โครงสร้างพื้นฐานของไฟล์ sudoers
:
ชื่อผู้ใช้ ชื่อโฮสต์ = (ผู้ใช้ที่รัน) คำสั่งที่รันได้
ตัวอย่าง:
alice ALL=(ALL:ALL) ALL
หมายถึง user “alice” สามารถรันคำสั่งอะไรก็ได้ เป็นใครก็ได้ ในทุกโฮสต์
ตัวอย่างแบบจำกัดสิทธิ์:
bob ALL=(ALL) /usr/bin/systemctl restart nginx
อันนี้ให้ “bob” ใช้ sudo ได้เฉพาะรีสตาร์ท nginx เท่านั้น
ควบคุมแบบกลุ่ม: กลุ่ม sudo
บน Ubuntu และหลายดิสโทร ผู้ใช้ที่อยู่ในกลุ่ม sudo
จะได้รับสิทธิ์ใช้งาน sudo
%sudo ALL=(ALL:ALL) ALL
การใส่ %sudo
แบบนี้คือกำหนดสิทธิ์ให้ทั้งกลุ่ม
หากต้องการเพิ่ม user เข้ากลุ่ม sudo ใช้คำสั่งนี้:
sudo usermod -aG sudo ชื่อผู้ใช้
วิธีใช้และข้อควรระวังของออปชั่น NOPASSWD
ถ้าไม่ต้องการใส่รหัสผ่านทุกครั้งที่ใช้ sudo
สามารถตั้ง NOPASSWD
ได้:
alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
แบบนี้ “alice” จะรีสตาร์ท nginx ได้โดยไม่ต้องกรอกรหัสผ่าน
แต่อย่างไรก็ตาม เพิ่มความเสี่ยงด้านความปลอดภัย จึงควรจำกัดเฉพาะบางคำสั่งเท่านั้น
ไม่แนะนำให้ใช้กับ ALL
4. วิธีใช้ sudo ขั้นสูง
รันคำสั่งในฐานะผู้ใช้รายอื่น
โดยปกติ sudo
จะรันเป็น root แต่สามารถใช้ option เพื่อ รันในฐานะ user อื่น ได้
ตัวอย่าง หากต้องรันเป็นผู้ใช้ www-data:
sudo -u www-data whoami
ผลลัพธ์จะเป็น www-data
เหมาะกับกรณีที่ต้องตรวจสอบหรือทดสอบ environment ของแต่ละ user
การใช้ sudo ร่วมกับ redirect และ pipe
มือใหม่มักจะสับสนกับการใช้ sudo
กับ redirect (>
) หรือ pipe (|
)
เช่น คำสั่งด้านล่างจะไม่ทำงานตามที่คาดหวัง:
sudo echo "test" > /etc/test.conf
กรณีนี้ echo
จะรันด้วย sudo แต่การเขียนไฟล์ (>
) กลับเป็นสิทธิ์ผู้ใช้ปกติ จึงมักเจอ error
วิธีที่ถูกต้องควรใช้คำสั่ง tee
แบบนี้:
echo "test" | sudo tee /etc/test.conf
จะทำให้ redirect ด้วยสิทธิ์ sudo ได้
การใช้ sudo ใน shell script
ถ้าต้องเขียน shell script ที่ต้องใช้สิทธิ์ admin ให้ใส่ sudo
หน้าแต่ละคำสั่งที่ต้องการ
ไม่ควรให้รัน script ทั้งไฟล์ด้วย sudo โดยไม่จำเป็น
ตัวอย่าง (install.sh):
#!/bin/bash
echo "กำลังติดตั้งแพ็กเกจ..."
sudo apt install -y nginx
หรือตรวจสอบสิทธิ์ root ตั้งแต่ต้นทาง:
if [ "$EUID" -ne 0 ]; then
echo "ต้องรัน script นี้ด้วย root"
exit 1
fi
จะช่วยเพิ่มความปลอดภัยในการใช้งาน script
คำสั่ง sudo ที่มีประโยชน์บ่อยครั้ง
sudo !!
→ รันคำสั่งล่าสุดซ้ำโดยเพิ่ม sudo เช่น
apt update
sudo !!
เทียบเท่ากับ sudo apt update
sudo -k
→ เคลียร์ cache รหัสผ่านของ sudo ด้วยตนเองsudo -v
→ ต่ออายุ session สิทธิ์ sudo (ใช้เมื่อทำงานนาน ๆ)
5. ความปลอดภัยและแนวทางปฏิบัติที่ดีที่สุด
ยึดหลักสิทธิ์น้อยที่สุด (Least Privilege Principle)
เป้าหมายหลักของ sudo
คือ ให้ผู้ใช้ดำเนินการด้วยสิทธิ์เท่าที่จำเป็นต่อระบบ
กล่าวคือ ไม่ควร “เป็น root ตลอดเวลา” แต่ให้ “ขอยืมสิทธิ์ root เฉพาะเวลาที่ต้องการเท่านั้น”
หากปฏิบัติตามหลักนี้ การตั้งค่าควรเป็นดังนี้:
- อนุญาต sudo เฉพาะคำสั่งที่จำเป็น (เช่น
systemctl restart nginx
) - หลีกเลี่ยงการใช้ NOPASSWD โดยไม่จำเป็น
- ควบคุมผู้ใช้ที่มีสิทธิ์ admin ผ่านกลุ่ม (เช่น
sudo
)
การบันทึกและตรวจสอบ Log
sudo
จะบันทึกคำสั่งที่ถูกเรียกใช้ไว้ใน log สามารถตรวจสอบย้อนหลังว่าใครใช้คำสั่งไหน เมื่อไรได้
ตำแหน่ง log หลัก ๆ ขึ้นกับดิสโทรที่ใช้ เช่น:
/var/log/auth.log
(Ubuntu, Debian)journalctl
(สำหรับดิสโทรที่ใช้ systemd)
ตัวอย่าง วิธีเช็คประวัติการใช้ sudo บน Ubuntu:
grep 'sudo' /var/log/auth.log
หรือ:
journalctl _COMM=sudo
ช่วยให้ตรวจสอบย้อนกลับได้ว่ามีการกระทำผิดหรือไม่ เป็นเรื่องสำคัญในการดูแลเซิร์ฟเวอร์

ตัวอย่างช่องโหว่ sudo (CVE-2021-3156)
sudo
ถือเป็นเครื่องมือที่เชื่อถือได้สูง แต่อดีตเคยมีช่องโหว่ร้ายแรง เช่น CVE-2021-3156 (Baron Samedit) ซึ่งค้นพบในปี 2021
กรณีนี้ผู้ใช้ทั่วไปสามารถแฮกสิทธิ์ root ได้ด้วยอินพุตพิเศษ
ถึงแม้จะถูกแก้ไขแล้ว แต่เหตุการณ์แบบนี้ทำให้เห็นว่า:
- ต้อง อัปเดตแพ็กเกจสำคัญเสมอ รวมถึง sudo
- ติดตามข่าวสาร/ช่องโหว่จากเว็บไซต์ทางการ เป็นประจำ
ทางเลือกแทน sudo: doas
ผู้ใช้ Linux บางส่วนเลือกใช้ doas เป็นเครื่องมือยกระดับสิทธิ์แทน sudo โดยเฉพาะในระบบขนาดเล็กหรือผู้ที่เน้นความปลอดภัย
doas
มาจาก OpenBSD ใช้งานง่ายและตั้งค่าสั้นกว่า sudo
ตัวอย่าง:
doas apt update
ไฟล์ config คือ /etc/doas.conf
เช่น
permit nopass :wheel
ตั้งให้สมาชิกกลุ่ม wheel ใช้ doas โดยไม่ต้องใส่รหัสผ่าน
แต่ใน Linux บางดิสโทรต้องติดตั้งเพิ่มเอง เลือกใช้งานตามความเหมาะสมกับความต้องการ
6. ข้อผิดพลาดและการแก้ปัญหาทั่วไป
Error: “ผู้ใช้ไม่ได้อยู่ใน sudoers file”
ชื่อผู้ใช้ is not in the sudoers file. This incident will be reported.
เกิดเมื่อ ผู้ใช้ปัจจุบันไม่มีสิทธิ์ใช้ sudo มักเกิดกับ user ที่ยังไม่ได้ถูกเพิ่มเข้ากลุ่ม sudo
วิธีแก้:
- ล็อกอินด้วย user ที่เป็น root หรือมีสิทธิ์ sudo
- เพิ่ม user เป้าหมายเข้า group sudo
sudo usermod -aG sudo ชื่อผู้ใช้
จากนั้น logout แล้ว login ใหม่ user จะใช้ sudo ได้
Error “Permission denied” เมื่อใช้ redirect/pipe
Permission denied
แม้จะใช้ sudo
กับคำสั่ง แต่ redirect หรือ pipe จะทำงานด้วยสิทธิ์ user ปกติ จึง error ได้
ตัวอย่างผิด:
sudo echo "test" > /etc/test.conf
วิธีถูก:
echo "test" | sudo tee /etc/test.conf
หรือเขียนหลายบรรทัด ใช้ sudo tee
หรือ sudo bash -c
เช่น
sudo bash -c 'echo "line1" > /etc/test.conf'
แก้ไข sudoers ผิดจนใช้ sudo ไม่ได้
ถ้าแก้ไฟล์ sudoers
แล้วผิด syntax sudo อาจใช้งานไม่ได้ ซึ่งอันตรายมาก
วิธีแก้:
- ล็อกอิน root (Ubuntu ปิด root โดย default ต้องใช้วิธีอื่น เช่น recovery mode)
- รันคำสั่งนี้เพื่อแก้ไข
pkexec visudo
ถ้าใช้ pkexec ไม่ได้ ให้ boot เข้า recovery mode แล้วแก้ไขไฟล์ /etc/sudoers
โดยตรง
ป้องกันไว้เสมอด้วยการใช้ sudo visudo
ในการแก้ไขเท่านั้น
Error “sudo: command not found”
sudo: command not found
เกิดเมื่อไม่ได้ติดตั้ง sudo
หรือ PATH มีปัญหา
วิธีแก้:
- ล็อกอิน root แล้วติดตั้ง sudo:
apt update
apt install sudo
- หรือระบุ path ตรงไปที่
/usr/bin/sudo
/usr/bin/sudo ls
7. คำถามที่พบบ่อยเกี่ยวกับ sudo
Q1. sudo ต่างจาก su อย่างไร?
A:sudo
คือ “ยกระดับสิทธิ์สำหรับคำสั่งเฉพาะชั่วคราว” ส่วน su
คือ “เปลี่ยนตัวเองเป็นผู้ใช้รายอื่น (โดยปกติคือ root) ทั้งหมด”
sudo
: อยู่ user เดิม เพิ่มสิทธิ์แค่คำสั่งที่รันsu
: สลับ session ไปเป็น user อื่นเลย
ด้วยเหตุผลด้านความปลอดภัยและตรวจสอบประวัติ ปัจจุบันจึงนิยมใช้ sudo
มากกว่า
Q2. ใช้ sudo ต้องใช้รหัสผ่าน root ไหม?
A:
ปกติ ใช้รหัสผ่านของตัวเอง (user ที่ login) ไม่ต้องใช้รหัสผ่าน root
เพื่อลดความเสี่ยงรหัสผ่าน root หลุด และติดตามประวัติการใช้งานได้
Q3. log การใช้ sudo เก็บที่ไหน?
A:
ดิสโทรส่วนใหญ่จะบันทึก log การใช้ sudo
ไว้ที่:
- Ubuntu/Debian:
/var/log/auth.log
- RHEL/CentOS:
/var/log/secure
- ระบบที่ใช้ systemd:
journalctl _COMM=sudo
ช่วยให้ตรวจสอบย้อนหลังหากเกิดปัญหาหรือการใช้งานไม่ถูกต้อง
Q4. ถ้าแก้ไขไฟล์ sudoers ผิดต้องทำอย่างไร?
A:
ก่อนอื่นควรแก้ไขผ่าน sudo visudo
เสมอ
แต่ถ้าพลาด syntax error จนใช้ sudo ไม่ได้ ให้ลองวิธีเหล่านี้:
- login ด้วย root แล้วใช้
visudo
แก้ไข - บน Ubuntu สามารถ boot เข้า “recovery mode” แล้วแก้ในฐานะ root
- ใช้
pkexec visudo
(ถ้า polkit เปิดใช้งานอยู่)
เมื่อแก้ไขเสร็จควรทดสอบให้แน่ใจว่ากลับมาใช้งานได้
Q5. มีวิธีได้สิทธิ์ root โดยไม่ใช้ sudo หรือไม่?
A:
มี แต่ ไม่แนะนำเพราะเสี่ยงด้านความปลอดภัย
ตัวอย่างเช่น:
- ใช้
su
เพื่อเปลี่ยนเป็น root (ต้องใช้รหัสผ่าน root) - login ด้วย root โดยตรง (Ubuntu จะปิด root โดย default)
Linux ส่วนใหญ่เน้นหลีกเลี่ยง root ตรง ใช้ sudo แทนจะปลอดภัยกว่า
Q6. ใช้ sudo กับแอป GUI ได้ไหม?
A:
ไม่แนะนำ ตัวอย่างเช่น sudo gedit
อาจทำให้ไฟล์ config ของแอปเสียได้ เพราะเขียนไฟล์ในฐานะ root
หากจำเป็นต้องใช้ GUI admin ให้ใช้ gksudo
หรือ pkexec
(แล้วแต่ระบบ) เช่น
pkexec gedit
8. สรุป
เข้าใจบทบาทของ sudo อย่างถูกต้อง
บทความนี้ได้อธิบายเกี่ยวกับคำสั่ง sudo
ที่สำคัญมากใน Linux และ Unix ทั้ง บทบาทหลัก วิธีใช้งาน การตั้งค่า เทคนิคพิเศษ ความปลอดภัย ข้อผิดพลาดที่พบบ่อย และ FAQ
sudo
ไม่ใช่แค่ “เติมหน้าคำสั่ง” แต่เป็น กลไกการควบคุมสิทธิ์เพื่อรักษาความปลอดภัยของระบบ
การใช้ sudo อย่างเหมาะสมจะช่วยป้องกันปัญหา
ควรระวังจุดต่อไปนี้เพื่อใช้ sudo
อย่างปลอดภัย:
- ใช้สิทธิ์เท่าที่จำเป็น (Least Privilege Principle)
- ตั้งค่าด้วย
visudo
เพื่อป้องกัน syntax error - ตรวจสอบ log การใช้งานเป็นประจำ
- ระวังการใช้กับ redirect/pipe
- หลีกเลี่ยงการใช้กับแอป GUI
หากละเลยจุดเหล่านี้ อาจเกิดปัญหา เช่น ไฟล์เสีย การตั้งค่ากลับไม่ได้ หรือ sudo ใช้ไม่ได้
เลือกวิธีการจัดการระบบที่เหมาะกับตัวเอง
Linux มีความยืดหยุ่นสูง sudo
ไม่ใช่ทางเลือกเดียว ยังมี doas
หรือเครื่องมืออื่น ๆ ที่อาจเหมาะกับ style หรือ policy ของคุณ
เลือกวิธีที่ตอบโจทย์ความปลอดภัยและการดูแลระบบของคุณเอง
ท้ายที่สุด
การเข้าใจ sudo
คือ จุดเริ่มต้นของการเข้าใจ Linux
อย่าคิดว่าเป็นแค่คำสั่งเสริม แต่คือ “กุญแจ” สำคัญของระบบ ป้องกันปัญหาและดูแลความปลอดภัยให้ทั้งเครื่อง
หวังว่าเมื่อใช้งาน Linux ครั้งต่อไป คุณจะใช้ sudo
ได้อย่างมั่นใจและปลอดภัยมากยิ่งขึ้น!