การตั้งค่ากำหนดสิทธิ์ (Permission) เรียกได้ว่าเป็นหนึ่งในสิ่งที่ผู้ดูแลระบบต้องให้ความสำคัญเป็นอันดับต้น ๆ เลยทีเดียว เพราะหากเราตั้งค่าไม่ดี อาจจะทำให้ผู้ไม่หวังดีเข้ามาเปลี่ยนโค้ด หรือโจมตีเซิร์ฟเวอร์ของเราได้ วันนี้เราเลยอยากจะพาทุกคนมาทำความรู้จักกับความอันตรายของ Chmod 777 ที่อาจส่งผลร้ายแรงกว่าที่คิด ถ้าพร้อมแล้วลองไปดูกันเลยค่ะ
บทความนี้มีหัวข้ออะไรบ้าง
ทำความรู้จักกับ “Classes” และ “Permission”
วิธีการกำหนดสิทธิ์ให้กับไฟล์และไดเร็กทอรี
เพราะอะไรการใช้ Chmod 777 ถึงอันตราย
วิธีการสแกนไฟล์ และไดเร็กทอรีเพื่อหา 777
วิธีการเปลี่ยนสิทธิ์ไฟล์ และไดเร็กทอรี
ทำความรู้จักกับ “Classes” และ “Permission”
อันแรกเราควรทำความเข้าใจเกี่ยวกับ “Classes” และ “Permission” กันก่อน โดยระบบปฏิบัติการยูนิกซ์ (Unix) ซึ่งรวมไปถึง Linux และ Mac OS ที่เราใช้กันอยู่นั้นจะมาพร้อมกับกลไกการกำหนดสิทธิ์เข้าถึงไฟล์ที่สามารถตั้งค่าได้ว่า “ใคร” สามารถ “ทำอะไร” ได้บ้างซึ่งก็คือ “Classes” และ “Permission” นั่นเองโดยมีรายละเอียดดังนี้
Classes : เป็นการกำหนดว่า “ใคร” จะสามารถเข้าถึงได้บ้าง โดยจะแบ่งออกเป็น 3 ประเภทดังนี้
- Owner คือ ชื่อเจ้าของ หรือผู้สร้างไฟล์ หรือไดเร็กทอรีนั้น ๆ ขึ้นมา โดยสามารถเปลี่ยนแปลงสิทธิ์ได้
- Group คือ กลุ่มของผู้ใช้งานที่มีสิทธิ์เข้าใช้งานไฟล์ หรือไดเร็กทอรีร่วมกัน
- Public หรือ Other คือ ผู้ใช้งานทั่วไปที่เป็น Owner และไม่ได้อยู่ใน Group
Permissions : เป็นการกำหนดว่า “สามารถทำอะไร” กับไฟล์ และไดเร็กทอรีนั้น ๆ ได้บ้าง ซึ่งจะแบ่งออกเป็น 3 ระดับดังนี้
- Read คือ ระดับที่สามารถอ่านไฟล์ได้ใน “Text Editor” หรือสามารถแสดงรายชื่อไฟล์ในไดเร็กทอรีได้โดยใช้คำสั่ง ls
- Write คือ ระดับที่สามารถเขียนไฟล์ได้ โดยทำได้ทั้งเขียน เปลี่ยน แก้ไข สร้าง ลบไฟล์ได้ ส่วนไดเร็กทอรีสามารถสร้าง ลบ ย้าย เปลี่ยนชื่อได้
- Execute คือ ระดับที่สามารถสั่งประมวลผลไฟล์ได้ และสามารถเข้าถึงไดเร็กทอรีได้ด้วยคำสั่ง cd
วิธีการกำหนดสิทธิ์ให้กับไฟล์และไดเร็กทอรี
สำหรับการกำหนดสิทธิ์การเข้าถึงไฟล์ และไดเร็กทอรีนั้นจะใช้ตัวอักษร หรือตัวเลข ในการกำหนดความสิทธิ์และความสามารถต่าง ๆ ดังนี้
สิทธิ์ในการ Write Read และ Execute จะแทนค่าได้ดังนี้
- r (read) = 4
- w (write) = 2
- x (execute) = 1
- ไม่มีสิทธิ์ = 0
สิทธิ์ที่แทนค่าทางด้านบนเมื่อนำมารวมกันจะได้ระดับการกำหนดสิทธิ์ของแต่ละ Classes ดังนี้
- 0 (0+0+0) คือ ไม่สามารถทำอะไรได้เลยกับ Files หรือ Folder
- 1 (0+0+1) คือ สามารถเรียก Files หรือ Folder มาประมวลผลอย่างเดียว
- 2 (0+2+0) คือ สามารถเขียนใน Files หรือ Folder ได้
- 3 (0+2+1) คือ สามารถเขียนและประมวลผล ใน Files หรือ Folder ได้
- 4 (4+0+0) คือ สามารถเรียก Files หรือ Folder มาอ่านได้อย่างเดียว
- 5 (4+0+1) คือ สามารถอ่านและประมวลผล ใน Files หรือ Folder ได้
- 6 (4+2+0) คือ สามารถอ่านและเขียน ใน Files หรือ Folder ได้
- 7 (4+2+1) คือ การกำหนด Files หรือ Folder ได้ทุกอย่างทั้ง อ่าน เขียน และประมวลผล
ซึ่งการกำหนดสิทธิ์ของแต่ละ Classes คือการนำตัวเลขของแต่ละระดับมาเรียงกัน ยกตัวอย่างเช่น
- Owner: rwx=4+2+1=7 / มีสิทธ์ในการกำหนด Files หรือ Folder ได้ทุกอย่างทั้ง อ่าน เขียน และประมวลผล
- Group: r-x=4+0+1=5 / มีสิทธ์ในการอ่านและประมวลผล ใน Files หรือ Folder ได้
- Others: r-x=0+0+0=0 / ไม่สามารถทำอะไรได้เลยกับ Files หรือ Folder
วิธีการเรียกดูตัวเลขที่แสดงสิทธิ์ของไฟล์ สามารถเรียกดูได้โดยใช้คำสั่ง stat
# stat -c “%a” <file name>
วิธีการเรียกดูสิทธิ์ในการ Write , Read และ Execute ของไฟล์ทั้งหมด สามารถเรียกดูได้โดยใช้คำสั่ง II
# ll
เพราะอะไรการใช้ Chmod 777 ถึงอันตราย
อย่างที่เราเห็นกันแล้วว่าการกำหนดสิทธิ์นั้นมีรูปแบบอย่างไรบ้าง ดังนั้นหากเรากำหนดสิทธิ์เป็น 777 ก็เท่ากับว่า “ทุกคน” จะสามารถทำอะไรกับไฟล์หรือไดเร็กทอรีนั่นเอง ซึ่งถ้าหากผู้ไม่หวังดีรู้เข้าก็จะสามารถเข้าถึงไฟล์ และไดเร็กทอรีทำกำหนดสิทธิ์เป็น 777 เพื่อใส่โค้ดหรือไฟล์เพื่อโจมตีเซิร์ฟเวอร์ของเราได้นั้นเอง
นอกจากนี้แล้ว Script ทุกประเภทไม่ว่าจะเป็น php phtml และ html ไฟล์ ก็ไม่ควรที่จะกำหนดสิทธิ์เป็น 777 เพราะจะทำให้ผู้ไม่หวังดีสามารถเข้าถึงเพื่อแก้ไขโค้ด หรือโจมตีเซิร์ฟเวอร์ได้เช่นเดียวกัน
ดังนั้นการใช้ 777 จึงควรหลีกเลี่ยง หรือระมัดระวังในการใช้งาน ซึ่งโดยส่วนมากแล้วจะใช้ในกรณีอัปโหลด IMAGES หรือไฟล์บางประเภทที่ไม่สามารถประมวลผลได้ หรือในบางกรณีที่ไดเร็กทอรีนั้นมีความปลอดภัยสูงอยู่แล้วเท่านั้น
วิธีการสแกนไฟล์ และไดเร็กทอรีเพื่อหา 777
ทำการ SSH เข้าสู่เซิร์ฟเวอร์ของคุณแล้วพิมพ์คำสั่ง ถ้ามีไฟล์ตรงตามเงื่อนไขที่กำหนด output จะแสดงชื่อไฟล์ดังต่อไปนี้
- คำสั่ง เพื่อสแกนหาทุกไฟล์ที่อยู่ในไดเร็กทอรีนี้ ที่กำหนดสิทธิ์ 777
find . -perm 777 -name “*.*”
- คำสั่ง เพื่อสแกนหาไฟล์ที่มีนามสกุล php ที่กำหนดสิทธิ์ 777
find . -perm 777 -name “*.php”
- คำสั่ง เพื่อสแกนหาไฟล์ temp.txt. ที่กำหนดสิทธิ์ 777
find . -perm 777 -name temp.txt
วิธีการเปลี่ยนสิทธิ์ไฟล์ และไดเร็กทอรี
เมื่อพบไฟล์ หรือไดเร็กทอรีที่ต้องการแก้ไขแล้ว เราสามารถเปลี่ยนสิทธิ์ได้ทีละไฟล์ แต่หากต้องการหาและเปลี่ยนไฟล์ทั้งหมดในเวลาเดียวกันสามารถทำได้ด้วยคำสั่ง
find . -name ‘*.php’ -exec chmod 755 {} \;
ไฟล์ที่มีนามสกุล php ทั้งหมดจะถูกเปลี่ยนสิทธิ์เป็น 755
สรุป
ทีนี้เราก็ทราบกันแล้วใช่มั้ยคะ การตั้งหรือกำหนดสิทธิ์ 777 นั้นอันตรายกว่าที่คิด เพราะฉะนั้นเราจึงควรระมัดระวังในการใช้ และหมั่นตรวจสอบสิทธิ์ไฟล์ต่าง ๆ ให้ดี เพื่อที่เราจะได้ไม่พลาดเปิดช่องให้ผู้ไม่หวังดีเข้ามาโจมตีเราได้นั่นเอง
อ้างอิงจาก
Scanning your server for 777 files and directories: https://webcs.com/webcsdocs/docs5/777scan.html
Scan Find Files Folders With 777 Permissions PHP SCRIPT: http://chinashoppingsites.blogspot.com/2015/12/scan-find-files-folders-with-777.html
What Does chmod 777 Mean: https://linuxize.com/post/what-does-chmod-777-mean/