Cài đặt và bảo mật phpMyAdmin với Nginx trên Server CentOS 7
Cài đặt và bảo mật phpMyAdmin với Nginx trên Server CentOS 7
Hệ quản trị cơ sở dữ liệu quan hệ như MySQL và MariaDB cần thiết cho một phần đáng kể của các trang web và các ứng dụng. Tuy nhiên, không phải tất cả người dùng cảm thấy thoải mái quản lý dữ liệu của họ qua giao diện dòng lệnh.
Để giải quyết vấn đề này, một project được gọi là phpMyAdmin đã được tạo ra để cung cấp một sự lựa chọn thay thế bằng một giao diện quản lý dựa trên giao diện web. Trong hướng dẫn này, ta sẽ làm rõ cách cài đặt và cấu hình phpMyAdmin trên một máy chủ CentOS 7 trên một Nginx web server.
Yêu cầu
Bạn sẽ cần một server chạy CentOS 7 với:
- Một sudo non root user. Tham khảo bài viết Thiết lập ban đầu cho server chạy Centos 7.
- LEMP stack được cài đặt và cấu hình theo bài viết Hướng dẫn cài LEMP stack trên CentOS 7
Bước 1 - Cài phpMyAdmin
Với LEMP đã được cài đặt, ta sẽ bắt đầu cài phpMyAdmin. Thế nhưng công cụ này lại không có sẵn trong repository của CentOS 7.
Vì vậy ta cần thêm gói EPEL(Extra Packages for Enterprise Linux) vào repository, vì nó chứa gói cài đặt của phpMyAdmin với gói epel-release
có sẵn trong repository của Centos 7.
Cài nó với lệnh sau:
sudo yum install epel-release
Sau đó cài phpMyAdmin qua lệnh yum:
sudo yum install phpmyadmin
Để Nginx có thể tìm và phục vụ file phpMyAdmin một cách chuẩn xác thì chúng ta sẽ tạo một link tượng trưng từ file cài đặt của nó đến cho thư mục gốc của Nginx:
sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html
Sau đó khởi động lại bộ xử lí PHP:
sudo systemctl restart php-fpm
Đến đây phpMyAdmin đã được cài đặt xong. Ta sẽ truy cập giao diện của nó trong trình duyệt web với địa chỉ sau:
http://server_domain_or_IP/phpMyAdmin
Để đăng kí, dùng một cặp username/password hợp lệ của một MariaDB user. Bạn nên sử dụng root
user cùng mật khẩu của nó để đăng nhập vào trang quản trị.
Bước 2 — Bảo mật bản cài đặt của phpMyAdmin
phpMyAdmin đã được cài đặt thành công trên server và đã sẵn sàng để sử dụng. Tuy nhiên, vì nó sử dụng một giao diện web qua một địa chỉ cụ thể nên có thể bị truy cập trái phép từ bên ngoài và rất dễ bị tấn công.
Ở bước này ta sẽ thêm một vài tầng bảo mật cơ bản cho nó đế sử dụng một cách an toàn.
Đổi địa chỉ truy cập
Để Nginx web server có thể tìm và phục vụ các file phpMyAdmin, ta đã tạo một đường link kết nối với phpMyAdmin. Đầu tiên ta cần thay đổi đường dẫn này.
Truy cập vào thư mục gốc của Nginx rồi thay đổi đường dẫn với các lệnh sau:
cd /usr/share/nginx/html
ls -l
-rw-r--r-- 1 root root 537 Aug 5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 phpMyAdmin -> /usr/share/phpMyAdmin
Ở đây ta sẽ đổi thành /nothingtosee
như sau:
sudo mv phpMyAdmin nothingtoseels -l
total 8
-rw-r--r-- 1 root root 537 Aug 5 08:15 50x.html
-rw-r--r-- 1 root root 612 Aug 5 08:15 index.html
lrwxrwxrwx 1 root root 21 Aug 6 17:29 nothingtosee -> /usr/share/phpMyAdmin
Giờ nếu truy cập địa chỉ sau, bạn sẽ gặp lỗi 404 như sau:
http://server_domain_or_IP/phpMyAdmin
Giao diện phpMyAdmin sẽ được truy cập thông qua địa chỉ bạn đã edit:
http://server_domain_or_IP/nothingtosee
Thiết lập cổng Xác thực cho Web Server
Tiếp theo ta sẽ đặt một cổng xác thực cho các user trước khi đăng nhập vào giao diện quản trị.
Một điều may mắn là hầu hết các web server, bao gồm cả Nginx đều hỗ trợ tính năng này. Ta sẽ chỉnh sửa file cấu hình của Nginx để kích hoạt nó.
Nhưng trước hết ta cần tạo một file mật khẩu để lưu thông tin về quyền xác thực. Nginx sẽ yêu cầu mật khẩu được mã hóa sử dụng hàm crypt()
.Ta sẽ sử dụng OpenSSL vì nó chứa chức năng này.
Để tạo một mật khẩu mã hóa, nhập lệnh:
openssl passwd
Bạn sẽ nhập mật khẩu , sau đó hệ thống sẽ hiển thị dạng mã hóa của nó:
O5az.RSPzd.HE
Copy giá trị này.
Giờ thì tạo file xác thực gọi là pma_pass
và đặt vào mục cấu hình Nginx:
sudo nano /etc/nginx/pma_pass
Trong file này bạn sẽ xác định tên người dùng bạn muốn sử dụng sau đó là dấu (:) sau đó là mật khẩu đã được mã hóa mà bạn nhận được từ openssl passwd
.
Ta sẽ sử dụng tên người dùng là demo
, nhưng bạn có thể chọn tên phức tạp hơn nếu muốn:
demo:O5az.RSPzd.HE
Lưu và đóng file khi hoàn thành.
Giờ sẽ điều chỉnh file cấu hình Nginx :
sudo nano /etc/nginx/conf.d/default.conf
Trong file này ta sẽ thêm vị trí mới cho giao diện phpMyAdmin ( ta sẽ lựa chọn /nothingtosee
).
Tạo mục này trong khối server
, và vị trí ở bên dưới khối location /
:
server {
. . .
location / {
try_files $uri $uri/ =404;
}location /nothingtosee {} . . .
}
Trong khối này ta sẽ thiết lập giá trị cho auth_basic
để một thông báo xác thực sẽ hiển thị cho người dùng. Và ta không nhất thiết phải thông báo cho những người dùng không xác thực mà đang được bảo vệ nên không cần phải cài đặt quá là chi tiết, ta chỉ cần sử dụng tên"Admin login".
Sau đó dùng mục auth_basic_user_file
để trỏ webserver tới file xác thực mà chúng ta đã tạo. Nginx sẽ xác nhận người dùng và kiểm tra giá trị đầu vào có hợp lệ không.
Kết quả như sau:
server {
. . .
location / {
try_files $uri $uri/ =404;
}location /nothingtosee {auth_basic "Admin Login";auth_basic_user_file /etc/nginx/pma_pass; }. . .
}
Lưu và đóng file khi hoàn thành.
Để kích hoạt cổng xác thực mới , ta cần khởi tạo lại web server :
sudo systemctl restart nginx
Giờ thì truy cập vị trí phpMyAdmin trên trình duyệt (nếu dang sử dụng phpMyAdmin rồi thì bạn cần dọn sạch bộ nhớ đệm và mở trên trình duyệt khác),sau đó xác nhận tên người dùng và mật khẩu mà bạn đã tạo trong file pma_pass
:
http://server_domain_or_IP/nothingtosee
Khi nhập nhãn quyền xong rồi thì bạn sẽ được điều hướng tới một giao diện đăng nhập phpMyAdmin. Một lớp bảo vệ bên ngoài sẽ bảo vệ MySQL để tăng tính bảo mật.
Kết luận
Giờ bạn có thể quản lý hệ cơ sở dữ liệu MySQL từ mộ giao diện web đã được bảo mật. Công cụ UI này sẽ mô phỏng hầu hết các chức năng hiện có từ nguồn lệnh của MySQL , nơi mà bạn có thể xem hệ cơ sở dữ liệu và giản đồ, thực hiện các truy vấn và tạo các cấu trúc dữ liệu mới.