การจัดการ 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 แต่ละตัวมีสิทธิ์เพียงพอที่จำเป็น ไม่มากเกินไป
