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ềnsudo
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
Outputsammy:$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:
<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:
<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:
<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
:
. . . <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:
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:
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":
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:
Để hiểu rõ hơn về file cấu hình chính, hãy đọc phần về Làm quen với các file và folder Apache quan trọng
trong hướng dẫn cài đặt Apache của ta .Tìm hiểu thêm về file server ảo trong Cách cài đặt Server ảo Apache trên Ubuntu 16.04
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 “Không được phép” ở trên hoặc bao gồm các phần tử phổ biến trên tất cả các trang web với Server Side Bao gồm trong hướng dẫn Cách Sử dụng Tệp .htaccess của ta .
Các tin liên quan
Cách cài đặt Apache Kafka trên Debian 102019-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