Giới thiệu
Trong bối cảnh an ninh mạng ngày càng phức tạp, việc bảo vệ máy chủ web khỏi các truy cập trái phép là một ưu tiên hàng đầu. Apache, máy chủ web phổ biến, cung cấp một phương thức xác thực cơ bản nhưng hiệu quả: xác thực mật khẩu. Bài viết này sẽ hướng dẫn chi tiết cách thiết lập xác thực mật khẩu cho Apache trên Ubuntu, tập trung vào các bước thực hiện, tùy chọn cấu hình và các biện pháp bảo mật liên quan. Bằng cách áp dụng đúng cách các kỹ thuật này, bạn có thể tăng cường đáng kể tính bảo mật cho máy chủ web của mình, bảo vệ dữ liệu khỏi các truy cập trái phép và đảm bảo hoạt động ổn định của hệ thống.
Hướng dẫn.
Bước 1: Truy cập SSH vào máy chủ Ubuntu
Đầu tiên bạn cần truy cập SSH vào máy chủ ubuntu của mình.
Bước 2: Cài đặt Apache và tiện ích.
Để thực hiện theo các bước trong bài viết, bạn cần sử dụng công cụ htpasswd – một thành phần trong package apache2-utils – để tạo file, quản lý username và password cho các nội dung cần giới hạn.
Cập nhật chỉ mục gói của server bằng lệnh sau
sudo apt updateCài đặt Apache2 bằng lệnh sau:
sudo apt install apache2 -y
Dùng lệnh sau để khởi động và kiểm tra trạng thái Apache2.
systemctl start apache2
systemctl enable apache2
systemctl status apache2
Sau đó cài đặt gói công cụ Apache:
sudo apt install apache2-utils
Bước 3: Tạo file password
sau khi có quyền truy cập vào lệnh htpasswd, bạn có thể tạo file mật khẩu giúp Apache có thể xác thực người dùng. Đó là file ẩn có tên .htpasswd nằm trong thư mục cấu hình /etc/apache2 của hệ thống.
Ở lần đầu tiên sử dụng công cụ, bạn cần thêm option -c để tạo file .htpasswd, ở phía cuối lệnh sẽ có tên username (trong ví dụ này là phongdinh) để tạo một entry mới trong file:
sudo htpasswd -c /etc/apache2/.htpasswd phongdinhSau đó bạn sẽ được yêu cầu cung cấp và xác thực mật khẩu cho người dùng.

Đối với các lần sử dụng lệnh tiếp theo, bạn có thể bỏ đối số -c khi muốn thêm những người dùng khác:
sudo htpasswd /etc/apache2/.htpasswd another_userNội dung của file bây giờ sẽ chứa username và mật khẩu được mã hóa cho từng bản ghi, có thể dùng lệnh sau để kiểm tra.
cat /etc/apache2/.htpasswdFile sẽ chứa nội dung dạng:
username:$apr1$somehash$encryptedpassword
Bước 4: Tạo thư mục cho website
sudo mkdir -p /var/www/demoattt.phongdinh.id.vn/public_html
sudo chown -R www-data:www-data /var/www/demoattt.phongdinh.id.vn
sudo chmod -R 755 /var/www/demoattt.phongdinh.id.vn
Bước 5: Cấu hình xác thực cho Apache
Có hai cách để thiết lập xác thực, trực tiếp cấu hình trong file virtual host, hoặc đưa file .htaccess vào các thư mục cần giới hạn. Đa số gợi ý nên sử dụng file virtual host, nhưng nếu muốn cho phép cả những user non-root tự quản lý mức độ giới hạn truy cập của mình thì hãy làm theo cách thứ hai.
Cách 1: Sử dụng Virtual Host
Ở cách này bạn sẽ chỉnh sửa cấu hình Apache và thêm mật khẩu bảo vệ vào file virtual host. Việc này thường sẽ có nhiều ưu điểm hơn vì dịch vụ sẽ không cần phải đọc nhiều file cấu hình phân tán trên server. Tuy nhiên việc chỉnh sửa chỉ có thể thực hiện được nếu bạn có quyền truy cập vào cấu hình.
Trước tiên hãy mở file virtual host bạn cần giới hạn, trong ví dụ này sẽ là file /etc/apache2/sites-available/demoattt.phongdinh.id.vn.conf chứa virtual host.
vi /etc/apache2/sites-available/demoattt.phongdinh.id.vn.confThêm đoạn cấu hình sau và file:
Lưu ý: Phần ServerName và ServerAlias bạn thay bằng tên miền của mình hoặc để localhost nhé!
- ServerName: Định danh tên miền chính mà VirtualHost này sẽ xử lý.
- ServerAlias: Cho phép xử lý các tên miền phụ. Ở đây, nó chấp nhận cả www.demoattt.phongdinh.id.vn.
- DocumentRoot: Đây là đường dẫn đến thư mục chứa mã nguồn website. Khi có truy vấn đến demoattt.phongdinh.id.vn, Apache sẽ tìm file index.html hoặc index.php trong thư mục này để hiển thị.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName demoattt.phongdinh.id.vn
ServerAlias www.demoattt.phongdinh.id.vn
DocumentRoot /var/www/demoattt.phongdinh.id.vn/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory "/var/www/demoattt.phongdinh.id.vn/public_html">
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Directory>
</VirtualHost>
Lưu và thoát khòi file.
Sau khi chỉnh sửa file dùng lệnh sau để kiểm tra file cấu hình có lỗi hay không.
sudo apachectl configtest
Kích hoạt Virtual Host & Reload Apache
sudo a2ensite demoattt.phongdinh.id.vn
sudo systemctl reload apache2
Thực hiện lệnh sau khởi động lại Apache2.
sudo systemctl restart apache2
Truy cập website để kiểm tra, sau khi truy cập bạn sẽ thấy thông báo điền user/password bạn thiết lập ở bước 3.

Sau khi điền user/pass đúng bạn sẽ vào được giao diện web

Cách 2: Sử dụng .htaccess
Apache có thể sử dụng file .htaccess để cho phép một số nội dung cấu hình được thiết lập bên trong thư mục. Tuy nhiên Apache sẽ phải đọc lại các file này sau mỗi request liên quan đến thư mục nên cách này thường ảnh hưởng xấu đến hiệu năng của dịch vụ. Tuy nhiên nếu bạn đang sử dụng file .htaccess để cho phép các user non-root tự quản lý giới hạn của mình thì vẫn đây vẫn là cách tối ưu hơn.
Trước tiên, mở file config Apache bằng một text editor bất kỳ và thêm đoạn cấu hình sau.
vi /etc/apache2/apache2.confTìm block <Directory> cho thư mục /var/www chứa root tài liệu. Cập nhật dòng này để phản ánh root rồi đổi directive AllowOverride từ None thành All. Bây giờ nội dung của block sẽ như dưới đây:
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
Sau đó lưu rồi đóng file lại.
Tiếp theo, thêm một file .htaccess vào thư mục cần hạn chế. Trong ví dụ này, bạn sẽ giới hạn toàn bộ root tài liệu (tức là cả website) ở /var/www/demoattt.phongdinh.id.vn/public_html:
cd /var/www/demoattt.phongdinh.id.vn/public_html/
vi .htaccessTrong file này bạn thực hiện chỉ định phương thức xác thực Basic, phần AuthName chỉ định tên sẽ hiển thị cho người dùng khi yêu cầu thông tin đăng nhập. Directive AuthUserFile dùng để trỏ Apache đến file password vừa tạo trước đó. Cuối cùng, bạn cần thiết lập sao cho chỉ user valid-user mới có quyền truy cập tài nguyên:
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Sau đó lưu rồi đóng lại file.
Khởi động lại apache2:
sudo systemctl restart apache2
sudo systemctl status apache2
Truy cập website kiểm tra

Tổng kết.
Việc thiết lập xác thực mật khẩu cho Apache trên Ubuntu không chỉ là một bước đơn giản, mà còn là một hành động thiết yếu trong việc bảo vệ an ninh máy chủ web của bạn. Bằng cách thực hiện đúng theo các bước hướng dẫn chi tiết đã trình bày, bạn đã tạo ra một lớp bảo vệ vững chắc, ngăn chặn những truy cập trái phép và bảo vệ dữ liệu quan trọng. Tuy nhiên, đừng quên rằng bảo mật là một quá trình liên tục. Hãy thường xuyên cập nhật kiến thức, áp dụng các biện pháp bảo mật bổ sung như HTTPS, tường lửa, và giám sát hệ thống để đảm bảo máy chủ của bạn luôn trong trạng thái an toàn nhất.
