Thứ ba, 26/07/2016 | 00:00 GMT+7

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

Khi chạy một trang web, thường có những phần của trang web mà bạn muốn hạn chế khách truy cập. Các ứng dụng web có thể cung cấp các phương thức xác thực và ủy quyền của riêng chúng, nhưng bản thân web server cũng đượ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 16.04.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần truy cập vào server Ubuntu 16.04.

Ngoài ra, bạn cần những thứ sau trước khi có thể bắt đầu:

  • User sudo trên server của bạn : Bạn có thể tạo user có quyền sudo theo hướng dẫn cài đặt server ban đầu Ubuntu 16.04 .

  • Web server Apache2 : Nếu bạn chưa cài đặt một web server , hãy xem phần Apache của bài viết chuyên sâu, Cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04
    , có thể hướng dẫn bạn.

  • Trang web được bảo mật bằng SSL : Cách bạn cài đặt tùy thuộc vào việc bạn có domain cho trang web của bạn hay không.

    • Nếu bạn có domain … cách dễ nhất để bảo mật trang web là với Let's Encrypt, cung cấp các certificate miễn phí, tin cậy . Làm theo hướng dẫn Let's Encrypt cho Apache để cài đặt điều này.
    • Nếu bạn không có domain … và bạn chỉ đang sử dụng cấu hình này để thử nghiệm hoặc sử dụng cá nhân, bạn có thể sử dụng certificate tự ký thay thế. Điều này cung cấp cùng một loại mã hóa, nhưng không có xác thực domain . Làm theo hướng dẫn SSL tự ký cho Apache để cài đặt .

Khi tất cả những điều này đã sẵn sàng, hãy đăng nhập vào server của bạn với quyền là user sudo và tiếp tục bên dưới.

Bước 1 - Cài đặt Gói tiện ích Apache

Ta sẽ sử dụng một tiện ích gọi là htpasswd , một phần của gói apache2-utils , để tạo file và quản lý tên user và password cần thiết để truy cập nội dung bị hạn chế.

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

Bước 2 - 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$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

Bước 3 - Cấu hình xác thực password Apache

Bây giờ ta có một file với user và password ở đị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ể thực hiện việc này bằng một trong hai cách: trực tiếp trong file server ảo của trang web hoặc bằng cách đặt file .htaccess vào các folder cần hạn chế. Nói chung tốt nhất là sử dụng file server ảo, nhưng nếu bạn cần cho phép user không phải root quản lý các hạn chế truy cập của riêng họ, hãy kiểm tra các hạn chế trong kiểm soát version cùng với trang web hoặc có ứng dụng web sử dụng file .htaccess cho các mục đích khác. , hãy kiểm tra tùy chọn thứ hai.

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

Tùy chọn 1: Cấu hình Kiểm soát truy cập trong Định nghĩa Server Ảo (Ưu tiên)

Tùy chọn đầu tiên là chỉnh sửa cấu hình Apache và thêm password bảo vệ 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. Tùy chọn này yêu cầu quyền truy cập vào cấu hình, không phải lúc nào cũng có sẵn, nhưng khi bạn có quyền truy cập, bạn nên sử dụng tùy chọn này.

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.

Trước khi khởi động lại web server , bạn có thể kiểm tra cấu hình bằng lệnh sau:

  • sudo apache2ctl configtest

Nếu mọi thứ được kiểm tra và bạn nhận được Syntax OK , sau đó khởi động lại server để thực hiện policy password của bạn. Vì systemctl không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, ta sẽ sử dụng status đảm bảo server đang chạy:

  • sudo systemctl restart apache2
  • sudo systemctl status apache2

Bây giờ, folder bạn chỉ định bây giờ sẽ được bảo vệ bằng password .

Tùy chọn 2: Cấu hình Kiểm soát truy cập bằng file .htaccess

Apache có thể sử dụng .htaccess để cho phép một số mục cấu hình nhất định được đặt trong folder nội dung. Vì 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 tiêu cực đến hiệu suất, nên Tùy chọn 1 được ưu tiên, nhưng nếu bạn đang sử dụng file .htaccess hoặc cần cho phép user không phải root quản lý các hạn chế .htaccess các file .htaccess có ý nghĩa.

Để bật tính năng bảo vệ bằng password bằng .htaccess , hãy mở file cấu hình Apache chính:

  • 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ệ password tất cả nội dung trong hoặc dưới folder có .htaccess và sử dụng systemctl status để xác minh sự thành công của việc khởi động lại:

  • sudo systemctl restart apache2
  • sudo systemctl status apache2

Bước 4 - 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

Xin chúc mừng! Nếu bạn đã làm theo, bạn hiện đã cài đặt xác thực cơ bản cho trang web của bạn . Tuy nhiên, cấu hình Apache và .htaccess có thể làm được nhiều việc hơn là xác thực cơ bản. Để tìm hiểu thêm về tính linh hoạt và sức mạnh có sẵn trong cấu hình Apache, hãy thử một trong các hướng dẫn sau:


Tags:

Các tin liên quan

Cách cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 16.04
2016-05-17
Cách mã hóa kết nối Tomcat 8 với Apache hoặc Nginx trên Ubuntu 16.04
2016-04-29
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 16.04
2016-04-21
Cách thiết lập server ảo Apache trên Ubuntu 16.04
2016-04-21
Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 16.04
2016-04-21
Cách thiết lập Let's Encrypt chứng chỉ cho nhiều server ảo Apache trên Ubuntu 14.04
2016-01-19
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 14.04
2015-12-18
Cách thiết lập server lưu lượng truy cập Apache làm Reverse-Proxy trên Ubuntu 14.04
2015-10-03
Cách thiết lập một cụm thụ động chủ động Apache bằng máy tạo nhịp tim trên CentOS 7
2015-09-08
Cách bảo vệ server Apache với Fail2Ban trên Ubuntu 14.04
2015-08-14