วิธีป้องกันรหัสผ่านไดเรกทอรีเว็บใน Apache โดยใช้ไฟล์. htaccess
เมื่อคุณจัดการโปรเจ็กต์ออนไลน์ คุณมักจะจำเป็นต้องจำกัดการเข้าถึงโปรเจ็กต์นั้นเพื่อปกป้องโปรเจ็กต์จากโลกภายนอก อาจมีสาเหตุที่แตกต่างกัน เช่น คุณต้องการป้องกันไม่ให้โปรแกรมรวบรวมข้อมูลของเครื่องมือค้นหาเข้าถึงเว็บไซต์ของคุณในขณะที่ยังอยู่ในขั้นตอนการพัฒนา
ในบทช่วยสอนนี้ ฉันจะแสดงให้คุณเห็นวิธีการป้องกันด้วยรหัสผ่านไดเรกทอรีของเว็บไซต์ต่างๆ ในเว็บเซิร์ฟเวอร์ Apache คุณสามารถบรรลุเป้าหมายนี้ได้หลายวิธี แต่เราจะตรวจสอบ 2 วิธีที่ใช้บ่อยที่สุด
วิธีแรกกำหนดค่าการป้องกันด้วยรหัสผ่านโดยตรงในไฟล์การกำหนดค่าของ Apache ในขณะที่วิธีที่สองใช้ไฟล์ .htaccess
ความต้องการ
ในการตั้งค่าการป้องกันรหัสผ่านสำหรับไดเร็กทอรีเว็บของคุณ คุณจะต้องมี:
- เว็บเซิร์ฟเวอร์ Apache ที่ใช้งานได้
- ต้องเปิดใช้งานคำสั่ง AllowOverride AuthConfig ในไฟล์การกำหนดค่า Apache
ตั้งค่าไดเรกทอรีป้องกันด้วยรหัสผ่าน Apache
1. สำหรับบทช่วยสอนนี้ เราจะปกป้องไดเร็กทอรีหลักของเว็บ /var/www/html
เพื่อปกป้องไดเร็กทอรีนั้น ให้เปิดการกำหนดค่าของ Apache:
---------------- On RedHat/CentOS based systems ----------------
vi /etc/httpd/conf/httpd.conf
---------------- On Debian/Ubuntu based systems ----------------
nano /etc/apache2/sites-available/000-default.conf
2. ค้นหารูทไดเรกทอรีเอกสาร Apache สำหรับ /var/www/html และเพิ่มสิ่งต่อไปนี้ตามที่แนะนำ:
บนเวอร์ชันอาปาเช่ 2.2
<Directory /var/www/html>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
บนเวอร์ชันอาปาเช่ 2.4
<Directory /var/www/html>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
3. บันทึกไฟล์และรีสตาร์ท Apache โดยใช้คำสั่งต่อไปนี้:
--------------- On Systemd -------------------
systemctl restart httpd [On RedHat based systems]
systemctl restart apache2 [On Debian based systems]
--------------- On SysV init -----------------
service httpd restart [On RedHat based systems]
service apache2 restart [On Debian based systems]
4. ตอนนี้เราจะใช้คำสั่ง htpasswd เพื่อสร้างชื่อผู้ใช้และรหัสผ่านสำหรับไดเร็กทอรีที่ได้รับการป้องกันของเรา คำสั่งนี้ใช้เพื่อจัดการไฟล์ผู้ใช้สำหรับการตรวจสอบสิทธิ์ขั้นพื้นฐาน
ไวยากรณ์ทั่วไปของคำสั่งคือ:
htpasswd -c filename username
ตัวเลือก -c
ระบุไฟล์ที่จะเก็บรหัสผ่านที่เข้ารหัสไว้ และ ชื่อผู้ใช้ ระบุผู้ใช้สำหรับการตรวจสอบสิทธิ์
5. ไฟล์รหัสผ่านของเราต้องอยู่นอกไดเร็กทอรีที่เข้าถึงได้ของเว็บของ Apache จึงมีการป้องกันอย่างดี เพื่อจุดประสงค์นั้น เราจะสร้างไดเร็กทอรีใหม่:
mkdir /home/tecmint
6. หลังจากนั้น เราจะสร้างชื่อผู้ใช้และรหัสผ่านของเราซึ่งจะถูกจัดเก็บไว้ในไดเร็กทอรีนั้น:
htpasswd -c /home/tecmint/webpass tecmint
เมื่อคุณดำเนินการคำสั่งนี้ คุณจะต้องป้อนรหัสผ่านสำหรับผู้ใช้ใหม่ของเรา "tecmint"
สองครั้ง:
หลังจากนั้นเราจะต้องตรวจสอบให้แน่ใจว่า Apache สามารถอ่านไฟล์ “webpass” ได้ เพื่อจุดประสงค์นั้น คุณจะต้องเปลี่ยนความเป็นเจ้าของไฟล์นั้นด้วยคำสั่งต่อไปนี้:
---------------- On RedHat/CentOS based systems ----------------
chown apache: /home/tecmint/webpass
chmod 640 /home/tecmint/webpass
---------------- On Debian/Ubuntu based systems ----------------
chown www-data /home/tecmint/webpass
chmod 640 /home/tecmint/webpass
7. ณ จุดนี้ผู้ใช้และรหัสผ่านใหม่ของเราพร้อมแล้ว ตอนนี้เราต้องบอก Apache ให้ขอรหัสผ่านเมื่อเข้าถึงไดเร็กทอรีเป้าหมายของเรา เพื่อจุดประสงค์ดังกล่าว ให้สร้างไฟล์ชื่อ .htaccess ใน /var/www/html:
vi /var/www/html/.htaccess
เพิ่มรหัสต่อไปนี้ลงไป:
AuthType Basic
AuthName "Restricted Access"
AuthUserFile /home/tecmint/webpass
Require user tecmint
8. ตอนนี้ให้บันทึกไฟล์และทดสอบการตั้งค่าของคุณ เปิดเบราว์เซอร์ของคุณและป้อนที่อยู่ IP หรือชื่อโดเมนของคุณในเว็บเบราว์เซอร์ ตัวอย่างเช่น:
http://ip-address
คุณควรได้รับแจ้งให้ระบุชื่อผู้ใช้และรหัสผ่าน:
ป้อนชื่อผู้ใช้และรหัสผ่านที่คุณตั้งไว้เพื่อไปที่เพจของคุณ
หมายเหตุเพิ่มเติม
หากคุณใช้โฮสติ้งที่ใช้ร่วมกัน คุณอาจไม่สามารถเข้าถึงไฟล์การกำหนดค่า Apache ได้ อย่างไรก็ตาม บริษัทโฮสติ้งส่วนใหญ่ได้เปิดใช้งานตัวเลือก “AllowOverride All” เป็นค่าเริ่มต้น ซึ่งหมายความว่าคุณจะต้องสร้างชื่อผู้ใช้และรหัสผ่านเท่านั้น จากนั้นเลือกไดเรกทอรีที่คุณต้องการปกป้อง สิ่งนี้ทำให้งานของคุณง่ายขึ้นอย่างมาก
บทสรุป
ฉันหวังว่าคุณจะพบว่าบทช่วยสอนนี้มีประโยชน์และช่วยให้คุณบรรลุเป้าหมาย หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดอย่าลังเลที่จะโพสต์ไว้ในส่วนด้านล่าง