Thứ hai, 03/02/2020 | 00:00 GMT+7

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

Là administrator web, bạn có thể thấy hữu ích khi hạn chế một số phần của trang web khỏi khách truy cập, dù là tạm thời hay lâu dài. Mặc dù các ứng dụng web có thể cung cấp các phương pháp xác thực và ủy quyền của riêng chúng, bạn cũng có thể dựa vào chính web server để 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.

Hướng dẫn này sẽ hướng dẫn bạn các nội dung bảo vệ bằng password trên web server Apache chạy trên Ubuntu 18.04 để cung cấp cho server của bạn thêm bảo mật.

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 18.04.

Ngoài ra, bạn cần cài đặt 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 18.04 .

  • Web server Apache2 : Nếu bạn chưa cài đặt một web server , hướng dẫn Cách cài đặt Server Web Apache trên Ubuntu 18.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 điều này phụ 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ó một domain , bạn có thể bảo mật trang web của bạn bằng 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

Hãy bắt đầu bằng cách cập nhật server của ta và cài đặt một gói mà ta cần. Để hoàn thành hướng dẫn này, ta sẽ sử dụng trình có tên 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 update
  • sudo apt install apache2-utils

Với cài đặt này, bây giờ ta có quyền truy cập vào lệnh htpasswd .

Bước 2 - Tạo file password

Lệnh htpasswd sẽ cho phép ta 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 tệp password đượ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 để bạn không overrides lên file :

  • 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ây giờ ta có user và password của bạn ở định dạng mà Apache có thể đọc được.

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

Trong bước này, 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 .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 .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 default-ssl.conf chứa server ảo mặc định được cài đặt thông qua gói apache của Ubuntu. Mở file bằng editor dòng lệnh như nano:

  • sudo nano /etc/apache2/sites-enabled/default-ssl.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/default-ssl.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/default-ssl.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 đang 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, đưa ra yêu cầu rằng chỉ valid-user có thể truy cập 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/default-ssl.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. Nếu bạn đang sử dụng nano, bạn có thể thực hiện bằng cách nhấn CTRL+X sau đó nhấn Y rồi ENTER .

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 làm kết quả , bạn có thể 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 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 .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 bằng editor dòng lệnh như nano:

  • 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ừ None thành All :

/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. Nếu bạn đang sử dụng nano, bạn có thể thực hiện bằng cách nhấn CTRL+X sau đó nhấn Y rồi ENTER .

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

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

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 .

Bạn có thể làm nhiều hơn thế với cấu hình Apache và .htaccess . Để 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 cài đặt Apache Kafka trên Debian 10
2019-12-20
Cách sử dụng Ansible để cài đặt và thiết lập Apache trên Ubuntu 18.04
2019-12-06
Cách bảo mật Apache bằng Let's Encrypt trên FreeBSD 12.0
2019-11-08
Cách cài đặt Apache Tomcat 9 trên Debian 10
2019-10-24
Cách cấu hình báo cáo MTA-STS và TLS cho miền của bạn bằng Apache trên Ubuntu 18.04
2019-09-06
Cách viết lại URL bằng mod_rewrite cho Apache trên Debian 10
2019-08-22
Cách tạo chứng chỉ SSL tự ký cho Apache trong Debian 10
2019-07-22
Cách cài đặt web server Apache trên Debian 10
2019-07-19
Cách cấu hình Apache HTTP với Sự kiện MPM và PHP-FPM trên FreeBSD 12.0
2019-07-12
Cách cài đặt một Apache, MySQL và PHP (FAMP) trên FreeBSD 12.0
2019-06-28