การจัดการ User และ Permission บน Linux VPS — คู่มือครบจบ

การจัดการ User และ Permission บน Linux เป็นทักษะพื้นฐานที่ Sysadmin ทุกคนต้องรู้ การตั้งค่าผิดพลาดอาจเปิดช่องโหว่ด้านความปลอดภัย เช่น ไฟล์ config ที่คนทั่วไปอ่านได้ หรือ script ที่รันได้โดยไม่ตั้งใจ

ระบบ User บน Linux

Linux ใช้ระบบ User แบบ Multi-user โดยแต่ละ User มี UID (ตัวเลขเอกลักษณ์) และสามารถเป็นสมาชิกของหลาย Group ได้:

  • root (UID 0) — มีสิทธิ์สูงสุด ทำได้ทุกอย่างบนระบบ
  • System Users (UID 1–999) — ใช้สำหรับ Service ต่างๆ เช่น www-data (Nginx), mysql
  • Regular Users (UID 1000+) — User ทั่วไปที่สร้างเอง

การจัดการ User

# สร้าง User ใหม่
adduser john          # แบบ Interactive (ถามข้อมูลเพิ่มเติม)
useradd john          # แบบ Non-interactive (ไม่สร้าง home dir อัตโนมัติ)
useradd -m -s /bin/bash john   # -m=สร้าง home, -s=shell

# เปลี่ยน Password
passwd john

# แก้ไขข้อมูล User
usermod -aG sudo john         # เพิ่มเข้ากลุ่ม sudo
usermod -aG www-data john     # เพิ่มเข้ากลุ่ม www-data
usermod -s /bin/bash john     # เปลี่ยน shell
usermod -l newname john       # เปลี่ยนชื่อ

# ลบ User
deluser john                  # ลบ user (เก็บ home dir)
deluser --remove-home john    # ลบ user และ home dir

# ดูรายละเอียด User
id john                       # UID, GID, กลุ่ม
groups john                   # กลุ่มที่สังกัด
cat /etc/passwd | grep john   # ข้อมูล user
cat /etc/passwd               # ดู users ทั้งหมด

การจัดการ Group

# สร้างและตั้งค่า Group
groupadd developers           # สร้างกลุ่ม developers
groupdel developers           # ลบกลุ่ม

# เพิ่ม/ลบสมาชิก
usrmod -aG developers john    # เพิ่ม john เข้ากลุ่ม (ไม่ลบ group เดิม)
gpasswd -d john developers    # ลบ john ออกจากกลุ่ม

# ดูข้อมูล Group
cat /etc/group
cat /etc/group | grep developers

ระบบ Permission แบบ rwx

Linux ใช้ระบบ Permission 3 ระดับสำหรับแต่ละไฟล์:

# ตัวอย่างผลลัพธ์ ls -la
-rwxr-xr-- 1 john www-data 4096 Mar 28 10:00 script.sh

# อธิบาย:
# -         = ประเภทไฟล์ (- = file, d = dir, l = symlink)
# rwx       = owner (john): read + write + execute
# r-x       = group (www-data): read + execute
# r--       = others: read only

# r = read    (4)
# w = write   (2)
# x = execute (1)
# รวมกัน: rwx = 7, rw- = 6, r-x = 5, r-- = 4

การใช้ chmod

# chmod แบบตัวเลข (Octal)
chmod 755 script.sh       # rwxr-xr-x — owner ทำได้หมด, group/other อ่าน+รัน
chmod 644 config.php      # rw-r--r-- — owner อ่าน+เขียน, อื่นอ่านอย่างเดียว
chmod 600 .env            # rw------- — เฉพาะ owner เท่านั้น
chmod 700 private/        # rwx------ — เฉพาะ owner เข้าโฟลเดอร์ได้

# chmod แบบตัวอักษร (Symbolic)
chmod +x script.sh        # เพิ่ม execute ให้ทุกคน
chmod u+x script.sh       # เพิ่ม execute ให้ owner
chmod g-w file.txt        # เอา write ออกจาก group
chmod o-r secret.txt      # เอา read ออกจาก others

# chmod แบบ Recursive
chmod -R 755 /var/www/html     # ทุกไฟล์และโฟลเดอร์ภายใน

การใช้ chown

# เปลี่ยนเจ้าของ
chown john file.txt             # owner = john
chown john:developers file.txt  # owner = john, group = developers
chown :www-data file.txt        # เปลี่ยนแค่ group
chown -R www-data:www-data /var/www/html  # ทั้งโฟลเดอร์

# ตั้งค่า WordPress ที่ถูกต้อง
chown -R www-data:www-data /var/www/wordpress
find /var/www/wordpress -type d -exec chmod 755 {} \;
find /var/www/wordpress -type f -exec chmod 644 {} \;

การใช้ sudo

# รันคำสั่งเดียวด้วย sudo
sudo systemctl restart nginx
sudo nano /etc/nginx/nginx.conf

# เปิด Shell เป็น root
sudo -i          # เปลี่ยนเป็น root shell
sudo -s          # root shell โดยไม่เปลี่ยน environment

# ดูว่า user เป็น sudoer หรือไม่
sudo -l

# แก้ไข sudo config (ใช้ visudo เสมอ!)
sudo visudo

# ตัวอย่าง sudoers rules:
john ALL=(ALL:ALL) ALL              # john ใช้ sudo ได้ทุกคำสั่ง
john ALL=(ALL) NOPASSWD: /bin/systemctl   # รัน systemctl โดยไม่ต้องใส่ password

Permission ที่แนะนำสำหรับไฟล์ประเภทต่างๆ

ประเภทไฟล์ Permission เหตุผล
ไฟล์ทั่วไป (HTML, CSS) 644 owner แก้ไขได้, อื่นอ่านอย่างเดียว
โฟลเดอร์เว็บ 755 owner เข้าได้ทุกอย่าง, อื่นเข้า+อ่านได้
.env, ไฟล์ config สำคัญ 600 เฉพาะ owner เท่านั้น
Script ที่รันได้ 755 หรือ 700 ต้องมี execute bit
SSH Private Key 600 SSH จะปฏิเสธถ้า permission สูงเกินไป
wp-config.php 600 หรือ 640 ป้องกันคนอื่นอ่านข้อมูล DB

สรุป

การจัดการ User และ Permission ที่ถูกต้องบน Linux VPS ช่วยลดความเสี่ยงด้านความปลอดภัยได้มาก หลักการสำคัญคือ: ใช้ Principle of Least Privilege เสมอ คือให้ User/Service แต่ละตัวมีสิทธิ์เพียงพอที่จำเป็น ไม่มากเกินไป