Password Protect Directory ใน cPanel ล็อคโฟลเดอร์

จำกัดการเข้าถึงโฟลเดอร์บนเว็บด้วยรหัสผ่าน ผ่าน Directory Privacy ใน cPanel ง่ายใน 5 นาที

Password Protect Directory ใน cPanel ล็อคโฟลเดอร์ Security

หากคุณมีโฟลเดอร์บนเว็บที่ต้องการซ่อนจากสาธารณะ เช่น ไฟล์สำรองข้อมูล โฟลเดอร์แอดมิน พื้นที่สำหรับทีมงาน หรือไฟล์ทดสอบที่ยังไม่พร้อมเปิดเผย การใช้ฟีเจอร์ Directory Privacy (หรือที่เรียกว่า Password Protect Directories) ใน cPanel คือวิธีที่ง่ายและได้ผลที่สุด โดยไม่ต้องแก้ไขโค้ดหรือติดตั้งปลั๊กอินใดเพิ่มเติม

ฟีเจอร์นี้ทำงานโดยการสร้างไฟล์ .htaccess และ .htpasswd ให้อัตโนมัติในโฟลเดอร์ที่คุณเลือก เมื่อผู้เยี่ยมชมพยายามเข้าถึง URL ของโฟลเดอร์นั้น เบราว์เซอร์จะแสดงกล่องป๊อปอัพขอ Username และ Password ก่อนเสมอ

Directory Privacy คืออะไร และทำงานอย่างไร

Directory Privacy เป็นฟีเจอร์มาตรฐานใน cPanel ที่ใช้กลไกของ Apache HTTP Server ในการป้องกันโฟลเดอร์ด้วย Basic Authentication โดยหลักการทำงานคือ:

  1. cPanel สร้างไฟล์ .htaccess ภายในโฟลเดอร์ที่คุณเลือก พร้อมคำสั่ง AuthType Basic
  2. สร้างไฟล์ .htpasswd ที่เก็บ Username และ Password แบบเข้ารหัส (hashed) ไว้นอก Document Root
  3. เมื่อเบราว์เซอร์ร้องขอไฟล์ในโฟลเดอร์นั้น Apache จะตรวจสอบ credentials ก่อนส่งเนื้อหาให้
  4. หากไม่ผ่านการยืนยัน จะได้รับ HTTP 401 Unauthorized และกล่อง login จะปรากฏขึ้น
หมายเหตุ: Directory Privacy ป้องกันการเข้าถึงผ่านเบราว์เซอร์เท่านั้น ไม่ใช่การเข้ารหัสไฟล์จริง หากต้องการความปลอดภัยระดับสูงกว่านี้ ควรเก็บไฟล์สำคัญไว้นอก public_html

วิธีตั้งค่า Password Protect Directory ผ่าน cPanel

ขั้นตอนที่ 1: เข้าสู่ cPanel และหา Directory Privacy

เข้าสู่ cPanel ของคุณที่ URL เช่น yourdomain.com/cpanel หรือ yourdomain.com:2083 จากนั้นมองหาหัวข้อ Files และคลิกที่ Directory Privacy (ในบาง cPanel เวอร์ชันเก่าอาจชื่อ "Password Protect Directories")

ขั้นตอนที่ 2: เลือกโฟลเดอร์ที่ต้องการล็อค

ระบบจะแสดงโครงสร้างโฟลเดอร์เริ่มต้นจาก Home Directory ของคุณ ให้นำทางไปยังโฟลเดอร์ที่ต้องการ เช่น:

เมื่อพบโฟลเดอร์ที่ต้องการแล้ว ให้คลิกชื่อโฟลเดอร์นั้น (ไม่ใช่ไอคอน)

ขั้นตอนที่ 3: เปิดใช้งานการป้องกัน

ในหน้าที่ปรากฏขึ้น ให้ทำตามนี้:

  1. ติ๊กถูกที่ "Password protect this directory"
  2. พิมพ์ชื่อที่จะแสดงในกล่อง login popup ลงในช่อง "Label" เช่น "Admin Area" หรือ "Members Only"
  3. คลิก "Save" หรือ "Submit"

ขั้นตอนที่ 4: สร้าง Username และ Password

หลังจาก Save แล้ว ระบบจะย้อนกลับไปหน้าเดิม และจะมีฟอร์มสร้าง User ปรากฏขึ้นด้านล่าง ให้:

  1. พิมพ์ Username ที่ต้องการ (ควรหลีกเลี่ยงการใช้ admin หรือ root)
  2. พิมพ์ Password ที่แข็งแกร่ง (อย่างน้อย 12 ตัวอักษร ผสมตัวอักษรพิมพ์เล็ก พิมพ์ใหญ่ ตัวเลข และสัญลักษณ์)
  3. พิมพ์ Password อีกครั้งในช่อง Confirm
  4. คลิก "Add/Modify the Authorized User"

คุณสามารถสร้างผู้ใช้หลายคนได้ โดยทำซ้ำขั้นตอนนี้ ผู้ใช้แต่ละคนจะมี credentials แยกกัน

ขั้นตอนที่ 5: ทดสอบการล็อค

เปิดเบราว์เซอร์ใน Incognito Mode แล้วเข้า URL ของโฟลเดอร์ที่ล็อค เช่น https://yourdomain.com/admin/ หากตั้งค่าถูกต้อง เบราว์เซอร์จะแสดงกล่องขอ Username และ Password ทันที

ทำความเข้าใจไฟล์ .htaccess ที่ cPanel สร้างให้

เมื่อคุณตั้งค่าผ่าน cPanel แล้ว ระบบจะสร้างหรือแก้ไขไฟล์ .htaccess ในโฟลเดอร์นั้น โดยเพิ่มโค้ดประมาณนี้:

# ตัวอย่างไฟล์ .htaccess ที่ cPanel สร้างให้
AuthType Basic
AuthName "Members Only"
AuthUserFile /home/yourusername/.htpasswds/public_html/admin/passwd
Require valid-user

โดยที่:

หากต้องการอนุญาตให้ IP address บางตัวเข้าได้โดยไม่ต้องใส่ Password สามารถแก้ .htaccess เพิ่มเติมได้ผ่าน File Manager ใน cPanel:

# อนุญาต IP ที่กำหนดเข้าได้โดยไม่ต้อง login
AuthType Basic
AuthName "Members Only"
AuthUserFile /home/yourusername/.htpasswds/public_html/admin/passwd
Require valid-user

# Allow specific IP without password (Apache 2.4+)
Satisfy Any
Order deny,allow
Deny from all
Allow from 203.0.113.10
Allow from 198.51.100.0/24
Tip: หากต้องการอนุญาต IP ออฟฟิศเข้าได้โดยไม่ต้องใส่รหัส ให้ใช้วิธีข้างบนแทนการแชร์ Password กับทุกคนในทีม ปลอดภัยและจัดการได้ง่ายกว่า

การเพิ่มหรือลบผู้ใช้ในภายหลัง

คุณสามารถกลับไปที่ Directory Privacy ใน cPanel เมื่อใดก็ได้เพื่อ:

แนวทาง Best Practice ด้าน Security

การล็อคโฟลเดอร์ด้วย Password เป็นจุดเริ่มต้นที่ดี แต่ควรใช้ร่วมกับมาตรการอื่น:


ตรวจสอบว่า Password Protect Directory ทำงานถูกต้อง

หลังจากตั้งค่าแล้ว ให้ทดสอบด้วยคำสั่งต่อไปนี้เพื่อยืนยันว่าการป้องกันทำงานถูกต้อง:

# ทดสอบว่าโฟลเดอร์ถูกป้องกัน (ควรได้ HTTP 401)
curl -I https://yourdomain.com/admin/

# ทดสอบ login ด้วย credentials ที่ถูกต้อง (ควรได้ HTTP 200)
curl -u "myuser:mypassword" -I https://yourdomain.com/admin/

# ทดสอบ login ด้วย credentials ที่ผิด (ควรได้ HTTP 401)
curl -u "wronguser:wrongpass" -I https://yourdomain.com/admin/

# ดูเนื้อหาไฟล์ .htaccess ผ่าน curl (ควรได้ HTTP 403 หรือ 404)
curl -I https://yourdomain.com/admin/.htaccess

# ตรวจสอบ header ที่ได้รับ (ควรเห็น WWW-Authenticate: Basic)
curl -v https://yourdomain.com/admin/ 2>&1 | grep "WWW-Authenticate"
Tip: ผลลัพธ์ที่ถูกต้องคือคำสั่งแรก (ไม่มี credentials) ต้องได้ HTTP/1.1 401 Unauthorized และต้องมี header WWW-Authenticate: Basic realm="..." ปรากฏ หากได้ HTTP 200 โดยไม่ใส่รหัส แสดงว่าการตั้งค่ายังไม่สมบูรณ์

แก้ปัญหาที่พบบ่อย

Error: "500 Internal Server Error" หลังตั้งค่า

มักเกิดจาก syntax ใน .htaccess ผิดพลาด หรือ path ของ AuthUserFile ไม่ถูกต้อง ให้ตรวจสอบผ่าน cPanel File Manager โดยเปิดไฟล์ .htaccess ในโฟลเดอร์นั้น แล้วตรวจดูว่า path ใน AuthUserFile ถูกต้องและไฟล์ .htpasswd มีอยู่จริง:

# ตรวจสอบว่าไฟล์ .htpasswd มีอยู่ด้วยการเปิด cPanel File Manager
# ไปที่ /home/yourusername/.htpasswds/public_html/yourfolder/
# ไฟล์ passwd ควรมีอยู่และมีเนื้อหาในรูปแบบ:
# username:$apr1$randomhash...

Error: กล่อง Login ไม่ปรากฏ แต่เข้าได้เลย

อาจเป็นเพราะเบราว์เซอร์ Cache การตอบสนองเดิมไว้ ให้ลองเปิด Incognito Mode หรือ Private Window ใหม่ หากยังเข้าได้โดยไม่ต้องล็อกอิน อาจเป็นเพราะ:

Error: "You don't have permission to access this resource" (HTTP 403)

ต่างจาก 401 ตรงที่ไม่มีกล่อง login ให้กรอก อาจเกิดจาก Require valid-user ทำงาน แต่ AuthUserFile หา credentials ไม่เจอ หรือ path ผิด ให้ตรวจสอบว่า Username ที่สร้างมีอยู่จริงในรายการ Directory Privacy และลอง Delete แล้วสร้างใหม่:

# ไฟล์ .htpasswd ที่ถูกต้องควรมีเนื้อหาลักษณะนี้
# (แต่ละบรรทัดคือ user หนึ่งคน)
myuser:$apr1$Xl4r2Lk.$RDxQSzBxL.Kc1Yq4mZ0S1
teamlead:$apr1$mn9PqRs2$hT7oE3Kv.pU8zXw1vL6e0

Error: ลืม Password ที่ตั้งไว้

ไม่มีวิธีดู Password เดิมได้เพราะถูก hash ไว้แล้ว แต่สามารถ Reset ได้ง่ายมาก เพียงกลับไปที่ Directory Privacy ใน cPanel พิมพ์ Username เดิมพร้อม Password ใหม่ แล้วคลิก "Add/Modify the Authorized User" ระบบจะเขียนทับ Password เดิมทันที

Error: โฟลเดอร์ย่อย (Subdirectory) ยังเข้าได้โดยไม่ต้อง login

โดยปกติการป้องกันจะครอบคลุมโฟลเดอร์ที่เลือกและโฟลเดอร์ย่อยทั้งหมด แต่หากโฟลเดอร์ย่อยมีไฟล์ .htaccess ของตัวเองที่มีคำสั่ง Satisfy Any หรือ Allow from all อาจ Override การป้องกันได้ ให้ตรวจสอบไฟล์ .htaccess ในโฟลเดอร์ย่อยแต่ละตัว


คำถามที่พบบ่อย

Q: ถ้าล็อคโฟลเดอร์ WordPress ได้ไหม

ได้ แต่ต้องระวัง เพราะ WordPress ใช้ไฟล์ .htaccess อยู่แล้ว หากต้องการล็อคเฉพาะ wp-admin ให้ใช้ Directory Privacy เลือกโฟลเดอร์ public_html/wp-admin โดยตรง ระบบจะสร้าง .htaccess แยกไว้ในนั้น ไม่กระทบ .htaccess หลักของ WordPress ที่ root แต่ควรทดสอบให้แน่ใจว่า WordPress ยังทำงานปกติหลังจากตั้งค่า

Q: Password Protect Directory ต่างจากการซ่อนโฟลเดอร์ด้วย .htaccess ธรรมดาอย่างไร

การซ่อนด้วย Options -Indexes เพียงแค่ป้องกันไม่ให้เห็น Directory Listing (รายการไฟล์) แต่หากรู้ชื่อไฟล์ก็ยังเข้าถึงได้โดยตรง ในขณะที่ Password Protect Directory จะบังคับให้ต้อง login ก่อนเข้าถึงทุกไฟล์ในโฟลเดอร์ รวมถึงไฟล์ที่รู้ชื่ออยู่แล้วด้วย ถือเป็นการป้องกันที่แข็งแกร่งกว่ามาก

Q: สามารถตั้งค่าให้โฟลเดอร์ที่ถูกล็อคแสดงหน้า Login สวยงามแทนกล่อง popup ได้ไหม

กล่อง popup ของ Basic Authentication เป็น UI ที่เบราว์เซอร์สร้างขึ้นเอง ไม่สามารถ Customize ได้ด้วย CSS หรือ HTML หากต้องการหน้า Login ที่สวยงามและ Customize ได้ ควรพิจารณาใช้ PHP Session หรือ CMS ที่มีระบบ Login เช่น WordPress Members Plugin แทน อย่างไรก็ตาม สำหรับการป้องกันโฟลเดอร์ทั่วไป Basic Authentication ผ่าน cPanel นั้นง่ายและเพียงพอในกรณีส่วนใหญ่