Cách cài đặt và bảo mật phpMyAdmin với Nginx trên Ubuntu 16.04
Trong khi nhiều user cần chức năng của một hệ quản trị database như MySQL, giao diện dòng lệnh của nó có thể kém trực quan và thân thiện với user đối với một số người, dẫn đến một rào cản gia nhập.phpMyAdmin được tạo ra để user có thể tương tác với MySQL thông qua giao diện web. Trong hướng dẫn này, ta sẽ thảo luận về cách cài đặt và bảo mật phpMyAdmin để bạn có thể sử dụng nó một cách an toàn để quản lý database của bạn từ hệ thống Ubuntu 16.04. Ta sẽ xây dựng cài đặt này trên web server Nginx, server này có cấu hình hiệu suất 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 bắt đầu với hướng dẫn này, hãy đảm bảo bạn đã hoàn thành các bước yêu cầu sau:
- Đầu tiên, ta sẽ giả định bạn đang sử dụng user không phải root có quyền sudo, như được mô tả trong các bước 1-4 của cài đặt server ban đầu của Ubuntu 16.04 .
- Ta cũng sẽ giả định bạn đã hoàn thành cài đặt LEMP (Linux, Nginx, MySQL và PHP) trên server Ubuntu 16.04 của bạn . Nếu bạn chưa thực hiện việc này, bạn có thể làm theo hướng dẫn cài đặt LEMP trên Ubuntu 16.04 . Hãy nhớ ghi lại password quản trị database MySQL của bạn.
Cuối cùng, có những cân nhắc bảo mật quan trọng cần lưu ý khi sử dụng phần mềm như phpMyAdmin: nó giao tiếp trực tiếp với cài đặt MySQL của bạn, xử lý xác thực bằng thông tin đăng nhập MySQL, thực thi và trả về kết quả cho các truy vấn SQL tùy ý.
Vì những lý do này và bởi vì nó là một ứng dụng PHP được triển khai rộng rãi thường xuyên bị nhắm đến tấn công, bạn không nên chạy phpMyAdmin trên các hệ thống từ xa qua kết nối HTTP thuần túy. Nếu bạn chưa có domain hiện có được cấu hình với certificate SSL / TLS, bạn có thể làm theo hướng dẫn này về cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04 .
Khi bạn đã hoàn thành các bước tiên quyết này, bạn đã sẵn sàng để bắt đầu với hướng dẫn này.
Bước 1 - Cài đặt phpMyAdmin
Với nền tảng LEMP của ta đã có sẵn, ta có thể bắt đầu bằng cách cài đặt phpMyAdmin, có sẵn từ repository mặc định của Ubuntu.
Đầu tiên, ta sẽ cập nhật index gói local của server đảm bảo nó có một tập hợp tham chiếu mới đến các gói có sẵn. Sau đó, ta sẽ sử dụng các công cụ đóng gói apt
để kéo phần mềm xuống từ kho và cài đặt nó trên hệ thống của ta :
- sudo apt-get update
- sudo apt-get install phpmyadmin
Trong quá trình cài đặt, bạn sẽ được yêu cầu một số thông tin. Nó sẽ hỏi bạn web server nào bạn muốn phần mềm tự động cấu hình. Vì Nginx, web server mà ta đang sử dụng, không phải là một trong những tùy chọn có sẵn, bạn có thể chỉ cần nhấn TAB
, sau đó ENTER
để bỏ qua dấu nhắc này.
Dấu nhắc tiếp theo sẽ hỏi bạn có muốn dbconfig-common
cấu hình database để phpMyAdmin sử dụng hay không. Chọn “Có” để tiếp tục. Bạn cần nhập password quản trị database mà bạn đã cấu hình trong quá trình cài đặt MySQL để cho phép những thay đổi này.
Đến đây bạn sẽ được yêu cầu chọn và xác nhận password cho ứng dụng phpMyAdmin và database của nó (sẽ được tạo trong bước này). Chọn và xác nhận một password an toàn và ghi chú lại nó.
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 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 :
- sudo ln -s /usr/share/phpmyadmin /var/www/html
Cuối cùng, ta cần kích hoạt module mcrypt
PHP, mà phpMyAdmin dựa vào. Điều này đã được cài đặt với phpMyAdmin, vì vậy ta sẽ bật nó lên và khởi động lại PHP processor của ta :
- sudo phpenmod mcrypt
- sudo systemctl restart php7.0-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
Để đăng nhập, hãy sử dụng một bộ thông tin xác thực cho user MySQL hợp lệ. Ví dụ: user root
và password quản trị MySQL 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ị:
Nhấp vào xung quanh để làm quen với giao diện.
Trong hai phần tiếp theo, ta sẽ thực hiện các bước để bảo mật console web phpMyAdmin mới của ta .
Bước 2 - Thay đổi URL phpMyAdmin mặc định
Cài đặt phpMyAdmin sẽ hoàn toàn hoạt động tại thời điểm này. Tuy nhiên, bằng cách cài đặt giao diện web, ta đã đưa server database MySQL của bạn ra thế giới bên ngoài. Do sự phổ biến của phpMyAdmin và lượng lớn dữ liệu mà nó có thể 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 cho các cuộc tấn công.
Trong phần này, ta sẽ “ củng cố ” hoặc khóa cài đặt của bạn bằng cách thay đổi URL của giao diện từ /phpmyadmin
thành một thứ gì đó không chuẩn để bỏ qua một số nỗ lực brute-force tự động của bot.
Trong bước trước đó, ta đã tạo một softlink từ folder phpMyAdmin tới folder root tài liệu của ta để web server Nginx của ta tìm và phục vụ các file phpMyAdmin của ta . Để thay đổi URL cho giao diện phpMyAdmin của ta , ta sẽ đổi tên softlink này.
Đầu tiên, hãy chuyển đến folder root của tài liệu Nginx để hiểu rõ hơn về thay đổi mà ta sẽ thực hiện:
- cd /var/www/html/
- ls -l
Bạn sẽ nhận được kết quả sau:
Outputtotal 4 -rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html lrwxrwxrwx 1 root root 21 Apr 10 17:06 phpmyadmin -> /usr/share/phpmyadmin
Kết quả cho thấy ta có một softlink có tên 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. Điều này sẽ thay đổi URL truy cập của phpMyAdmin, có thể giúp che khuất điểm cuối khỏi các bot được mã hóa cứng để tìm kiếm các tên điểm cuối phổ biến (chẳng hạn như “phpmyadmin”).
Chọn một tên che khuất mục đích của điểm cuối. Trong hướng dẫn này, ta sẽ đặt tên cho endpoint / nothingtosee
, nhưng bạn nên chọn một tên thay thế. Để thực hiện điều này, ta sẽ chỉ đổi tên liên kết:
- sudo mv phpmyadmin nothingtosee
- ls -l
Sau khi chạy các lệnh trên, bạn sẽ nhận được kết quả sau:
Outputtotal 4 -rw-r--r-- 1 root root 612 Apr 10 16:40 index.nginx-debian.html lrwxrwxrwx 1 root root 21 Apr 10 17:06 nothingtosee -> /usr/share/phpmyadmin
Bây giờ, nếu bạn truy cập URL cũ, bạn sẽ gặp lỗi 404:
http://server_domain_or_IP/phpmyadmin
Bây giờ, giao diện phpMyAdmin của bạn sẽ có sẵn tại URL mới mà ta vừa cấu hình :
http://server_domain_or_IP/nothingtosee
Bây giờ ta có thể tăng cường cài đặt phpMyAdmin của bạn hơn nữa bằng cách cài đặt một cổng xác thực.
Bước 3 - Cài đặt Cổng xác thực Nginx
Tính năng tiếp theo mà ta sẽ cài đặt 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. 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. 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:
OutputO5az.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 sẽ chỉ định tên user mà bạn muốn sử dụng, tiếp theo là dấu hai chấm ( :
), tiếp theo là version được mã hóa của password mà bạn nhận được từ openssl passwd
tiện ích.
Ta sẽ đặt tên cho user của bạn là sammy
, nhưng bạn nên chọn một tên user khác. Tệp sẽ trông như thế này:
sammy: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ở nó trong editor của bạn để bắt đầu:
- sudo nano /etc/nginx/sites-available/default
Trong file này, ta cần thêm phần location
mới. Điều này sẽ nhắm đến đến location
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 location
mới bên dưới /
khối trong ví dụ của ta :
server { . . . location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } location /nothingtosee { } . . . }
Trong khối này, ta cần đặt giá trị của một biến có tên 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 cho user chưa được xác thực biết những gì ta đang bảo vệ, vì vậy không cung cấp 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 thêm một biến có tên auth_basic_user_file
để trỏ web server của ta đến file xác thực mà ta vừa 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.
Để kích hoạt cổng xác thực mới của ta , ta phải khởi động lại web server :
- sudo service nginx restart
Bây giờ, nếu bạn truy cập URL phpMyAdmin trong trình duyệt web của bạn (nếu việc làm mới trang không hoạt động, bạn có thể phải xóa bộ nhớ cache 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 về tên user và password bạn đã thêm vào file pma_pass
:
http://server_domain_or_IP/nothingtosee
Sau khi nhập thông tin đăng nhập của bạn , bạn sẽ được đưa đến trang đăng nhập phpMyAdmin tiêu chuẩn.
Ngoài việc cung cấp một lớp bảo mật bổ sung, cổng này sẽ giúp giữ cho log MySQL của bạn sạch các nỗ lực xác thực spam.
Kết luận
Sau khi hoàn thành hướng dẫn này, bây giờ 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 thể hiện hầu hết các chức năng có sẵn thông qua dòng lệnh MySQL. Bạn có thể duyệt qua database và schemas , thực thi các truy vấn và tạo các cấu trúc và tập dữ liệu mới.
Các tin liên quan
Cách lưu trữ trang web bằng Cloudflare và Nginx trên Ubuntu 16.042018-03-15
Nginx Essentials: Khắc phục sự cố cài đặt và cấu hình
2017-12-12
Cách thiết lập Let's Encrypt với Nginx Server Blocks trên Ubuntu 16.04
2017-10-27
Cách bảo mật Nginx bằng Let's Encrypt trên Ubuntu 16.04
2017-10-27
Cách tăng điểm tốc độ trang bằng cách thay đổi cấu hình Nginx của bạn trên Ubuntu 16.04
2017-08-15
Cách thêm module log vào Nginx trên Debian 8
2017-06-21
Cách triển khai ứng dụng Laravel với Nginx trên Ubuntu 16.04
2017-06-14
Cách bảo mật CI bằng SSL bằng Nginx trên Ubuntu 16.04
2017-05-26
Cách cấu hình Buildbot với SSL bằng Nginx Reverse Proxy
2017-05-17
Cách cấu hình Jenkins với SSL bằng cách sử dụng Nginx Reverse Proxy
2017-05-02