“Chmod 777”  Permission ตัวร้าย อันตรายที่ต้องรู้

Chanakan Budrak/ November 20, 2020/ Knowledge Base/ 0 comments

การตั้งค่ากำหนดสิทธิ์ (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/

จบการศึกษาจากคณะมนุษยศาสตร์ มหาวิทยาลัยศรีนครินทรวิโรฒ

มีความชื่นชอบและติดข่าวสารวงการเทคโนโลยีใหม่ ๆ อยู่เสมอ ด้วยความที่เทคโนโลยีเป็นเรื่องที่ใกล้ตัวมาก จึงมีความเชื่อว่าแม้จะเป็นคนธรรมดาทั่วไปก็สามารถเรียนรู้เรื่องเทคโนโลยีได้

Leave a Comment

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*