ภาพประกอบ : digital-ocean

htpasswd สำหรับเข้า wp-admin บน digitalocean

digitalocean มี htpasswd เป็นเครื่องมือในการเข้าถึงระบบ folder หรือ path ต่างๆที่อยู่ในเว็บของเราบน apache ซึ่งถ้าใครติดตั้ง wordpress ลงบน digitalocean แบบ One-Click Install  ก็จะได้ใช้งานไปด้วยแต่ถ้าไม่ต้องการใช้จะทำอย่างไร มาลองอ่านเรื่องนี้กันนะครับ

ภาพประกอบ : digital-ocean

ภาพประกอบ : digital-ocean

htpasswd สำหรับเข้า wp-admin บน digitalocean

ผมเห็นว่าตอนนี้ digitalocean หรือว่า Cloud Hosting ต่างๆเป็นที่นิยมขึ้นมามากและมีคนใช้งานกันเยอะขึ้นเรื่อยๆ โดยเฉพาะ DO ขอย่อแล้วกันนะครับมันยาว ที่มีราคาถูกมากๆถ้าเทียบกับระบบอื่นๆในรูปแบบนี้  สนนราคาทำเว็บทั่วๆไปอยู่ที่ประมาณ 300 บาทต่อเดือน (แพงอยู่นะถ้าเทียบกับ share host ในไทย) แต่อย่างว่านะครับ ก็สมราคาเค้า แถมเรายังสามารถ set เองได้ ตั้งค่าเองได้ ดูแลเองได้ตั้งแต่ server ยันหน้าเว็บแบบนี้ลูกค้าที่ใช้งานเราเค้าก็ติดใจกันเป็นเรื่องธรรมดา แต่โดยส่วนตัวแนะนำว่าสำหรับเว็บแบบทดลองคือเราอาจจะยังไม่ได้เปิดให่ใช้งานจริงๆหรือเราทำเป็น demo อะไรแบบนี้ เลือกราคา $5 ก็พอได้อยู่นะครับ แต่เมื่อไหร่ใช้งาจริงผมเห็นขนาดเว็บเล็กๆยังล่มเลย RAM มันน้อยไปหน่อยครับ อย่างน้อยเริ่มต้นสำหรับคนใช้งานจริงควรเป็น $10 แล้วละครับ

ภาพประกอบ : ราคาแต่ละ package

ภาพประกอบ : ราคาแต่ละ package

ทีนี้ด้วยความที่ระบบของ DO นี่ลองรับการทำงานแบบติดตั้งง่าย คลิกแค่ครั้งเดียวก็ได้ Server Linux สวยๆขึ้นมาออนไลน์กันเลยทีเดียว แบบนี้ใครๆก็ใช้งานกันทั้งนั้น แต่….เดี๋ยวนะครับ คือว่า ถ้าเราเลือกการติดตั้งแบบนี้ ลองดูตัวอย่างตามภาพประกอบนะครับ

 

ภาพประกอบ : One click

ภาพประกอบ : One click

ที่ปรกติผมใช้งานเองอยู่ก็จะเป็นแบบ WordPress เลยสำหรับเว็บไซต์แต่ถ้าเป็นสำหรับ Web Application ผมก็จะเลือกเป็น LAMP นะครับซึ่งง่ายดีไม่ต้องมานั่งตั้งค่าอะไรเพิ่มเติม จากนั้นพอเราได้ Server มาทาง Apache เข้าจะมีการเข้ารหัสในรูปแบบของ htpasswd ติดมาให้ด้วยเลย เวลาที่เราจะเข้าสู่หน้าสำคัญๆอย่าง wp-admin เพื่อเข้าไปใช้งานทั้งติดตั้งระบบ หรือเขียน post ต่างๆมันก็จะติดขัดเพราะต้องเจอกับการ login ถึง 2 ชั้น นั้นเองครับ

ทีนี้ลองมาทำความรู้จักกับเจ้าไฟล์ htpasswd กันหน่อยดีกว่าครับ

มันคือการปกป้องสิทธิในการเข้าถึง folder ครับ ซึ่งเราจะใช้กันบนระบบของ apache เวลาที่เราต้องการไม่ให้ถูกใครเข้าถึงได้โดยตรงครับ ใช้ได้หมดทุก linux distro ที่ใช้ทำ server นั้นแหละเพราะมันเป็นความสามารถของ apache ครับทีนี้ด้านในของไฟล์ๆนี้เป็นอย่างไร มันก็จะมีแค่รหัสกับ username เท่านั้นครับ แต่เราจำเป็นต้องไปใส่ config เอาไว้ที่ apache2.conf ซึ่งในไฟล์นี้เราจะใส่ code แบบด้านล่างนี้ครับ

<DirectoryMatch ^.*/wp-admin/>
 AuthType Basic
 AuthName "Restricted Area"
 AuthUserFile /etc/apache2/.htpasswd
 Require valid-user
</DirectoryMatch>

อันที่จริงแล้วตอนเราติดตั้งมันก็มาให้เราเลยนั้นแหละครับ 555 ยังไม่ได้เลือกซะหน่อย!! แต่ไม่เป็นไรครับมีแล้วเราก็ลองมาทำความรู้จักกันดีกว่า ตรงนี้เป็นการบอกนะครับว่า url ต่อมาจาก /wp-admin/ นั้นจะให้เรียกใช้งาน password ผ่านทางไฟล์ htpasswd ซึ่งถูกเก็บเอาไว้ที่ folder /etc/apache2/ ครับ เวลาที่เราจะสร้างเจ้าไฟล์นี้คือเราต้องระบุข้อความด้านในให้ครบ เริ่มจากระบุ Directory folder ก่อนจากนั้นก็ไประบุ option ตามนี้ครับ

  • AuthType: ระบุว่าต้องการให้ตรวจสอบด้วยรูปแบบไหน โดยทั่วไปเราก็จะใช้คำว่า Basic ครับเพื่อตรวจสอบผ่านทาง HTTP ได้เลย
  • AuthName: บรรทัดนี้จะเป็นข้อความเวลาที่แสดงผลบนหน้าจอครับอย่างได้คำไหนก็ใส่ลงไปได้เลย
  • AuthUserFile: บรรทัดนี้สำคัญครับเพราะเป็นที่เก็บไฟล์ที่เป็ฯรหัสผ่านของเรานั้นแหละครับต้องใส่เริ่มต้นจาก /etc นะครับ
  • Require valid-user: ตรงนี้เป็นการบอกครับว่าให้ระบบตรวจสอบเฉพาะผู้ที่มีการอนุญาติไว้บน htaccess เท่านั้นถึงจะผ่านเข้าไปได้จ๊า

จากนั้นพอใส่ code ทั้งหมดเสร็จแล้วเวลาคุณจะเริ่มให้ไฟล์นี้ทำงานคุณต้องสั่ง command line บน linux ตามนี้ด้วยนะครับ แล้วระบุ username ไว้ที่ข้างท้ายสุดครับ

sudo htpasswd -c /etc/apache2/.phpmyadmin.htpasswd username

ทีนี้มาพูดถึงตัวรหัสข้างในกันหน่อยนะครับ มันเป็นรหัสที่มาในรูปแบบของ bcrypt ซึ่งจะขึ้นต้นนำหน้าด้วย $2a$08 ทีนี้หากเราต้องการใช้งานไม่ว่าจะใส่หรือถอดก็ตามเราต้องเข้ารหัสให้ถูกต้องเสียก่อน หรือจะใช้ tool แบบ online อย่าง bcrypt-generator มาช่วยงานก็ได้

ทีนี้หากเราต้องการปิดความสามารถนี้ไปไม่ใช้แล้วเพราะยังไงเราก็ต้อง login ด้วย username ของ wordpress อยู่แล้วเราจะทำอย่างไรอันที่จริงถ้าใช้มันก็เพิ่มความปลอดภัยให้เราได้นะครับ เพราะยิ่ง wordpress เป็น Opensource  ด้วยยิ่งง่ายต่อการที่จะมีคนไม่หวังดีหากว่าระบบของเราเป็นที่ต้องตาต้องใจอ่ะนะ ถ้าเราต้องการเปิดก็แค่ลบไอ้เจ้า code นี้ออกไปนะครับหรือไม่ก็แค่ใส่ # เพื่อคอมเมนท์มันไปซะก็จะไม่มีการเรียกแล้ว

Step สำหรับปิดการทำงาน

  1. เข้าไปที่ /etc/apache2/apache2.conf
  2. ใส่ comment ที่ code
    #<DirectoryMatch ^.*/wp-admin/>
    # AuthType Basic
    # AuthName "Please login to your droplet via SSH for login details."
    # AuthUserFile /etc/apache2/.htpasswd
    # Require valid-user
    #<DirectoryMatch>
    
  3. จากนั้นก็ Restart Apache ซักรอบหนึ่งครับ
    service apache2 restart
    

 

อย่าลืมนะครับว่าความปลอดภัยควรมาเป็นอันดับหนึ่งในระบบจริงคุณควรเปิดใช้หรือไม่ก็ทำงานด้านความปลอดภัยกับ wordpress เพิ่มเติมทั้งการเปลี่ยน url เข้าสู่ admin และอื่นๆให้ครบถ้วนนะครับ

อ้างอิง :
Apache Authentication
Apache Password Fromats