Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 16.04
Khi chạy một trang web, thường có những phần của trang web mà bạn muốn hạn chế khách truy cập. Các ứng dụng web có thể 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 web server cũng được dùng để 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.Trong hướng dẫn này, ta sẽ trình bày cách bảo vệ nội dung bằng password trên web server Apache chạy trên Ubuntu 16.04.
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 16.04.
Ngoài ra, bạn cần những thứ 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 16.04 .Web server Apache2 : Nếu bạn chưa cài đặt một web server , hãy xem phần Apache của bài viết chuyên sâu, Cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.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 tùy 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ó domain … cách dễ nhất để bảo mật trang web là với 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
Ta sẽ sử dụng một tiện ích gọi là 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-get update
- sudo apt-get install apache2-utils
Bước 2 - Tạo file password
Bây giờ ta có quyền truy cập vào lệnh htpasswd
. Ta có thể sử dụng điều này để 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 file đượ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:
- 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ước 3 - Cấu hình xác thực password Apache
Bây giờ ta có một file với user và password ở định dạng mà Apache có thể đọc, 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 file .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 file .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 000-default.conf
chứa server ảo mặc định được cài đặt thông qua gói apache của Ubuntu:
- sudo nano /etc/apache2/sites-enabled/000-default.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 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:
<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.
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
, sau đó 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 bây giờ 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 file .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:
- 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ừ “Không” thành “Tất cả”:
. . . <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> . . .
Lưu file khi bạn hoàn tất.
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
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 . Tuy nhiên, cấu hình Apache và .htaccess có thể làm được nhiều việc hơn là xác thực cơ bản. Để 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 xem Cách cấu hình Server Web Apache trên Ubuntu hoặc Debian VPS
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 cung cấp các ứng dụng Django với Apache và mod_wsgi trên Ubuntu 16.042016-05-17
Cách mã hóa kết nối Tomcat 8 với Apache hoặc Nginx trên Ubuntu 16.04
2016-04-29
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 16.04
2016-04-21
Cách thiết lập server ảo Apache trên Ubuntu 16.04
2016-04-21
Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 16.04
2016-04-21
Cách thiết lập Let's Encrypt chứng chỉ cho nhiều server ảo Apache trên Ubuntu 14.04
2016-01-19
Cách bảo mật Apache bằng Let's Encrypt trên Ubuntu 14.04
2015-12-18
Cách thiết lập server lưu lượng truy cập Apache làm Reverse-Proxy trên Ubuntu 14.04
2015-10-03
Cách thiết lập một cụm thụ động chủ động Apache bằng máy tạo nhịp tim trên CentOS 7
2015-09-08
Cách bảo vệ server Apache với Fail2Ban trên Ubuntu 14.04
2015-08-14