เนื่องจาก Linux เป็น multi-user operating system จึงมี mechanism ตั้งค่าและจัดการ file permissions เพื่อให้เฉพาะ authorized processes และ users เข้าถึง directories และ files ได้ ขณะใช้ Linux อาจเจอ "Permission denied" error บ่งชี้ว่าไม่มี privileges ที่จำเป็น Tutorial นี้แสดงวิธีเปลี่ยนสิทธิ์ไฟล์แบบ recursive ใน Linux เพื่อให้ permission settings ใช้กับ sub-folders และ files ด้วย
วิธีตรวจสอบ file permission(s) ใน Linux
เมื่อ "permission denied" error เกิดขึ้นบน file หรือ directory operation เริ่มด้วยการตรวจสอบ permissions ที่จัดสรรให้ user, group และ other
ใช้คำสั่ง ls -l ตัวอย่าง permissions ของไฟล์และ directories ใน "/var":
Output ข้างต้นมีข้อมูลเฉพาะ:
- คอลัมน์แรก: file และ directory permissions ตัวอักษรแรกบ่งชี้ type:
d= directory,l= symbolic link,-= regular file - ตัวอักษร 9 ตัวถัดไป จัดเป็น 3 กลุ่ม:
uuser,ggroup,oowner แสดง file/directory permissionsr= read,w= write,x= execute
รู้ file permissions แล้ว เปลี่ยนได้ง่าย
วิธีใช้ chmod เปลี่ยน file permissions
คำสั่ง chmod เป็นวิธีง่ายที่สุดสำหรับเปลี่ยน file permissions ใน Linux Syntax ทั่วไป:
chmod {permission}{operator}{mode}
- Permission: สิทธิ์ที่ให้กับ user, group, owner, หรือ all
- Operator: บ่งชี้สิทธิ์ให้ assignee:
+ให้สิทธิ์,-ปฏิเสธสิทธิ์,=ระบุสิทธิ์ที่ตั้งค่า - Mode: กำหนดสิทธิ์ที่ตั้งค่า:
rread,wwrite,xexecute
ตัวอย่าง ปฏิเสธทุกคน write access ไปที่ backup directory ใน "/var":
sudo chmod -w /var/backups
แม้ chmod จะมีประสิทธิภาพ แต่เปลี่ยน permissions เฉพาะ directory หรือ file ที่ระบุเท่านั้น
โชคดีที่สามารถเปลี่ยน permissions แบบ recursive ของ directory/file และ sub-directories/files ได้ ใช้ chmod recursive -r option
ตัวอย่าง ลบ read permissions แบบ recursive สำหรับ "/var/backup" และทุกไฟล์/ subdirectories permissions ปัจจุบัน:
drwxrwxrwx 2 root root 4096 Jul 15 06:25 backups
รัน chmod recursive:
sudo chmod -r -r /var/backups
ตอนนี้เห็น permissions เปลี่ยนไปแล้ว
Recursive change permission ด้วย find
ปกติจะไม่ set files และ directories ด้วย permissions เหมือนกัน เพราะต้องการ execute permission เพื่อ cd เข้า directory แต่ไฟล์ส่วนใหญ่ไม่ต้องการ execute permission
แก้ด้วย find utility ใน Linux ให้หาเฉพาะ files หรือ directories และ set permissions บนพวกมัน
ใช้ directory "/var/log" ซึ่งมีทั้ง files และ directories
ตั้ง permissions เฉพาะ files ใช้ find command ด้วย -type f option
ตัวอย่างคำสั่ง:
sudo find /var/log/ -type f -exec chmod 777 {} \;
ในตัวอย่าง ใช้ find ค้นหา "/var/log" สำหรับ files แล้ว set read, write, execute permissions ให้ users, groups และ all
ทำได้เหมือนกันสำหรับ directories ระบุ -type d เพื่อหาเฉพาะ directories
ตัวอย่าง:
sudo find /var/log/ -type d -exec chmod 755 {} \;
ในตัวอย่าง ตั้ง permission 755 ให้ directories เท่านั้น ไม่ใช่ทั้ง files และ directories
ตรวจสอบได้ด้วย ls -la
จะเห็น files ทั้งหมด permission 777 ส่วน directories เป็น 755
สรุป
การรู้วิธีเปลี่ยน file permissions ใน Linux เป็น essential skill ช่วยป้องกัน unauthorized access และ modifications ไฟล์และ directories นอกจากนี้ สามารถเปลี่ยน file ownership เพื่อจำกัดการเข้าถึง หรือใช้ access control list สำหรับการควบคุมละเอียดกว่านี้