Thứ tư, 06/08/2014 | 00:00 GMT+7

Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server CentOS 7

Các hệ thống quản lý database quan hệ như MySQL và MariaDB là cần thiết cho một phần đáng kể các trang web và ứng dụng. Tuy nhiên, không phải tất cả user đều cảm thấy thoải mái khi quản lý dữ liệu của họ từ dòng lệnh.

Để giải quyết vấn đề này, một dự án có tên là phpMyAdmin đã được tạo ra để cung cấp một giải pháp thay thế dưới dạng giao diện quản lý dựa trên web. Trong hướng dẫn này, ta sẽ trình bày cách cài đặt và bảo mật cấu hình phpMyAdmin trên server CentOS 7. Ta sẽ xây dựng cài đặt này trên web server Nginx, server này có cấu hình hoạt động tốt và có thể xử lý tải nặng tốt hơn một số web server khác.

Yêu cầu

Trước khi ta bắt đầu, có một số yêu cầu cần được giải quyết.

Để đảm bảo bạn có cơ sở vững chắc để xây dựng hệ thống này, bạn nên chạy qua hướng dẫn cài đặt server ban đầu của ta cho CentOS 7 . Trong số những thứ khác, phần này sẽ hướng dẫn bạn cách cài đặt user không phải root có quyền truy cập sudo cho các lệnh quản trị.

Yêu cầu thứ hai phải được đáp ứng để bắt đầu hướng dẫn này là cài đặt LEMP (Linux, Nginx, MariaDB và PHP) trên server CentOS 7 của bạn. Đây là nền tảng mà ta sẽ sử dụng để phục vụ giao diện phpMyAdmin của ta (MariaDB cũng là phần mềm quản lý database mà ta muốn quản lý). Nếu bạn chưa cài đặt LEMP trên server của bạn , hãy làm theo hướng dẫn của ta về cài đặt LEMP trên CentOS 7 .

Khi server của bạn ở trạng thái hoạt động bình thường sau khi làm theo các hướng dẫn này, bạn có thể tiếp tục với phần còn lại của trang này.

Bước một - Cài đặt phpMyAdmin

Với nền tảng LEMP của ta đã có sẵn, ta có thể bắt đầu ngay với việc cài đặt phần mềm phpMyAdmin. Thật không may, phpMyAdmin không có sẵn trong repository lưu trữ mặc định của CentOS 7.

Để có được các gói ta cần, ta sẽ phải thêm một kho bổ sung vào hệ thống của bạn . EPEL repo ( E xtra P ackages cho E nterprise L inux) chứa nhiều gói bổ sung, bao gồm gói phpMyAdmin mà ta đang tìm kiếm.

May mắn là thủ tục thêm kho EPEL đã trở nên dễ dàng hơn rất nhiều. Trên thực tế, có một gói được gọi là epel-release cấu hình lại trình quản lý gói của ta để sử dụng các kho EPEL.

Ta có thể cài đặt nó ngay bây giờ bằng lệnh :

sudo yum install epel-release 

Đến đây bạn đã có quyền truy cập vào kho EPEL, bạn có thể cài đặt phpMyAdmin thông qua yum:

sudo yum install phpmyadmin 

Quá trình cài đặt sẽ hoàn tất. Để web server Nginx tìm và phục vụ các file phpMyAdmin một cách chính xác, ta chỉ cần tạo một softlink từ các file cài đặt đến folder root tài liệu Nginx của ta bằng lệnh sau:

sudo ln -s /usr/share/phpMyAdmin /usr/share/nginx/html 

Ta cũng nên khởi động lại PHP processor của bạn đảm bảo rằng nó có thể tải các module PHP bổ sung mà ta đã cài đặt:

sudo systemctl restart php-fpm 

Như vậy, cài đặt phpMyAdmin của ta hiện đã hoạt động. Để truy cập giao diện, hãy truy cập domain server của bạn hoặc địa chỉ IP công cộng, theo sau là /phpMyAdmin , trong trình duyệt web :

http://server_domain_or_IP/phpMyAdmin 

màn hình đăng nhập phpMyAdmin

Để đăng nhập, hãy sử dụng cặp tên user / password của user MariaDB hợp lệ. User root và password quản trị MariaDB là một lựa chọn tốt để bắt đầu. Sau đó, bạn có thể truy cập giao diện quản trị:

giao diện quản trị phpMyAdmin

Nhấp vào xung quanh để làm quen với giao diện. Trong phần tiếp theo, ta sẽ thực hiện các bước để bảo mật giao diện mới của bạn .

Bước hai - Bảo mật version phpMyAdmin của bạn

Phiên bản phpMyAdmin được cài đặt trên server của ta sẽ hoàn toàn có thể sử dụng được tại thời điểm này. Tuy nhiên, bằng cách cài đặt giao diện web, ta đã tiếp xúc hệ thống MySQL của bạn với thế giới bên ngoài.

Ngay cả với màn hình xác thực đi kèm, đây là một vấn đề khá nan giải. Do sự phổ biến của phpMyAdmin kết hợp với lượng lớn dữ liệu mà nó cung cấp quyền truy cập, các cài đặt như thế này là mục tiêu phổ biến của những kẻ tấn công.

Ta sẽ thực hiện hai chiến lược đơn giản để giảm nguy cơ cài đặt của ta bị nhắm đến và bị xâm phạm. Ta sẽ thay đổi vị trí của giao diện từ /phpMyAdmin sang một thứ gì đó khác để tránh một số nỗ lực brute-force tự động của bot. Ta cũng sẽ tạo một cổng xác thực cấp web server bổ sung phải được thông qua trước khi truy cập vào màn hình đăng nhập phpMyAdmin.

Thay đổi vị trí truy cập của ứng dụng

Để web server Nginx của ta tìm và phục vụ các file phpMyAdmin của ta , ta đã tạo một softlink từ folder phpMyAdmin tới folder root tài liệu của ta ở bước trước đó.

Để thay đổi URL mà giao diện phpMyAdmin của ta có thể được truy cập, ta chỉ cần đổi tên softlink . Di chuyển vào folder root của tài liệu Nginx để hiểu rõ hơn về những gì ta đang làm:

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 

Như bạn thấy , ta có một softlink được gọi là phpMyAdmin trong folder này. Ta có thể thay đổi tên liên kết này thành bất kỳ tên nào ta muốn. Thao tác này sẽ thay đổi vị trí mà phpMyAdmin có thể được truy cập từ trình duyệt, điều này có thể giúp che khuất điểm truy cập khỏi các bot được mã hóa cứng.

Chọn một tên không cho biết mục đích của địa điểm. Trong hướng dẫn này, ta sẽ đặt tên cho vị trí truy cập của ta /nothingtosee . Để thực hiện điều này, ta sẽ chỉ đổi tên liên kết:

sudo mv phpMyAdmin nothingtosee ls -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 

Bây giờ, nếu bạn đi đến vị trí cài đặt phpMyAdmin trước đó của bạn , bạn sẽ gặp lỗi 404:

http://server_domain_or_IP/phpMyAdmin 

lỗi phpMyAdmin 404

Tuy nhiên, giao diện phpMyAdmin của bạn sẽ có sẵn tại vị trí mới mà ta đã chọn:

http://server_domain_or_IP/nothingtosee 

màn hình đăng nhập phpMyAdmin

Cài đặt cổng xác thực web server

Tính năng tiếp theo mà ta muốn cho cài đặt của bạn là dấu nhắc xác thực mà user sẽ được yêu cầu phải vượt qua trước khi nhìn thấy màn hình đăng nhập phpMyAdmin.

May mắn là hầu hết các web server , bao gồm cả Nginx, đều cung cấp khả năng này. Ta sẽ chỉ cần sửa đổi file cấu hình Nginx của ta với các chi tiết.

Trước khi thực hiện việc này, ta sẽ tạo một file password sẽ lưu trữ thông tin xác thực của ta . Nginx yêu cầu password được mã hóa bằng hàm crypt() . Bộ OpenSSL, đã được cài đặt trên server của bạn, bao gồm chức năng này.

Để tạo password được mã hóa, hãy nhập:

openssl passwd 

Bạn sẽ được yêu cầu nhập và xác nhận password mà bạn muốn sử dụng. Sau đó, tiện ích sẽ hiển thị version password được mã hóa trông giống như sau:

O5az.RSPzd.HE 

Sao chép giá trị này, vì bạn cần dán nó vào file xác thực mà ta sẽ tạo.

Bây giờ, hãy tạo một file xác thực. Ta sẽ gọi file này là pma_pass và đặt nó trong folder cấu hình Nginx:

sudo nano /etc/nginx/pma_pass 

Trong file này, bạn chỉ cần chỉ định tên user bạn muốn sử dụng, theo sau là dấu hai chấm (:), theo sau là version password được mã hóa mà bạn nhận được từ tiện ích openssl passwd .

Ta sẽ đặt tên cho demo user của bạn , nhưng bạn nên chọn một tên user khác. Tệp cho hướng dẫn này trông giống như sau:

demo:O5az.RSPzd.HE 

Lưu file khi bạn hoàn tất.

Bây giờ, ta đã sẵn sàng sửa đổi file cấu hình Nginx của bạn . Mở file này trong editor của bạn để bắt đầu:

sudo nano /etc/nginx/conf.d/default.conf 

Trong file này, ta cần thêm phần vị trí mới. Điều này sẽ nhắm đến đến vị trí mà ta đã chọn cho giao diện phpMyAdmin của bạn ( ta đã chọn /nothingtosee trong hướng dẫn này).

Tạo phần này trong khối server , nhưng bên ngoài bất kỳ khối nào khác. Ta sẽ đặt khối vị trí mới của bạn bên dưới location / khối trong ví dụ của ta :

server {     . . .      location / {         try_files $uri $uri/ =404;     }      location /nothingtosee {     }      . . . } 

Trong khối này, ta cần đặt giá trị của một chỉ thị được gọi là auth_basic thành một thông báo xác thực mà dấu nhắc của ta sẽ hiển thị cho user . Ta không muốn chỉ ra cho user chưa được xác thực những gì ta đang bảo vệ, vì vậy không đưa ra chi tiết cụ thể. Ta sẽ chỉ sử dụng "Đăng nhập quản trị" trong ví dụ của ta .

Sau đó, ta cần sử dụng một chỉ thị có tên auth_basic_user_file để trỏ web server của ta đến file xác thực mà ta đã tạo. Nginx sẽ nhắc user về các chi tiết xác thực và kiểm tra xem các giá trị đã nhập có trùng với những gì nó tìm thấy trong file được chỉ định hay không.

Sau khi ta hoàn thành, file sẽ trông như thế này:

server {     . . .      location / {         try_files $uri $uri/ =404;     }      location /nothingtosee {         auth_basic "Admin Login";         auth_basic_user_file /etc/nginx/pma_pass;     }      . . . } 

Lưu file khi bạn hoàn tất.

Để triển khai cổng xác thực mới của ta , ta phải khởi động lại web server :

sudo systemctl restart nginx 

Bây giờ, nếu ta truy cập vị trí phpMyAdmin trong trình duyệt web của ta (bạn có thể phải xóa bộ nhớ cache của bạn hoặc sử dụng phiên trình duyệt khác nếu bạn đã sử dụng phpMyAdmin), bạn sẽ được yêu cầu nhập tên user và password bạn đã thêm vào file pma_pass :

http://server_domain_or_IP/nothingtosee 

Trang xác thực Nginx

Khi bạn nhập thông tin đăng nhập của bạn , bạn sẽ được đưa đến trang đăng nhập phpMyAdmin bình thường. Lớp bảo vệ bổ sung này sẽ giúp giữ cho log MySQL của bạn sạch sẽ các lần xác thực ngoài lợi ích bảo mật bổ sung.

Kết luận

Đến đây bạn có thể quản lý database MySQL của bạn từ một giao diện web an toàn hợp lý. Giao diện user này hiển thị hầu hết các chức năng có sẵn từ dấu nhắc lệnh MySQL. Bạn có thể xem database và schemas , thực thi các truy vấn cũng như tạo các cấu trúc và tập dữ liệu mới.


Tags:

Các tin liên quan

Cách cài đặt và bảo mật phpMyAdmin với Nginx trên server Ubuntu 14.04
2014-08-06
Cách cài đặt Nginx trên CentOS 7
2014-07-22
Cách tạo chứng chỉ ECC trên Nginx cho Debian 7
2014-07-21
Cách thiết lập cân bằng tải Nginx với kết thúc SSL
2014-07-17
Cách cài đặt Laravel với web server Nginx trên Ubuntu 14.04
2014-06-24
Cách cài đặt gpEasy CMS với NGINX và PHP5-FPM trên Debian 7
2014-06-03
Cách sử dụng Nginx làm Giám đốc lưu lượng toàn cầu trên Debian hoặc Ubuntu
2014-05-30
Cách sử dụng HAProxy làm bộ cân bằng tải lớp 7 cho WordPress và Nginx trên Ubuntu 14.04
2014-05-27
Cách cung cấp tệp mật khẩu KeePass2 với Nginx trên server Ubuntu 14.04
2014-05-16
Cách cài đặt WordPress với Nginx trên Ubuntu 14.04
2014-05-15