ใน Linux ทุกไฟล์และ Directory มีเจ้าของ 2 ระดับ ได้แก่ User Owner และ Group Owner ซึ่งควบคุมว่าใครสามารถใช้สิทธิ์ Owner และ Group ได้บ้าง เมื่อ Service หรือทีมงานขยายตัว การเปลี่ยน Ownership อย่างถูกต้องมีความสำคัญมากต่อความปลอดภัยและการทำงานร่วมกัน
บทความนี้อธิบายคำสั่ง chown และ chgrp สำหรับจัดการ Ownership ของไฟล์และ Directory บน Linux
ความเข้าใจเรื่อง Ownership
ทุกไฟล์ใน Linux มีเจ้าของ 2 ส่วน คือ User Owner (ผู้ใช้ที่เป็นเจ้าของ) และ Group Owner (กลุ่มที่เป็นเจ้าของ) เมื่อสร้างไฟล์ใหม่ ระบบจะกำหนด User Owner เป็น User ที่สร้าง และ Group Owner เป็น Primary Group ของ User นั้น การดู Ownership ทำได้ด้วย ls -l ซึ่งแสดงในคอลัมน์ที่ 3 (user) และ 4 (group)
# ดู ownership ของไฟล์
ls -l /var/www/html/index.php
# -rw-r--r-- 1 www-data www-data 1234 Apr 16 script.php
# └───────┘ └───────┘
# user owner group owner
# ดู ownership แบบละเอียด (รวม numeric UID/GID)
ls -ln /var/www/html/
chown — เปลี่ยน User Owner
chown (change owner) ใช้เปลี่ยน User Owner และ Group Owner ของไฟล์ มีสิทธิ์ใช้ได้เฉพาะ root หรือ User ที่เป็นเจ้าของไฟล์นั้น
# เปลี่ยน user owner
chown alice file.txt
# เปลี่ยน user owner และ group owner พร้อมกัน
chown alice:developers file.txt
chown alice:webteam /var/www/html/app.php
# เปลี่ยนเฉพาะ group owner (เทียบเท่า chgrp)
chown :www-data /var/www/html/
# เปลี่ยน ownership ทั้ง directory แบบ recursive
chown -R www-data:www-data /var/www/html/
# ใช้ UID และ GID แทนชื่อ
chown 1001:1500 file.txt
Option ที่ใช้บ่อย
-R— เปลี่ยน Ownership แบบ Recursive (ทั้ง Directory และ Subdirectory)-v— แสดงรายละเอียดการเปลี่ยนแปลงแต่ละไฟล์--from=user:group— เปลี่ยนเฉพาะไฟล์ที่มี Owner ตรงตามที่ระบุ--reference=file— ใช้ Ownership เดียวกับ Reference File
chgrp — เปลี่ยน Group Owner
chgrp (change group) ใช้เปลี่ยนเฉพาะ Group Owner โดยไม่แตะ User Owner เป็นคำสั่งเฉพาะทางที่ใช้เมื่อต้องการปรับเฉพาะ Group โดยไม่กระทบ Owner เดิม
# เปลี่ยน group ของไฟล์เดียว
chgrp developers project.conf
# เปลี่ยน group แบบ recursive
chgrp -R webteam /var/www/html/
# เปลี่ยน group โดยใช้ GID
chgrp 1500 shared_file.txt
# ใช้ --reference เพื่อ copy group จากไฟล์อ้างอิง
chgrp --reference=/var/www/html /var/www/html/uploads/
Use Case จริง — Web Server Setup
ตัวอย่างการตั้งค่า Ownership สำหรับ Web Server ที่มีทั้ง Web Process (www-data) และ Developer Team (webteam) ต้องการเข้าถึงไฟล์เดียวกัน
# กรณี: Apache/Nginx รันด้วย www-data, developer ต้องแก้ไขไฟล์ได้
# 1. กำหนด ownership ให้ web root เป็น www-data:webteam
chown -R www-data:webteam /var/www/html/
# 2. ตั้ง permission ให้ group write ได้
chmod -R 775 /var/www/html/
# 3. ตั้ง SGID ให้ไฟล์ใหม่ inherit group webteam อัตโนมัติ
chmod g+s /var/www/html/
# ผลลัพธ์: www-data รัน web ได้, developer ใน group webteam แก้ไขไฟล์ได้
# และ other (ไม่ใช่ member) เข้าถึงไม่ได้
Use Case จริง — Deploy User
การตั้งค่า Ownership สำหรับ Deployment Process ที่ต้องการแยก User ระหว่าง Deploy กับ Runtime
# สร้าง deploy user สำหรับ CI/CD
useradd -m -s /bin/bash deploy
# กำหนด app directory เป็น deploy user
chown -R deploy:deploy /opt/myapp/
# ให้ www-data อ่านได้ แต่ deploy เท่านั้นที่เขียนได้
chown -R deploy:www-data /opt/myapp/
chmod -R 750 /opt/myapp/
chmod -R 755 /opt/myapp/public/
# ตรวจสอบ
ls -la /opt/myapp/
ตรวจสอบและแก้ไข Ownership หลัง Restore
เมื่อ Restore ไฟล์จาก Backup หรือย้ายข้อมูลข้าม Server Ownership มักเปลี่ยนไปและต้องแก้ไขให้ถูกต้อง
# ค้นหาไฟล์ที่ไม่มี owner ที่ถูกต้อง (orphaned files)
find /var/www -nouser -o -nogroup 2>/dev/null
# ค้นหาไฟล์ที่ owner เป็น user เฉพาะ
find /var/www -user olduser 2>/dev/null
# เปลี่ยน ownership ทุกไฟล์จาก olduser เป็น newuser
find /var/www -user olduser -exec chown newuser:webteam {} \;
# ตรวจสอบ ownership ของ web root ทั้งหมด
ls -la /var/www/html/
Best Practices
- Principle of Least Privilege — กำหนด Ownership เฉพาะที่จำเป็น ไม่ให้ Service มีสิทธิ์เกินความต้องการ
- ใช้ Service Account — Web Server ควรรันด้วย User เฉพาะ (เช่น www-data, nginx) ไม่ใช่ root
- ระวัง chown -R บน / หรือ /etc — การรัน
chown -Rบน System Directory อาจทำให้ระบบเสียหายถาวร - ตรวจสอบก่อนเปลี่ยน — ใช้
ls -laดู Ownership ปัจจุบันก่อนเปลี่ยนเสมอ โดยเฉพาะเมื่อใช้-R - Audit สม่ำเสมอ — ค้นหา Orphaned File และไฟล์ที่มี Ownership ไม่ถูกต้องเป็นประจำ
สรุป
chown และ chgrp เป็นคำสั่งสำคัญสำหรับจัดการ Ownership ของไฟล์บน Linux chown user:group file ใช้เปลี่ยนทั้ง User และ Group Owner ในคำสั่งเดียว ส่วน chgrp ใช้เปลี่ยนเฉพาะ Group การตั้งค่า Ownership อย่างถูกต้องร่วมกับ Permission ที่เหมาะสมเป็นรากฐานสำคัญของความปลอดภัยบน Server
แนะนำบริการ DE
การจัดการ Ownership และ Permission บน Server จริงต้องการ Root Access เต็มรูปแบบ Cloud VPS ของ DE ให้คุณฝึกตั้งค่า chown, chgrp และ Permission บน Web Server จริง ทดลองสถานการณ์ต่าง ๆ เช่น Deploy User, Service Account และ Shared Directory ได้อย่างอิสระ
สำหรับผู้ที่ต้องการโฮสต์เว็บไซต์โดยไม่ต้องจัดการ Ownership ระดับ System Cloud Hosting ของ DE จัดการ Permission และ Ownership ให้โดยอัตโนมัติผ่าน Control Panel ที่ใช้งานง่าย

