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 
Outputsammy:$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:
<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:
<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:
<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ả”:
. . .  <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:
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:
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":
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 .
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 72015-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 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 8 trên CentOS 7
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 CentOS 7
2015-06-09
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 thiết lập ModSecurity với Apache trên Ubuntu 14.04 và Debian 8
2015-06-05
 

