Thứ hai, 10/08/2015 | 00:00 GMT+7

Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 14.04

Khi cài đặt web server , thường có các phần của trang web mà bạn muốn hạn chế quyền truy cập. Các ứng dụng web thường cung cấp các phương pháp xác thực và ủy quyền của riêng chúng, nhưng bản thân web server được dùng để hạn chế quyền truy cập nếu các phương thức này không đủ hoặc không khả dụng.

Trong hướng dẫn này, ta sẽ trình bày cách bảo vệ nội dung bằng password trên web server Apache chạy trên Ubuntu 14.04.

Yêu cầu

Để bắt đầu, bạn cần truy cập vào môi trường server Ubuntu 14.04. Bạn cần một user không phải root có quyền sudo để thực hiện các việc quản trị. Để tìm hiểu cách tạo user như vậy, hãy làm theo hướng dẫn cài đặt server ban đầu Ubuntu 14.04 của ta .

Cài đặt Gói tiện ích Apache

Để tạo file lưu trữ các password cần thiết để truy cập nội dung bị hạn chế của ta , ta sẽ sử dụng một tiện ích có tên là htpasswd . Điều này được tìm thấy trong gói apache2-utils trong repository lưu trữ Ubuntu.

Cập nhật cache ẩn gói local và cài đặt gói bằng lệnh lệnh này. Ta cũng sẽ tận dụng cơ hội này để lấy server Apache2 trong trường hợp nó chưa được cài đặt trên server :

  • sudo apt-get update
  • sudo apt-get install apache2 apache2-utils

Tạo file password

Bây giờ ta có quyền truy cập vào lệnh htpasswd . Ta có thể sử dụng điều này để tạo một file password mà Apache có thể sử dụng để xác thực user . Ta sẽ tạo một file ẩn cho mục đích này được gọi là .htpasswd trong folder cấu hình /etc/apache2 của ta .

Lần đầu tiên sử dụng trình này, ta cần thêm tùy chọn -c để tạo file được chỉ định. Ta chỉ định tên user ( sammy trong ví dụ này) ở cuối lệnh để tạo mục nhập mới trong file :

  • sudo htpasswd -c /etc/apache2/.htpasswd sammy

Bạn cần cung cấp và xác nhận password cho user .

Bỏ qua đối số -c cho bất kỳ user bổ sung nào bạn muốn thêm:

  • sudo htpasswd /etc/apache2/.htpasswd another_user

Nếu ta xem nội dung của file , ta có thể thấy tên user và password được mã hóa cho mỗi bản ghi:

  • cat /etc/apache2/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Cấu hình xác thực password Apache

Bây giờ ta có một file với user và password của bạn ở định dạng mà Apache có thể đọc, ta cần cấu hình Apache để kiểm tra file này trước khi cung cấp nội dung được bảo vệ của ta . Ta có thể làm điều này theo hai cách khác nhau.

Tùy chọn đầu tiên là chỉnh sửa cấu hình Apache và thêm password bảo vệ của ta vào file server ảo. Điều này thường mang lại hiệu suất tốt hơn vì nó tránh được chi phí đọc các file cấu hình phân tán. Nếu bạn có tùy chọn này, phương pháp này được khuyến khích.

Nếu bạn không có khả năng sửa đổi file server ảo (hoặc nếu bạn đang sử dụng .htaccess files for other purposes), you can restrict access using an file .htaccess file. Apache uses file .htaccess` để cho phép các mục cấu hình nhất định được đặt trong file trong folder nội dung. Điểm bất lợi là Apache phải đọc lại các file này theo mọi yêu cầu liên quan đến folder , điều này có thể ảnh hưởng đến hiệu suất.

Chọn tùy chọn phù hợp nhất với nhu cầu của bạn dưới đây.

Cấu hình Kiểm soát truy cập trong Định nghĩa Server Ảo

Bắt đầu bằng cách mở file server ảo mà bạn muốn thêm hạn chế vào. Đối với ví dụ của ta , ta sẽ sử dụng file 000-default.conf chứa server ảo mặc định được cài đặt thông qua gói apache của Ubuntu:

  • sudo nano /etc/apache2/sites-enabled/000-default.conf

Bên trong, với các comment bị loại bỏ, file sẽ trông giống như sau:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>     ServerAdmin webmaster@localhost     DocumentRoot /var/www/html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Xác thực được thực hiện trên cơ sở từng folder . Để cài đặt xác thực, bạn cần nhắm đến folder mà bạn muốn hạn chế bằng khối <Directory ___> . Trong ví dụ của ta , ta sẽ hạn chế toàn bộ root tài liệu, nhưng bạn có thể sửa đổi danh sách này để chỉ nhắm đến đến một folder cụ thể trong không gian web:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>     ServerAdmin webmaster@localhost     DocumentRoot /var/www/html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined      <Directory "/var/www/html">     </Directory> </VirtualHost> 

Trong khối folder này, chỉ định rằng ta muốn cài đặt Xác thực Basic . Đối với AuthName , hãy chọn tên vùng sẽ được hiển thị cho user khi nhắc nhập thông tin đăng nhập. Sử dụng chỉ thị AuthUserFile để trỏ Apache tới file password mà ta đã tạo. Cuối cùng, ta sẽ yêu cầu valid-user truy cập vào tài nguyên này, nghĩa là bất kỳ ai có thể xác minh danh tính của họ bằng password sẽ được phép trong:

/etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>     ServerAdmin webmaster@localhost     DocumentRoot /var/www/html     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined      <Directory "/var/www/html">         AuthType Basic         AuthName "Restricted Content"         AuthUserFile /etc/apache2/.htpasswd         Require valid-user     </Directory> </VirtualHost> 

Lưu file khi bạn hoàn tất. Khởi động lại Apache để triển khai policy password của bạn:

  • sudo service apache2 restart

Thư mục bạn chỉ định bây giờ phải được bảo vệ bằng password

Cấu hình Kiểm soát truy cập với file .htaccess

Nếu bạn muốn cài đặt bảo vệ bằng password thay thế bằng .htaccess , bạn nên bắt đầu bằng cách chỉnh sửa file cấu hình Apache chính để cho phép .htaccess :

  • sudo nano /etc/apache2/apache2.conf

Tìm khối <Directory> cho folder /var/www chứa tài liệu root . Bật xử lý .htaccess bằng cách thay đổi chỉ thị AllowOverride trong khối đó từ “Không” thành “Tất cả”:

/etc/apache2/apache2.conf
. . .  <Directory /var/www/>     Options Indexes FollowSymLinks     AllowOverride All     Require all granted </Directory>  . . . 

Lưu file khi bạn hoàn tất.

Tiếp theo, ta cần thêm .htaccess vào folder mà ta muốn hạn chế. Trong phần trình diễn của ta , ta sẽ hạn chế toàn bộ folder root (toàn bộ trang web) dựa trên /var/www/html , nhưng bạn có thể đặt file này trong bất kỳ folder nào mà bạn muốn hạn chế quyền truy cập:

  • sudo nano /var/www/html/.htaccess

Trong file này, chỉ định rằng ta muốn cài đặt Xác thực Basic . Đối với AuthName , hãy chọn tên vùng sẽ được hiển thị cho user khi nhắc nhập thông tin đăng nhập. Sử dụng chỉ thị AuthUserFile để trỏ Apache tới file password mà ta đã tạo. Cuối cùng, ta sẽ yêu cầu valid-user truy cập vào tài nguyên này, nghĩa là bất kỳ ai có thể xác minh danh tính của họ bằng password sẽ được phép trong:

/var/www/html/.htaccess
AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user 

Lưu và đóng file . Khởi động lại web server để bảo vệ bằng password tất cả nội dung trong hoặc dưới folder có .htaccess :

  • sudo service apache2 restart

Xác nhận xác thực password

Để xác nhận nội dung của bạn được bảo vệ, hãy cố gắng truy cập nội dung bị hạn chế của bạn trong trình duyệt web. Bạn sẽ được hiển thị với dấu nhắc tên user và password giống như sau:

 Dấu nhắc  password  Apache2

Nếu bạn nhập thông tin đăng nhập chính xác, bạn sẽ được phép truy cập nội dung. Nếu bạn nhập sai thông tin đăng nhập hoặc nhấn "Hủy", bạn sẽ thấy trang lỗi "Trái phép":

Apache2 lỗi trái phép

Kết luận

Đến đây bạn sẽ có mọi thứ bạn cần để cài đặt xác thực cơ bản cho trang web của bạn . Lưu ý bảo vệ bằng password phải được kết hợp với mã hóa SSL để thông tin đăng nhập của bạn không được gửi đến server ở dạng văn bản thuần túy. Để tìm hiểu cách tạo certificate SSL tự ký để sử dụng với Apache, hãy làm theo hướng dẫn này . Để tìm hiểu cách cài đặt certificate thương mại, hãy làm theo hướng dẫn này .


Tags:

Các tin liên quan

Cách bảo vệ chống lại DoS và DDoS với mod_evasive cho Apache trên CentOS 7
2015-07-30
Cách cài đặt LAMP (Linux, Apache, MySQL, PHP) trên Fedora 22
2015-07-08
Cách thiết lập mod_rewrite cho Apache trên Ubuntu 14.04
2015-06-27
Cách cài đặt Apache Tomcat 8 trên CentOS 7
2015-06-19
Cách cài đặt Apache Tomcat 8 trên Ubuntu 14.04
2015-06-19
Cách tạo chứng chỉ SSL trên Apache cho Debian 8
2015-06-19
Cách cài đặt Apache Tomcat 7 trên CentOS 7 qua Yum
2015-06-15
Cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
2015-06-09
Cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên CentOS 7
2015-06-09
Cách thiết lập ModSecurity với Apache trên Ubuntu 14.04 và Debian 8
2015-06-05