Mục lục

Không có mục lục

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

Ngày đăng: 12 tháng 4 năm 2023

Ubuntu

Giới thiệu

Khi thiết lập máy chủ web, 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 thức xác thực và ủy quyền của riêng chúng, nhưng bản thân máy chủ web có thể được sử dụng để hạn chế quyền truy cập nếu những phương thức này không đầy đủ hoặc không khả dụng. Trong hướng dẫn này, bạn sẽ bảo vệ tài sản bằng mật khẩu trên máy chủ web Nginx chạy trên Ubuntu 20.04.

Điều kiện tiên quyết

Để bắt đầu, bạn sẽ cần:

  • Truy cập vào môi trường máy chủ Ubuntu 20.04 với non-root user có đặc quyền sudo để thực hiện các tác vụ quản trị. Để tìm hiểu cách tạo một người dùng như vậy, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu của Ubuntu 20.04.
  • Nginx được cài đặt trên hệ thống của bạn, làm theo Bước 1 và 2 của hướng dẫn này về cách cài đặt Nginx trên Ubuntu 20.04.

Bước 1 — Tạo tệp mật khẩu

Để bắt đầu, bạn cần tạo một tệp chứa tổ hợp tên người dùng và mật khẩu của mình. Bạn có thể làm điều này bằng cách sử dụng các tiện ích OpenSSL có thể đã có sẵn trên máy chủ của bạn. Ngoài ra, bạn có thể sử dụng tiện ích htpasswd chuyên dụng có trong gói apache2-utils (các tệp mật khẩu Nginx sử dụng cùng định dạng với Apache). Chọn phương pháp dưới đây mà bạn thích nhất.

Tùy chọn 1 — Tạo tệp mật khẩu bằng tiện ích OpenSSL

Nếu bạn đã cài đặt OpenSSL trên máy chủ của mình, bạn có thể tạo tệp mật khẩu mà không cần gói bổ sung. Bạn sẽ tạo một tệp ẩn có tên .htpasswd trong thư mục cấu hình /etc/nginx để lưu trữ kết hợp tên người dùng và mật khẩu của bạn.

Bạn có thể thêm tên người dùng vào tệp bằng lệnh này. sammy được sử dụng ở đây làm tên người dùng, nhưng bạn có thể sử dụng bất kỳ tên nào bạn muốn:

  1. sudo sh -c "echo -n 'sammy:' >> /etc/nginx/.htpasswd"

Tiếp theo, thêm mục nhập mật khẩu được mã hóa cho tên người dùng bằng cách nhập:

  1. sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

Bạn có thể lặp lại quy trình này để có thêm tên người dùng. Bạn có thể xem cách tên người dùng và mật khẩu được mã hóa được lưu trữ trong tệp bằng cách nhập:

  1. cat /etc/nginx/.htpasswd
Output
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Tùy chọn 2 — Tạo tệp mật khẩu bằng tiện ích Apache

Mặc dù OpenSSL có thể mã hóa mật khẩu để xác thực Nginx, nhiều người dùng thấy việc sử dụng tiện ích được xây dựng có mục đích dễ dàng hơn. Tiện ích htpasswd, được tìm thấy trong gói apache2-utils, phục vụ tốt chức năng này.

Cài đặt gói apache2-utils trên máy chủ của bạn bằng cách gõ:

  1. sudo apt update
  2. sudo apt install apache2-utils

Bây giờ, bạn có quyền truy cập vào lệnh htpasswd. Bạn có thể sử dụng điều này để tạo một tệp mật khẩu mà Nginx có thể sử dụng để xác thực người dùng. Tạo một tệp ẩn cho mục đích này có tên là .htpasswd trong thư mục cấu hình /etc/nginx 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 được chỉ định. Chỉ định tên người dùng (sammy trong ví dụ này) ở cuối lệnh để tạo một mục mới trong tệp:

  1. sudo htpasswd -c /etc/nginx/.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:

  1. sudo htpasswd /etc/nginx/.htpasswd another_user

Nếu bạn xem nội dung của tệp, bạn có thể thấy tên người dùng và mật khẩu được mã hóa cho từng bản ghi:

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

Bước 2 - Định cấu hình xác thực mật khẩu Nginx

Bây giờ bạn có một tệp chứa người dùng và mật khẩu ở định dạng mà Nginx có thể đọc, bạn cần định cấu hình Nginx để kiểm tra tệp này trước khi cung cấp nội dung được bảo vệ của bạn.

Bắt đầu bằng cách mở tệp cấu hình khối máy chủ mà bạn muốn thêm hạn chế vào. Ví dụ của bạn, bạn sẽ sử dụng tệp khối máy chủ default được cài đặt thông qua gói Nginx của Ubuntu:

  1. sudo nano /etc/nginx/sites-enabled/default

Để thiết lập xác thực, bạn cần quyết định bối cảnh cần hạn chế. Trong số các lựa chọn khác, Nginx cho phép bạn đặt các hạn chế ở cấp độ máy chủ hoặc bên trong một vị trí cụ thể.

Ví dụ này sẽ dành cho giới hạn ở cấp độ máy chủ. Lệnh auth_basic bật xác thực và tên miền sẽ được hiển thị cho người dùng khi nhắc nhập thông tin đăng nhập. Bạn sẽ sử dụng chỉ thị auth_basic_user_file để trỏ Nginx đến tệp mật khẩu bạn đã tạo:

/etc/nginx/sites-enabled/default
server {
    listen 80 default_server;

     . . .
   
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Lưu ý: Tùy thuộc vào khối mà bạn đặt các hạn chế, bạn có thể kiểm soát mức độ chi tiết của những phần nào trên trang web của bạn yêu cầu mật khẩu. Ví dụ thay thế này chỉ hạn chế thư mục gốc có khối vị trí và thậm chí bạn có thể sửa đổi danh sách này để chỉ nhắm mục tiêu một thư mục cụ thể trong không gian web:

/etc/nginx/sites-enabled/default
server {
    listen 80 default_server;

     . . .
   
    location / {
    try_files $uri $uri/ =404;
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Lưu và đóng tệp khi bạn hoàn tất. Khởi động lại Nginx để thực hiện chính sách mật khẩu của bạn:

  1. sudo systemctl restart nginx

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

Bước 3 — 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 thử truy cập nội dung bị hạn chế của bạn trong trình duyệt web:

http://server_domain_or_IP

Bạn sẽ được cung cấp lời nhắc tên người dùng và mật khẩu:

description image

Nếu bạn nhập đúng thông tin đăng nhập, 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 “Cancel”, bạn sẽ thấy trang lỗi “Authorization Required”:

description image

Kết luận

Bây giờ bạn đã có mọi thứ cần thiết để thiết lập xác thực cơ bản cho trang web của mình. Hãy nhớ rằng bảo vệ bằng mật khẩu nên được kết hợp với mã hóa TLS để thông tin đăng nhập của bạn không được gửi đến máy chủ ở dạng văn bản thuần túy. Hãy xem hướng dẫn này về cách bảo mật Nginx với Let's Encrypt trên Ubuntu 20.04

0 câu trả lời