Hướng dẫn thiết lập Password Auth Nginx trên Ubuntu 20.04

Chào bạn, chào mừng trở lại với blog Bùi Mạnh Đức. Trong thế giới quản trị website, bảo mật luôn là yếu-tố-sống-còn. Bạn có bao giờ lo lắng về việc các trang quản trị, môi trường thử nghiệm (staging) hay các dịch vụ nội bộ bị truy cập trái phép không? Để một tài nguyên quan trọng trên internet mà không có bất kỳ lớp bảo vệ nào cũng giống như để cửa nhà mở toang. Rất may, có một giải pháp đơn giản nhưng cực kỳ hiệu quả: xác thực mật khẩu Basic Auth trên Nginx. Đây là một phương pháp cho phép bạn thiết lập một lớp yêu cầu tên người dùng và mật khẩu trước khi bất kỳ ai có thể truy cập vào một trang web hoặc một thư mục cụ thể. Trong bài viết này, chúng ta sẽ cùng nhau đi qua từng bước chi tiết để thiết lập Password auth Nginx trên Ubuntu 20.04, từ cài đặt công cụ cần thiết, tạo file mật khẩu, cấu hình Nginx cho đến các lưu ý bảo mật quan trọng. Hãy cùng bắt đầu nhé! Mật khẩu là gì

Cài đặt công cụ htpasswd để tạo file mật khẩu

Để bắt đầu hành trình tăng cường bảo mật cho máy chủ Nginx, việc đầu tiên chúng ta cần làm là chuẩn bị công cụ để tạo và quản lý mật khẩu. Công cụ mà chúng ta sẽ sử dụng có tên là htpasswd. Đây là một công cụ mạnh mẽ và đáng tin cậy, giúp mã hóa mật khẩu một cách an toàn.

Giới thiệu về công cụ htpasswd

Vậy htpasswd là gì? Đây là một tiện ích dòng lệnh có nguồn gốc từ máy chủ web Apache, nhưng được sử dụng rộng rãi bởi các quản trị viên hệ thống cho nhiều mục đích khác nhau, bao gồm cả Nginx. Vai trò chính của nó là tạo ra một tệp tin văn bản (thường được gọi là file .htpasswd) chứa danh sách tên người dùng và mật khẩu đã được mã hóa. Khi Nginx được cấu hình để sử dụng Basic Auth, nó sẽ đọc tệp tin này để xác thực thông tin đăng nhập do người dùng cung cấp. Thay vì lưu mật khẩu dưới dạng văn bản thuần (plain-text) cực kỳ nguy hiểm, htpasswd sử dụng các thuật toán băm như MD5 hoặc bcrypt để biến mật khẩu thành một chuỗi ký tự không thể dịch ngược, đảm bảo rằng ngay cả khi tệp tin này bị lộ, mật khẩu của người dùng vẫn được an toàn. Để hiểu thêm về Xác thực là gì bạn có thể tham khảo bài viết chi tiết.

Hướng dẫn cài đặt htpasswd trên Ubuntu 20.04

Việc cài đặt htpasswd trên Ubuntu 20.04 rất đơn giản vì nó được đóng gói sẵn trong gói apache2-utils. Bạn không cần phải cài đặt cả máy chủ Apache mà chỉ cần gói tiện ích này là đủ.

Đầu tiên, hãy mở terminal của bạn và cập nhật danh sách gói của hệ thống để đảm bảo bạn cài đặt phiên bản mới nhất:

sudo apt update

Tiếp theo, bạn chỉ cần chạy lệnh sau để cài đặt apache2-utils:

sudo apt install apache2-utils

Hệ thống sẽ yêu cầu bạn xác nhận việc cài đặt. Hãy nhấn Y và sau đó Enter. Quá trình cài đặt diễn ra rất nhanh chóng.

Sau khi cài đặt hoàn tất, bạn có thể kiểm tra xem htpasswd đã được cài đặt thành công hay chưa bằng cách kiểm tra phiên bản của nó:

htpasswd -v

Nếu bạn thấy thông tin phiên bản hiển thị trên màn hình, xin chúc mừng, bạn đã cài đặt thành công công cụ cần thiết. Bây giờ chúng ta đã sẵn sàng để tạo ra những chiếc chìa khóa bảo mật đầu tiên cho website của mình.

Hình minh họa

Tạo và quản lý file chứa mật khẩu người dùng

Sau khi đã có trong tay công cụ htpasswd, bước tiếp theo là tạo ra một tệp tin đặc biệt để lưu trữ thông tin đăng nhập. Tệp tin này chính là “cuốn sổ” mà Nginx sẽ tra cứu mỗi khi có ai đó cố gắng truy cập vào khu vực được bảo vệ. Việc quản lý tệp tin này một cách cẩn thận là rất quan trọng để đảm bảo hệ thống bảo mật hoạt động đúng cách.

Cách tạo file mật khẩu bằng htpasswd

Để tạo tệp mật khẩu và thêm người dùng đầu tiên, chúng ta sẽ sử dụng một câu lệnh htpasswd với tùy chọn -c. Tùy chọn -c (viết tắt của “create”) có ý nghĩa là tạo một tệp tin mới. Lưu ý quan trọng: bạn chỉ nên sử dụng tùy chọn -c cho lần đầu tiên tạo tệp và thêm người dùng đầu tiên. Nếu bạn sử dụng lại nó cho những người dùng sau, tệp cũ sẽ bị ghi đè và tất cả người dùng trước đó sẽ bị xóa.

Cú pháp của câu lệnh như sau:

sudo htpasswd -c [đường_dẫn_đến_file_mật_khẩu] [tên_người_dùng]

Ví dụ, để tạo một tệp có tên .htpasswd trong thư mục /etc/nginx/ và thêm một người dùng tên là admin, bạn sẽ chạy lệnh:

sudo htpasswd -c /etc/nginx/.htpasswd admin

Sau khi nhấn Enter, hệ thống sẽ yêu cầu bạn nhập mật khẩu cho người dùng admin hai lần để xác nhận. Hãy chọn một mật khẩu mạnh và ghi nhớ nó. Sau khi hoàn tất, tệp .htpasswd sẽ được tạo ra với thông tin người dùng admin và mật khẩu đã được mã hóa. Để biết thêm chi tiết về mật khẩu là gì bạn có thể tham khảo bài viết liên quan.

Hình minh họa

Thêm, xóa hoặc thay đổi mật khẩu người dùng

Hệ thống của bạn có thể có nhiều người dùng cần quyền truy cập, hoặc bạn cần cập nhật mật khẩu, xóa tài khoản không còn sử dụng. htpasswd giúp bạn quản lý những việc này một cách dễ dàng.

Để thêm một người dùng mới vào tệp .htpasswd đã tồn tại, bạn chỉ cần chạy lại lệnh htpasswd nhưng bỏ tùy chọn -c đi. Ví dụ, để thêm người dùng ducbm vào tệp đã tạo ở trên:

sudo htpasswd /etc/nginx/.htpasswd ducbm

Hệ thống sẽ lại yêu cầu bạn nhập và xác nhận mật khẩu cho người dùng mới này. Thông tin của ducbm sẽ được nối vào cuối tệp .htpasswd mà không ảnh hưởng đến người dùng admin đã có.

Để thay đổi mật khẩu của một người dùng hiện có, bạn cũng sử dụng cú pháp tương tự như khi thêm người dùng mới. htpasswd sẽ tự động nhận diện tên người dùng đã tồn tại và tiến hành cập nhật mật khẩu cho họ.

sudo htpasswd /etc/nginx/.htpasswd admin

Để xóa một người dùng khỏi tệp mật khẩu, bạn sử dụng tùy chọn -D (viết tắt của “delete”). Ví dụ, để xóa người dùng ducbm:

sudo htpasswd -D /etc/nginx/.htpasswd ducbm

Lệnh này sẽ tìm và xóa dòng chứa thông tin của người dùng ducbm khỏi tệp .htpasswd. Quản lý người dùng giờ đây đã trở nên thật trực quan và đơn giản phải không nào? Cách thức này liên quan đến cơ chế xác thực là gì cũng như 2fa là gì để tăng cường bảo mật tài khoản.

Hình minh họa

Cấu hình Nginx để yêu cầu đăng nhập khi truy cập

Chúng ta đã có “cuốn sổ” chứa tên người dùng và mật khẩu, giờ là lúc “chỉ đường” cho Nginx biết cách sử dụng nó. Bước này liên quan đến việc chỉnh sửa tệp cấu hình của Nginx để kích hoạt tính năng Basic Auth và trỏ đến tệp mật khẩu mà chúng ta vừa tạo. Đây là bước then chốt để lớp bảo vệ của bạn thực sự đi vào hoạt động.

Chỉnh sửa file cấu hình Nginx

Các tệp cấu hình của Nginx trên Ubuntu 20.04 thường nằm trong thư mục /etc/nginx/sites-available/. Bạn sẽ cần chỉnh sửa tệp cấu hình cho trang web mà bạn muốn bảo vệ. Thông thường, đó có thể là tệp default hoặc một tệp riêng bạn đã tạo (ví dụ: your_domain.conf).

Hãy mở tệp cấu hình bằng một trình soạn thảo văn bản như nano:

sudo nano /etc/nginx/sites-available/default

Bên trong tệp này, bạn cần tìm đến khối server và khối location mà bạn muốn áp dụng xác thực. Đó có thể là khối location / để bảo vệ toàn bộ trang web, hoặc một khối location cụ thể hơn như location /admin để chỉ bảo vệ thư mục quản trị.

Trong khối location đã chọn, bạn cần thêm hai chỉ thị sau:

  1. auth_basic: Chỉ thị này dùng để đặt một thông điệp sẽ hiển thị trên hộp thoại đăng nhập. Ví dụ: “Restricted Area” hoặc “Vui long dang nhap”.
  2. auth_basic_user_file: Chỉ thị này dùng để chỉ định đường dẫn tuyệt đối đến tệp mật khẩu .htpasswd mà chúng ta đã tạo.

Đây là một ví dụ về cách cấu hình sẽ trông như thế nào nếu bạn muốn bảo vệ toàn bộ trang web:

server {
    listen 80;
    server_name your_domain.com;

    root /var/www/html;
    index index.html index.htm;

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

Hãy đảm bảo rằng đường dẫn trong auth_basic_user_file chính xác là đường dẫn đến tệp bạn đã tạo ở bước trước. Sau khi thêm các dòng này, hãy lưu tệp và thoát khỏi trình soạn thảo. Để hiểu thêm về cách bảo mật website bạn có thể tham khảo bài viết Https là gìSsl là gì để bảo vệ kết nối.

Hình minh họa

Kiểm tra và reload Nginx

Một quy tắc vàng khi làm việc với Nginx là: không bao giờ tải lại (reload) cấu hình mà không kiểm tra trước. Một lỗi cú pháp nhỏ trong tệp cấu hình có thể khiến toàn bộ máy chủ web của bạn ngừng hoạt động.

Để kiểm tra xem cấu hình của bạn có hợp lệ hay không, hãy chạy lệnh sau:

sudo nginx -t

Nếu mọi thứ đều ổn, bạn sẽ nhận được một thông báo tương tự như:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nếu có lỗi, terminal sẽ chỉ ra chính xác tệp và dòng nào đang gặp vấn đề để bạn có thể sửa chữa.

Khi đã chắc chắn cấu hình không có lỗi, bạn có thể áp dụng các thay đổi bằng cách tải lại Nginx một cách nhẹ nhàng (graceful reload). Lệnh này sẽ áp dụng cấu hình mới mà không làm gián đoạn các kết nối hiện tại.

sudo systemctl reload nginx

Bây giờ, lớp bảo vệ bằng mật khẩu của bạn đã được kích hoạt. Hãy cùng nhau kiểm tra thành quả ở bước tiếp theo.

Hình minh họa

Kiểm tra và xác thực cài đặt trên máy chủ Ubuntu 20.04

Sau khi đã hoàn thành các bước cấu hình, đây là khoảnh khắc mà chúng ta mong chờ nhất: kiểm tra xem lớp bảo vệ có thực sự hoạt động hay không. Việc xác thực này không chỉ để đảm bảo mọi thứ chạy đúng mà còn giúp bạn hiểu rõ hơn về cách hệ thống phản hồi khi có và không có thông tin đăng nhập hợp lệ.

Truy cập thử trang được bảo vệ

Cách đơn giản nhất để kiểm tra là mở trình duyệt web của bạn và truy cập vào địa chỉ URL mà bạn vừa cấu hình bảo vệ. Ngay lập tức, thay vì thấy nội dung trang web, bạn sẽ được chào đón bởi một hộp thoại đăng nhập nhỏ hiện lên. Thông điệp trên hộp thoại này chính là chuỗi văn bản bạn đã đặt trong chỉ thị auth_basic (ví dụ: “Restricted Content”).

Hình minh họa

Bây giờ, hãy thử các trường hợp sau:

  1. Nhấn “Cancel” hoặc đóng hộp thoại: Trình duyệt sẽ hiển thị lỗi “401 Unauthorized”, xác nhận rằng việc truy cập đã bị từ chối.
  2. Nhập sai tên người dùng hoặc mật khẩu: Kết quả cũng sẽ là lỗi 401. Hộp thoại đăng nhập sẽ xuất hiện lại, cho bạn cơ hội thử lại.
  3. Nhập đúng tên người dùng và mật khẩu mà bạn đã tạo bằng htpasswd: Nếu thông tin chính xác, hộp thoại sẽ biến mất và trình duyệt sẽ tải nội dung trang web như bình thường.

Xin chúc mừng! Nếu bạn đã thấy được nội dung trang web sau khi đăng nhập thành công, bạn đã thiết lập Basic Auth một cách hoàn hảo. Trình duyệt thường sẽ ghi nhớ thông tin đăng nhập của bạn trong một phiên làm việc, vì vậy bạn có thể không cần phải nhập lại cho đến khi đóng trình duyệt.

Xử lý lỗi và kiểm tra log

Trong một số trường hợp, mọi thứ có thể không diễn ra suôn sẻ. Nếu bạn gặp lỗi hoặc không thể đăng nhập dù đã chắc chắn nhập đúng thông tin, “người bạn” tốt nhất của bạn chính là các tệp log của Nginx. Tệp log lỗi thường nằm ở /var/log/nginx/error.log.

Bạn có thể sử dụng lệnh tail để xem các dòng log gần nhất trong thời gian thực:

sudo tail -f /var/log/nginx/error.log

Khi một lần đăng nhập thất bại, Nginx sẽ ghi lại một mục trong tệp log này. Các thông báo lỗi phổ biến liên quan đến Basic Auth bao gồm:

  • user "username" was not found in "/etc/nginx/.htpasswd": Lỗi này cho biết tên người dùng không tồn tại trong tệp mật khẩu. Hãy kiểm tra lại xem bạn đã gõ đúng tên người dùng chưa hoặc người dùng đó đã được thêm vào tệp .htpasswd đúng cách chưa.
  • user "username": password mismatch: Mật khẩu bạn nhập không khớp với mật khẩu đã được mã hóa trong tệp. Hãy thử đặt lại mật khẩu bằng lệnh htpasswd.
  • (13: Permission denied) while reading user file /etc/nginx/.htpasswd: Đây là một lỗi rất phổ biến. Nó có nghĩa là Nginx không có quyền đọc tệp .htpasswd. Bạn cần kiểm tra lại quyền sở hữu và quyền truy cập của tệp này.

Việc kiểm tra log không chỉ giúp bạn giải quyết vấn đề mà còn là một kỹ năng quan trọng của bất kỳ quản trị viên hệ thống nào. Bạn có thể tham khảo thêm cách bảo vệ bằng Firewall là gì để nâng cao bảo mật toàn diện.

Hình minh họa

Các lưu ý bảo mật khi sử dụng xác thực Basic Auth

Mặc dù Basic Auth là một cách nhanh chóng và hiệu quả để thêm một lớp bảo mật, điều quan trọng là bạn phải hiểu rõ những hạn chế của nó và áp dụng các biện pháp bổ sung để đảm bảo an toàn tối đa. Coi Basic Auth là một ổ khóa cửa thì những lưu ý sau đây chính là cách bạn chọn loại khóa tốt nhất và đảm bảo không ai có thể sao chép chìa khóa của bạn.

1. Không bao giờ lưu password dạng plain-text:
Đây là nguyên tắc cơ bản nhất. Luôn luôn sử dụng công cụ htpasswd để tạo tệp mật khẩu. Công cụ này sẽ mã hóa (hash) mật khẩu, biến chúng thành một chuỗi ký tự không thể dịch ngược. Việc lưu mật khẩu dưới dạng văn bản thuần trong bất kỳ tệp nào trên máy chủ là một rủi ro bảo mật cực kỳ lớn. Vấn đề này có liên quan đến Lỗ hổng bảo mật.

2. Hạn chế quyền truy cập file passwd và cấu hình Nginx:
Tệp .htpasswd chứa thông tin xác thực của bạn. Mặc dù mật khẩu đã được mã hóa, bạn vẫn nên hạn chế quyền truy cập vào tệp này hết mức có thể. Lý tưởng nhất, tệp này chỉ nên được đọc bởi người dùng root và người dùng mà Nginx đang chạy (thường là www-data). Bạn có thể thiết lập quyền này bằng các lệnh sau:

sudo chown root:www-data /etc/nginx/.htpasswd
sudo chmod 640 /etc/nginx/.htpasswd

Lệnh này đảm bảo rằng chỉ root mới có thể sửa đổi tệp, và chỉ root cùng nhóm www-data mới có thể đọc nó. Những người dùng khác trên hệ thống sẽ không thể truy cập. Để hiểu sâu hơn về quyền truy cập và bảo mật mạng có thể tham khảo Firewall là gì.

Hình minh họa

3. Kết hợp SSL/TLS để bảo vệ thông tin xác thực qua mạng:
Đây là lưu ý quan trọng nhất. Bản thân cơ chế Basic Auth gửi thông tin tên người dùng và mật khẩu qua mạng dưới dạng mã hóa Base64. Đây không phải là mã hóa bảo mật, nó có thể dễ dàng bị giải mã bởi bất kỳ ai bắt được gói tin. Điều này có nghĩa là nếu bạn sử dụng Basic Auth trên một kết nối HTTP thông thường, thông tin đăng nhập của bạn sẽ bị gửi đi một cách công khai.
Giải pháp duy nhất là luôn sử dụng Basic Auth kết hợp với SSL/TLS (tức là HTTPS). Khi trang web của bạn chạy trên HTTPS, toàn bộ kết nối giữa trình duyệt và máy chủ sẽ được mã hóa, bao gồm cả thông tin đăng nhập Basic Auth. Điều này đảm bảo rằng kẻ gian không thể “nghe lén” và đánh cắp mật khẩu của bạn. Tham khảo thêm Tls là gìSsl là gì để hiểu rõ hơn về giao thức bảo mật.

4. Cân nhắc sử dụng các phương án xác thực nâng cao nếu cần:
Basic Auth rất tuyệt vời cho các nhu cầu đơn giản như bảo vệ trang staging, một công cụ nội bộ, hoặc một khu vực quản trị cá nhân. Tuy nhiên, đối với các ứng dụng phức tạp, yêu cầu bảo mật cao, hoặc hệ thống có nhiều người dùng, bạn nên cân nhắc các giải pháp xác thực mạnh mẽ hơn như OAuth 2.0, OpenID Connect, hoặc xác thực hai yếu tố (2FA). Basic Auth không cung cấp các tính năng như giới hạn số lần đăng nhập sai, hết hạn phiên đăng nhập, hay quản lý quyền chi tiết. Hãy lựa chọn công cụ phù hợp với mức độ rủi ro của ứng dụng. Tham khảo thêm bài 2fa là gì để tìm hiểu xác thực hai yếu tố tăng cường bảo mật.

Các vấn đề thường gặp và cách khắc phục

Trong quá trình cấu hình, đôi khi bạn sẽ gặp phải những sự cố không mong muốn. Đừng lo lắng, hầu hết các vấn đề này đều khá phổ biến và có cách giải quyết đơn giản. Dưới đây là hai sự cố thường gặp nhất khi thiết lập Basic Auth trên Nginx và cách để bạn “bắt bệnh” và “chữa trị” chúng.

Nginx không yêu cầu xác thực sau khi cấu hình

Bạn đã làm theo tất cả các bước, đã reload Nginx, nhưng khi truy cập vào trang web, nó vẫn hiện ra như bình thường mà không hề có hộp thoại đăng nhập nào. Đây là một tình huống khá khó chịu. Nguyên nhân thường xuất phát từ một trong các vấn đề sau:

  • Sai đường dẫn đến file passwd: Đây là lỗi phổ biến nhất. Hãy kiểm tra lại chỉ thị auth_basic_user_file trong tệp cấu hình Nginx của bạn. Đảm bảo rằng đường dẫn bạn cung cấp là đường dẫn tuyệt đối và hoàn toàn chính xác. Một lỗi gõ nhỏ cũng có thể khiến Nginx không tìm thấy tệp.
  • Vấn đề về quyền truy cập: Nginx cần có quyền đọc tệp .htpasswd. Nếu tiến trình Nginx (thường chạy dưới người dùng www-data) không có quyền này, nó sẽ âm thầm bỏ qua việc xác thực. Hãy sử dụng lệnh ls -l /etc/nginx/.htpasswd để kiểm tra quyền. Đảm bảo rằng người dùng www-data (hoặc nhóm www-data) có quyền đọc tệp.
  • Chưa reload Nginx: Bạn có chắc chắn mình đã chạy lệnh sudo systemctl reload nginx sau khi lưu các thay đổi trong tệp cấu hình không? Đôi khi chúng ta quên bước quan trọng này. Hãy chạy lại lệnh và kiểm tra.
  • Sai khối location: Kiểm tra xem bạn đã đặt các chỉ thị auth_basicauth_basic_user_file vào đúng khối location mà bạn muốn bảo vệ chưa. Nếu bạn đặt nhầm chỗ, việc xác thực sẽ không được áp dụng đúng cách.

Lỗi “401 Unauthorized” dù đã nhập đúng mật khẩu

Trường hợp này còn khó hiểu hơn: hộp thoại đăng nhập xuất hiện, bạn tự tin nhập đúng 100% tên người dùng và mật khẩu, nhưng vẫn bị báo lỗi “401 Unauthorized”. Điều này có thể khiến bạn nghi ngờ cả trí nhớ của mình. Hãy bình tĩnh và kiểm tra các khả năng sau:

  • Kiểm tra lại tệp htpasswd: Hãy dùng lệnh cat /etc/nginx/.htpasswd để xem nội dung tệp. Đảm bảo tên người dùng được viết chính xác, không có ký tự lạ hoặc khoảng trắng thừa.
  • Tạo lại mật khẩu: Có thể đã có lỗi xảy ra trong quá trình bạn tạo mật khẩu ban đầu. Cách nhanh nhất để loại trừ khả năng này là tạo lại mật khẩu cho người dùng đó. Chạy lại lệnh sudo htpasswd /etc/nginx/.htpasswd ten_nguoi_dung, nhập mật khẩu mới và thử đăng nhập lại.
  • Tệp mật khẩu bị hỏng: Mặc dù hiếm gặp, tệp .htpasswd có thể bị hỏng do lỗi chỉnh sửa hoặc sự cố hệ thống. Bạn có thể thử di chuyển tệp cũ đi (sudo mv /etc/nginx/.htpasswd /etc/nginx/.htpasswd.bak) và tạo lại một tệp hoàn toàn mới với một người dùng thử nghiệm để xem vấn đề có được giải quyết không.
  • Kiểm tra log lỗi Nginx: Như đã đề cập ở phần trước, tệp /var/log/nginx/error.log là cứu cánh của bạn. Nó thường sẽ cung cấp thông tin chi tiết về lý do tại sao việc xác thực thất bại, chẳng hạn như “password mismatch”. Tham khảo thêm các kỹ thuật Social engineering là gì hoặc các rủi ro do Exploit là gì để tăng cường phòng tránh.

Hình minh họa

Best Practices

Để sử dụng Basic Auth một cách hiệu quả và an toàn nhất, việc tuân thủ các quy tắc và thực hành tốt nhất là điều không thể thiếu. Đây không chỉ là những mẹo nhỏ, mà là những nguyên tắc cốt lõi giúp bạn tận dụng tối đa lợi ích của phương pháp này trong khi giảm thiểu các rủi ro tiềm ẩn. Hãy xem đây như là danh sách kiểm tra cuối cùng trước khi bạn triển khai hệ thống vào thực tế.

1. Luôn sử dụng HTTPS khi bật Basic Auth:
Tôi không thể nhấn mạnh điều này đủ. Đây là quy tắc quan trọng nhất. Như đã giải thích, Basic Auth tự nó không mã hóa thông tin đăng nhập trong quá trình truyền tải qua mạng. Nếu không có lớp mã hóa của HTTPS (SSL/TLS), mật khẩu của bạn sẽ bị gửi đi dưới dạng văn bản gần như công khai. Việc kích hoạt HTTPS cho trang web của bạn không còn quá khó khăn hay tốn kém, đặc biệt với các chứng chỉ miễn phí từ Let’s Encrypt. Hãy đảm bảo rằng mọi trang được bảo vệ bằng Basic Auth đều được truy cập qua HTTPS.

Hình minh họa

2. Hạn chế quyền truy cập file chứa mật khẩu:
Nguyên tắc “đặc quyền tối thiểu” nên được áp dụng ở đây. Tệp .htpasswd của bạn là một tài sản nhạy cảm. Hãy đảm bảo rằng chỉ có người dùng root và tiến trình Nginx (www-data) mới có quyền đọc nó. Đừng bao giờ đặt quyền truy cập là 777 hoặc để nó có thể được đọc bởi tất cả người dùng trên hệ thống. Việc thiết lập quyền sở hữu và quyền truy cập chặt chẽ (chown root:www-datachmod 640) là một bước nhỏ nhưng mang lại hiệu quả bảo mật lớn.

3. Thường xuyên cập nhật và thay đổi password định kỳ:
Mật khẩu mạnh là lớp phòng thủ đầu tiên, nhưng việc thay đổi chúng định kỳ cũng quan trọng không kém. Hãy tạo thói quen cập nhật mật khẩu cho các tài khoản trong tệp .htpasswd của bạn, ví dụ như mỗi 3-6 tháng một lần. Điều này làm giảm nguy cơ nếu một mật khẩu cũ vô tình bị lộ. Đồng thời, hãy xóa ngay lập tức các tài khoản người dùng không còn cần quyền truy cập nữa để thu hẹp bề mặt tấn công.

4. Không sử dụng Basic Auth cho các dịch vụ hoặc trang quan trọng:
Hãy hiểu rõ vị trí của Basic Auth. Nó là một giải pháp tuyệt vời cho việc bảo vệ các tài nguyên không quá quan trọng hoặc mang tính nội bộ, như môi trường phát triển, trang demo cho khách hàng, hoặc một bảng điều khiển đơn giản. Tuy nhiên, đối với các ứng dụng chính thức, cổng thông tin khách hàng, hoặc bất kỳ hệ thống nào xử lý dữ liệu nhạy cảm, bạn nên đầu tư vào các giải pháp xác thực hiện đại và mạnh mẽ hơn. Các hệ thống như OAuth2, SAML, hoặc các thư viện quản lý người dùng chuyên dụng sẽ cung cấp các tính năng bảo mật vượt trội như xác thực đa yếu tố, quản lý phiên, và khả năng tích hợp linh hoạt. Mời bạn tìm hiểu thêm về Jwt là gì để nâng cao kiến thức xác thực hiện đại.

Hình minh họa

Kết luận

Vậy là chúng ta đã cùng nhau đi qua toàn bộ quy trình thiết lập Password auth (Basic Auth) cho Nginx trên máy chủ Ubuntu 20.04. Từ việc cài đặt công cụ htpasswd, tạo và quản lý tệp mật khẩu, cho đến việc cấu hình Nginx và kiểm tra hoạt động, bạn có thể thấy rằng đây là một phương pháp bảo mật cực kỳ nhanh chóng và dễ tiếp cận. Lợi ích mà nó mang lại là rất lớn: chỉ với vài dòng lệnh và một chút cấu hình, bạn đã có thể dựng lên một hàng rào vững chắc, ngăn chặn những cặp mắt tò mò và các truy cập trái phép vào những tài nguyên quan trọng của mình.

Việc áp dụng lớp bảo mật này đặc biệt hữu ích cho các môi trường staging, các trang quản trị nội bộ, hoặc bất kỳ khu vực nào bạn không muốn công khai trên internet. Nó đơn giản, hiệu quả và được hỗ trợ nguyên bản bởi Nginx, giúp bạn yên tâm hơn trong quá trình phát triển và vận hành website.

Bước tiếp theo cho bạn là gì? Hãy thử áp dụng ngay kiến thức này vào một trong những dự án của mình. Nếu bạn muốn nâng cao hơn nữa, hãy tìm hiểu cách tích hợp SSL/TLS với Let’s Encrypt để mã hóa toàn bộ phiên làm việc, hoặc nghiên cứu các phương pháp xác thực hiện đại hơn như OAuth2 cho các ứng dụng lớn. Bảo mật là một hành trình không ngừng nghỉ, và những bước đi đầu tiên như thế này chính là nền tảng vững chắc nhất. Cảm ơn bạn đã theo dõi bài viết, và đừng ngần ngại thử ngay để bảo vệ hệ thống của mình hiệu quả hơn!

Hình minh họa

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ
Bài viết liên quan