sudo คืออะไร? คู่มือการใช้ sudo ใน Linux สำหรับมือใหม่ | ปลอดภัยและใช้งานจริง

目次

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

วิธีแก้:

  1. ล็อกอินด้วย user ที่เป็น root หรือมีสิทธิ์ sudo
  2. เพิ่ม 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 อาจใช้งานไม่ได้ ซึ่งอันตรายมาก

วิธีแก้:

  1. ล็อกอิน root (Ubuntu ปิด root โดย default ต้องใช้วิธีอื่น เช่น recovery mode)
  2. รันคำสั่งนี้เพื่อแก้ไข
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 ได้อย่างมั่นใจและปลอดภัยมากยิ่งขึ้น!