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

Các hệ thống quản lý cơ sở dữ liệu quan hệ như MySQL và MariaDB được yêu cầu trong một phần quan trọng của các trang web và ứng dụng. Tuy nhiên, không phải người dùng nào cũng cảm thấy thoải mái khi quản lý dữ liệu của mình thông qua dòng lệnh. Để giải quyết vấn đề này, dự án phpMyAdmin được tạo ra nhằm cung cấp một giao diện quản lý dựa trên web. Bài viết này sẽ hướng dẫn cách bảo mật và cài đặt phpMyAdmin trên máy chủ CentOS Chúng ta sẽ xây dựng cấu hình này trên máy chủ web Nginx, một máy chủ web có hiệu suất tốt và có thể xử lý tải nặng tốt hơn so với một số máy chủ web khác.

Các yêu cầu khi bảo mật và cài đặt phpMyAdmin

Trước khi chúng ta bắt đầu, có một số yêu cầu cần được thỏa mãn.

  • Để đảm bảo bạn có một nền tảng vững chắc để xây dựng hệ thống này, bạn nên làm theo hướng dẫn cài đặt ban đầu cho máy chủ CentOS Trong đó, bạn sẽ được hướng dẫn cách thiết lập một người dùng không phải là người dùng root với quyền truy cập sudo để thực hiện các lệnh quản trị.
  • Yêu cầu tiên quyết thứ hai để bắt đầu hướng dẫn này là cài đặt một bộ LEMP (Linux, Nginx, MariaDB và PHP) trên máy chủ CentOS Đây là nền tảng mà chúng ta sẽ sử dụng để cung cấp giao diện phpMyAdmin (MariaDB cũng là phần mềm quản lý cơ sở dữ liệu mà chúng ta muốn quản lý).

Các bước bảo mật và cài đặt phpMyAdmin

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

Với nền tảng LEMP đã được cài đặt, chúng ta có thể bắt đầu ngay việc cài đặt phần mềm phpMyAdmin. Rất tiếc, phpMyAdmin không có sẵn trong kho lưu trữ mặc định của CentOS 7.

Để có được các gói cần thiết, bạn sẽ phải thêm một kho lưu trữ bổ sung vào hệ thống. Kho lưu trữ EPEL (Extra Packages for Enterprise Linux) chứa nhiều gói bổ sung, bao gồm gói phpMyAdmin mà chúng ta đang tìm kiếm.

May mắn thay, quy trình thêm kho lưu trữ EPEL đã 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 sẽ cấu hình lại trình quản lý gói để sử dụng các kho lưu trữ EPEL.

Và bạn có thể cài đặt gói đó bằng cách gõ lệnh:

sudo yum install epel-release

Bây giờ bạn đã có quyền truy cập vào kho lưu trữ EPEL, bạn có thể cài đặt phpMyAdmin thông qua yum:

sudo yum install phpmyadmin

Quá trình cài đặt sẽ được hoàn tất. Để máy chủ web Nginx có thể tìm và phục vụ các tệp tin phpMyAdmin một cách chính xác, bạn chỉ cần tạo một liên kết tượng trưng từ thư mục cài đặt tới thư mục gốc của Nginx bằng cách gõ lệnh sau:

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

Bạn cũng nên khởi động lại trình xử lý PHP để đảm bảo nó có thể tải các module PHP bổ sung mà bạn đã cài đặt:

sudo systemctl restart php-fpm

Với điều đó, việc cài đặt phpMyAdmin hiện đã hoạt động. Để truy cập vào giao diện, hãy mở trình duyệt web và nhập địa chỉ tên miền hoặc địa chỉ IP công khai của máy chủ, sau đó kết hợp với /phpMyAdmin:

http://server_domain_or_IP/phpMyAdmin

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

Để đăng nhập, sử dụng cặp tên người dùng/mật khẩu của một người dùng hợp lệ trên MariaDB. Người dùng root và mật khẩu quản trị MariaDB là một lựa chọn tốt để bắt đầu. Sau đó, bạn sẽ có thể truy cập vào giao diện quản trị:

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

Hãy khám phá giao diện để làm quen với nó. Trong phần tiếp theo, chúng ta sẽ thực hiện các bước để bảo mật giao diện mới.

Bước 2 - Bảo mật phiên bản phpMyAdmin

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

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

Chúng ta sẽ thực hiện hai chiến lược đơn giản để làm giảm khả năng bị tấn công và xâm nhập vào cài đặt. Chúng ta sẽ thay đổi vị trí giao diện từ /phpMyAdmin sang một địa chỉ khác để tránh một số cuộc tấn công bằng cách dùng bot tấn công mật khẩu. 

Chúng ta cũng sẽ tạo ra một cổng xác thực ở mức độ máy chủ web bổ sung, phải thông qua nó trước khi đến được màn hình đăng nhập của phpMyAdmin.

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

Để máy chủ web Nginx có thể tìm và phục vụ các tệp tin phpMyAdmin, chúng ta đã tạo một liên kết tượng trưng từ thư mục phpMyAdmin tới thư mục gốc của Nginx trong một bước trước đó.

Để thay đổi URL mà giao diện phpMyAdmin có thể được truy cập, chúng ta chỉ cần đổi tên liên kết tượng trưng đó. Di chuyển vào thư mục gốc của Nginx để có một cái nhìn rõ ràng hơn về những gì chúng 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 có thể thấy, chúng ta có một liên kết tượng trưng có tên là phpMyAdmin trong thư mục này. Bạn có thể thay đổi tên liên kết này thành bất cứ cái tên nào mà bạn muốn. 

Điều này sẽ thay đổi vị trí mà phpMyAdmin có thể được truy cập từ trình duyệt, từ đó giúp che giấu điểm truy cập này khỏi các bot được lập trình cứng.

Hãy chọn một tên không cho thấy mục đích của vị trí này. Trong hướng dẫn này, chúng ta sẽ đặt tên vị trí truy cập của chúng ta là /nothingtosee. Để thực hiện điều này, chúng ta chỉ cần đổ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 truy cập vào vị trí trước đó của cài đặt phpMyAdmin, bạn sẽ nhận được lỗi 404:

http://server_domain_or_IP/phpMyAdmin

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

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

http://server_domain_or_IP/nothingtosee

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

  • Thiết lập cổng xác thực máy chủ web

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

May mắn thay, hầu hết các máy chủ web bao gồm Nginx cung cấp khả năng này theo mặc định. Chúng ta chỉ cần sửa đổi tệp cấu hình Nginx với các thông tin cần thiết.

Trước khi làm điều này, chúng ta sẽ tạo một tệp mật khẩu để lưu trữ thông tin xác thực. Nginx yêu cầu mật khẩu được mã hóa bằng cách sử dụng hàm crypt(). Bộ công cụ OpenSSL đã được cài đặt trên máy chủ của bạn bao gồm chức năng này.

Để tạo một mật khẩu đã được mã hóa, gõ lệnh sau:

openssl passwd

Bạn sẽ được nhắc nhập và xác nhận mật khẩu mà bạn muốn sử dụng. Sau đó, tiện ích sẽ hiển thị một phiên bản đã được mã hóa của mật khẩu, có dạng như sau:

O5az.RSPzd.HE

Sao chép giá trị này, vì bạn sẽ cần dán nó vào tệp xác thực sẽ tạo. Bây giờ, hãy tạo một tệp xác thực. Chúng ta sẽ gọi tệp này là pma_pass và đặt nó trong thư mục cấu hình của Nginx:

sudo nano /etc/nginx/pma_pass

Trong tệp này, bạn chỉ cần chỉ định tên người dùng mà bạn muốn sử dụng, theo sau là dấu hai chấm (:), tiếp đến là phiên bản đã mã hóa của mật khẩu bạn nhận được từ tiện ích openssl passwd.

Chúng ta sẽ đặt tên người dùng là demo, nhưng bạn nên chọn một tên người dùng khác. Tệp cho hướng dẫn này có dạng như sau:

demo:O5az.RSPzd.HE

Lưu và đóng tệp khi bạn hoàn thành. Bây giờ, chúng ta sẵn sàng sửa đổi tệp cấu hình Nginx. Mở tệp này trong trình soạn thảo văn bản của bạn để bắt đầu:

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

Trong tệp này, chúng ta cần thêm một phần mới cho vị trí. Phần này sẽ chỉ định vị trí mà chúng ta đã chọn cho giao diện phpMyAdmin (trong hướng dẫn này, chúng ta đã chọn /nothingtosee).

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

server {
    . . .

    location / {
        try_files $uri $uri/ =404;
    }

    location /nothingtosee {

    }

    . . .
}

Trong khối này, chúng ta cần thiết lập giá trị của một chỉ thị gọi là auth_basic thành một thông điệp xác thực sẽ hiển thị cho người dùng. Chúng ta không muốn cho người dùng chưa được xác thực biết chúng ta đang bảo vệ cái gì, vì vậy không cung cấp thông tin cụ thể. Ví dụ này chỉ sử dụng "Đăng nhập quản trị".

Tiếp theo, chúng ta cần sử dụng một chỉ thị gọi là auth_basic_user_file để chỉ định tệp xác thực mà chúng ta đã tạo. Nginx sẽ yêu cầu người dùng cung cấp thông tin xác thực và kiểm tra xem các giá trị đã nhập khớp với những gì nó tìm thấy trong tệp được chỉ định.

Sau khi hoàn thành, tệp sẽ trông 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 tệp khi bạn hoàn thành. Để thực hiện cổng xác thực mới bạn phải khởi động lại máy chủ web:

sudo systemctl restart nginx

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

http://server_domain_or_IP/nothingtosee

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

Sau khi nhập thông tin đăng nhập, bạn sẽ được chuyển đến trang đăng nhập phpMyAdmin thông thường. Lớp bảo vệ bổ sung này sẽ giúp giữ cho nhật ký MySQL của bạn trong sạch và không có các cố gắng xác thực, bên cạnh lợi ích bảo mật bổ sung.

Bên trên chính là các bước cụ thể để bảo mật và cài đặt phpMyAdmin, áp dụng theo hướng dẫn này bạn có thể quản lý cơ sở dữ liệu MySQL của mình từ giao diện web an toàn. Giao diện người dùng này cung cấp hầu hết các chức năng có sẵn từ dòng lệnh MySQL. Bạn có thể xem cơ sở dữ liệu và schema, thực thi các truy vấn, tạo các tập dữ liệu đồng thời cấu trúc mới.

Các gói dịch vụ Cloud VPS của KDATA mang đến cho bạn nhiều lựa chọn về hiệu suất cũng như khả năng lưu trữ, mọi nhu cầu về doanh nghiệp đều được đáp ứng. KDATA đảm bảo khả năng uptime lên đến 99,99%, toàn quyền quản trị và free backup hằng ngày. Tham khảo ngay các gói dịch vụ Cloud VPS:

https://kdata.vn/cloud-vps

👉 Liên hệ ngay KDATA hỗ trợ tận tình, support tối đa, giúp bạn trải nghiệm dịch vụ giá hời chất lượng tốt nhất