JABZ7SHOP : Web Selling Things With Cheap Price : https://jabz7shop.blogspot.com/ : Go To My Shop Online Now
Bài đăng

Cách cài đặt xác thực mật khẩu với Apache trên Ubuntu 20.04

12 min read

 

Giới thiệu

Với tư cách là quản trị viên web, bạn có thể thấy việc hạn chế một số phần của trang web khỏi khách truy cập, cho dù tạm thời hay lâu dài đều rất hữu ích. 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, nhưng bạn cũng có thể dựa vào chính máy chủ web để 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.

Bài viết này sẽ hướng dẫn bạn các nội dung bảo vệ bằng mật khẩu trên máy chủ web Apache chạy trên Ubuntu 20.04. Nó sẽ cung cấp cho máy chủ của bạn một lớp bảo mật bổ sung.

Điều kiện

Để thực hiện theo hướng dẫn này, bạn sẽ cần:

  • Một máy chủ Ubuntu 20.04 được thiết lập với non-root user có đặc quyền sudo và tường lửa được bật. Bạn có thể thực hiện việc này bằng cách làm theo Hướng dẫn thiết lập máy chủ ban đầu Ubuntu 20.04.
  • Máy chủ web Apache được cài đặt trên máy chủ Ubuntu của bạn. Nếu bạn chưa cài đặt, bạn có thể tham khảo hướng dẫn Cách cài đặt máy chủ web Apache trên Ubuntu 20.04. Đảm bảo hoàn thành Bước 5 và có một tệp máy chủ ảo cho tên miền của bạn. Hướng dẫn này sẽ đề cập đến your_domain làm ví dụ xuyên suốt và sử dụng /etc/apache2/sites-available/your_domain.conf cho tệp máy chủ ảo.
  • Máy chủ ảo của bạn được bảo mật bằng SSL. Việc thiết lập này phụ thuộc vào việc bạn có tên miền cho trang web của mình hay không.
  1. Nếu bạn có tên miền, bạn có thể bảo mật trang web của mình bằng Let’s Encrypt, đây là công cụ cung cấp các chứng chỉ miễn phí đáng tin cậy. Làm theo Hướng dẫn Let’s Encrypt cho Apache để cài đặt nó.
  2. Nếu bạn không có miền và bạn đang sử dụng cấu hình này để thử nghiệm hoặc sử dụng cho mục đích cá nhân, bạn có thể sử dụng chứng chỉ tự ký (self-signed certificate) để thay thế. Nó cung cấp cùng một loại mã hóa, nhưng không có xác thực tên miền. Hãy làm theo Hướng dẫn SSL tự ký (self-signed SSL) cho Apache để cài đặt.
  • Nếu bạn muốn thiết lập một tên miền (tùy chọn), bạn có thể mua một tên miền trên Namecheap, nhận một tên miền miễn phí trên Freenom hoặc sử dụng công ty đăng ký tên miền mà bạn chọn. Ngoài ra, bạn sẽ cần cả hai bản ghi DNS sau để thiết lập cho máy chủ của mình. Làm theo bài Giới thiệu về CloudFly DNS để biết chi tiết về cách thêm chúng.
  1. Một bản ghi với your_domain trỏ đến địa chỉ IP chung của máy chủ của bạn.
  2. Một bản ghi có www.your_domain trỏ đến địa chỉ IP chung của máy chủ của bạn.

Khi bạn đã hoàn thành các điều kiện này, hãy đăng nhập vào máy chủ của bạn với tư cách là sudo user và tiếp tục với bước đầu tiên.

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 máy chủ và cài đặt một gói mà chúng ta sẽ cần. Để hoàn thành theo hướng dẫn này, chúng ta sẽ sử dụng tiện ích có tên htpasswd, một phần của gói apache2-utils, để tạo tệp và quản lý tên người dùng và mật khẩu cần thiết và truy cập nội dung bị hạn chế.

Trước tiên, hãy cập nhật gói mục lục của máy chủ bạn:

  1. sudo apt update

Sau đó cài đặt gói tiện ích Apache:

  1. sudo apt install apache2-utils

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

Bước 2: Tạo tệp mật khẩu

Lệnh htpasswd cho phép bạn tạo một tệp mật khẩu mà Apache có thể sử dụng để xác thực người dùng. Bạn sẽ tạo một tệp ẩn cho mục đích này gọi là .htpasswd trong thư mục cấu hình/etc/apache2 của bạn.

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

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

Bạn sẽ được yêu cầu cung cấp và xác nhận mật khẩu cho người dùng.

Bỏ qua đối số -c cho bất kỳ người dùng bổ sung nào bạn muốn thêm như trong ví dụ sau để bạn không ghi đè lên tệp:

  1. sudo htpasswd /etc/apache2/.htpasswd another_user

Nếu bạn kiểm tra nội dung của tệp, nó sẽ chứa tên người dùng và mật khẩu được mã hóa cho mỗi bản ghi:

  1. cat /etc/apache2/.htpasswd
Output
sammy:$apr1$eponJaBR$9uyVIRpDpbHoseI.hS1cq/ another_user:$apr1$dDXiQxte$RGn3CVfFLQOPf5lSJgNvV1

Bây giờ bạn có tên người dùng và mật khẩu của mình ở định dạng mà Apache có thể đọc được.

Bước 3: Thiết lập cấu hình xác thực mật khẩu Apache

Trong bước này, bạn cần thiết lập cấu hình Apache để kiểm tra tệp .htpasswd trước khi cung cấp nội dung được bảo vệ của bạn. Bạn có thể thực hiện việc này theo một trong hai cách: làm trực tiếp trong tệp máy chủ ảo của trang web, hoặc bằng cách đặt tệp .htaccess vào các thư mục cần hạn chế. Nói chung, tốt nhất là sử dụng tệp máy chủ ảo, nhưng nếu bạn cần cho phép non-root users quản lý các hạn chế truy cập riêng, hãy tham khảo lựa chọn thứ hai để kiểm tra các hạn chế trong kiểm soát phiên bản cùng với trang web, hoặc có một ứng dụng web sử dụng các tệp .htaccess cho những mục đích khác.

Lưu ý: Bạn có thể thực hiện các tùy chọn sau cho bất kỳ máy chủ ảo nào đang hoạt động. Nếu bạn đang sử dụng máy chủ ảo của riêng mình, hãy đảm bảo thay đổi bất kỳ các lệnh và giá trị nào để phản ánh cấu hình của bạn.

Hãy 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: Thiết lập cấu hình Kiểm soát truy cập trong Định nghĩa Máy chủ Ảo (Ưu tiên)

Tùy chọn đầu tiên là chỉnh sửa cấu hình Apache và thêm mật khẩu bảo vệ vào tệp máy chủ ảo. Điều này sẽ mang lại hiệu suất tốt hơn vì nó tránh được chi phí đọc các tệp cấu hình (configuration files) 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 nó. Bắt đầu bằng cách mở tệp máy chủ ảo mà bạn muốn thêm hạn chế vào. Đối với ví dụ của chúng tôi, chúng tôi sẽ sử dụng tệp/etc/apache2/sites-available/your_domain.conf chứa máy chủ ảo. Mở tệp bằng trình soạn thảo văn bản dòng lệnh như là nano:

sudo nano /etc/apache2/sites-available/<mark>your_domain</mark>.conf

Ở bên trong, với các nhận xét bị loại bỏ, tệp sẽ trông giống như sau:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    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 thư mục. Để thiết lập xác thực, bạn sẽ cần nhắm mục tiêu vào thư mục mà bạn muốn hạn chế bằng khối <Directory ___>. Trong ví dụ của chúng tôi, chúng tôi sẽ hạn chế toàn bộ tài liệu gốc, nhưng bạn có thể sửa đổi danh sách này để nhắm mục tiêu vào một thư mục cụ thể trong không gian web:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory "/var/www/your_domain">
   </Directory>
</VirtualHost>

Trong khối thư mục này, hãy xác định rằng bạn đ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 người dùng khi nhắc nhở nhập thông tin đăng nhập. Sử dụng chỉ thị AuthUserFile để trỏ Apache tới tệp mật khẩu bạn đã tạo. Cuối cùng, tạo ra một yêu cầu rằng chỉ valid-user (người dùng hợp lệ) mới có thể truy cập tài nguyên này, có nghĩa là bất kỳ ai có thể xác minh danh tính của họ bằng mật khẩu sẽ được phép truy cập vào:

/etc/apache2/sites-available/your_domain.conf
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory "/var/www/your_domain">
      AuthType Basic
      AuthName "Restricted Content"
      AuthUserFile /etc/apache2/.htpasswd
      Require valid-user
  </Directory>
</VirtualHost>n3

Lưu và đóng tệp khi bạn hoàn tất. Nếu bạn đang sử dụng nano, bạn có thể làm như vậy bằng cách nhấn CTRL + X, sau đó nhấn Y rồi ENTER.

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

  1. sudo apache2ctl configtest

Nếu mọi thứ được kiểm tra và bạn nhận được Syntax OK ở đầu ra, bạn có thể khởi động lại máy chủ để triển khai chính sách mật khẩu của mình:

  1. sudo systemctl restart apache2

Khi systemctl không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, hãy sử dụng lệnh status để đảm bảo máy chủ đang chạy:

  1. sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese> Active: active (running) since Fri 2022-04-29 17:12:24 UTC; 4s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 4493 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU> Main PID: 4514 (apache2) Tasks: 55 (limit: 9508) Memory: 5.8M CGroup: /system.slice/apache2.service ├─4514 /usr/sbin/apache2 -k start ├─4516 /usr/sbin/apache2 -k start └─4517 /usr/sbin/apache2 -k start

Bây giờ, thư mục bạn chỉ định sẽ được bảo vệ bằng mật khẩu.

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

Apache có thể sử dụng các tệp .htaccess để cho phép các mục cấu hình nhất định được đặt trong một thư mục nội dung. Vì Apache phải đọc lại các tệp này theo mọi yêu cầu liên quan đến thư mục, nó 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 hơn, nhưng nếu bạn đang sử dụng tệp .htaccess hoặc cần cho phép non-root users quản lý các hạn chế, các tệp .htaccess sẽ giúp bạn thực hiện đơn giản hơn.

Để cho phép tính năng bảo vệ mật khẩu sử dụng tệp .htaccess, hãy mở tệp cấu hình Apache chính bằng trình soạn thảo văn bản dòng lệnh như nano:

  1. sudo nano /etc/apache2/apache2.conf

Tìm khối <Directory> cho thư mục /var/www/ chứa tài liệu gốc. Cập nhật dòng này để phản ánh tài liệu gốc của bạn. Tiếp theo, bật xử lý .htaccess bằng cách thay đổi chỉ thị AllowOverride trong khối đó từ None thành All. Nội dung của khối <Directory> này bây giờ sẽ đọc như sau:

/etc/apache2/apache2.conf
. . .

<Directory /var/www/your_domain>
  Options Indexes FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

. . .

Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, thêm tệp .htaccess vào thư mục bạn muốn hạn chế. Trong phần trình bày này, chúng tôi sẽ hạn chế toàn bộ tài liệu gốc (toàn bộ trang web) có tại /var/www/your_domain, nhưng bạn có thể đặt tệp này trong bất kỳ thư mục nào mà bạn muốn hạn chế quyền truy cập:

sudo nano /var/www/<mark>your_domain</mark>/.htaccess

Trong tệp này, xác định rằng bạn 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 người dùng khi nhắc nhở nhập thông tin đăng nhập. Sử dụng chỉ thị AuthUserFile để trỏ Apache tới tệp mật khẩu mà chúng tôi đã tạo. Cuối cùng, bạn sẽ yêu cầu valid-user (người dùng hợp lệ) truy cập tài nguyên này, có nghĩa là bất kỳ ai có thể xác minh danh tính của họ bằng mật khẩu sẽ được phép vào:

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

Lưu và đóng tập tin. Khởi động lại máy chủ web để bảo vệ bằng mật khẩu tất cả nội dung trong hoặc dưới thư mục có tệp .htaccess:

  1. sudo systemctl restart apache2

Sau đó chạy systemctl status để xác minh khởi động lại thành công:

  1. sudo systemctl status apache2
Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor prese> Active: active (running) since Fri 2022-04-29 17:18:17 UTC; 3s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 4721 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SU> Main PID: 4744 (apache2) Tasks: 55 (limit: 9508) Memory: 5.9M CGroup: /system.slice/apache2.service ├─4744 /usr/sbin/apache2 -k start ├─4745 /usr/sbin/apache2 -k start └─4746 /usr/sbin/apache2 -k start

Thư mục bạn đã chỉ định bây giờ đã được bảo vệ bằng mật khẩu.

Bước 4: Xác nhận xác thực mật khẩu

Để xác nhận rằng 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ằng cách điều hướng đến https://your_domain_or_server_IP.

Bạn sẽ được hiển thị lời nhắc tên người dùng và mật khẩu như sau:description image

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 vào nội dung. Nếu bạn nhập sai thông tin đăng nhập hoặc nhấn "Cancel" (Hủy), bạn sẽ nhận được trang lỗi "Unauthorized" (Không được phép):description image

Kết luận

Bây giờ bạn đã thiết lập xác thực cơ bản cho trang web của mình.

Bạn có thể làm nhiều hơn thế nữa 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 dưới đây:

  • Để hiểu rõ hơn về tệp cấu hình chính, hãy đọc phần Làm quen với các tệp và thư mục Apache quan trọng trong hướng dẫn cài đặt Apache của chúng tôi.
  • Tìm hiểu thêm về Cách thiết lập tệp máy chủ ảo trong Apache
  • Tìm hiểu về cách viết lại URL, tùy chỉnh các trang lỗi như thông báo “Unauthorized" (Không được phép) trước đó hoặc bao gồm các yếu tố phổ biến trên tất cả các trang của bạn với Server Side Includes trong hướng dẫn Cách Sử dụng Tệp .htaccess của chúng tôi.
00:00 / 00:00

Bạn có thể thích những bài đăng này

Đăng nhận xét