Cách cài đặt và bảo mật phpMyAdmin với Nginx trên máy chủ Ubuntu 20.04

1 tháng trước, Cài đặt VPS, Ubuntu, 174 Lượt xem

Đăng ký cập nhập video từ netweb.vn

Khi phát triển một trang web hoặc ứng dụng web, nhiều người dùng cần chức năng của một hệ thống cơ sở dữ liệu như MySQL . Tuy nhiên, việc tương tác với hệ thống chỉ từ máy khách dòng lệnh MySQL yêu cầu sự quen thuộc với Ngôn ngữ truy vấn có cấu trúc – thường được gọi là SQL – có thể gây trở ngại lớn cho một số người dùng.

phpMyAdmin được tạo ra để cho phép người dùng tương tác với MySQL thông qua giao diện web trực quan, chạy cùng với môi trường phát triển PHP. Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt phpMyAdmin trên máy chủ Nginx.

Điều kiện quan trọng cần có

Để hoàn thành hướng dẫn này, bạn sẽ cần:

  • Máy chủ chạy Ubuntu 20.04. Máy chủ này phải có người dùng không phải root có đặc quyền quản trị và tường lửa được định cấu hình với ufw. Để thiết lập điều này, hãy làm theo hướng dẫn thiết lập tường lửa máy chủ uft của chúng tôi cho Ubuntu 20.04 .
  • Một ngăn xếp LEMP (Linux, Nginx, MySQL và PHP) được cài đặt trên máy chủ Ubuntu 20.04 của bạn. Để cài đặt và định cấu hình các thành phần này, hãy làm theo hướng dẫn của chúng tôi về Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên Ubuntu 20.04 .

Ngoài ra, vì phpMyAdmin xử lý xác thực bằng thông tin đăng nhập MySQL, chúng tôi thực sự khuyên bạn nên cài đặt chứng chỉ SSL / TLS để kích hoạt lưu lượng được mã hóa giữa máy chủ và máy khách. Nếu bạn không có miền hiện có được định cấu hình với chứng chỉ hợp lệ, hãy làm theo hướng dẫn này về cách bảo mật Nginx với Let’s Encrypt trên Ubuntu 20.04 để thiết lập điều này.

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

Bạn có thể cài đặt phpMyAdmin bằng cách sử dụng APT để tải xuống phpmyadmin gói từ kho lưu trữ mặc định của Ubuntu.

Bắt đầu bằng cách cập nhật chỉ mục gói của máy chủ:

sudo apt update

Bây giờ bạn có thể cài đặt phpMyAdmin bằng cách chạy lệnh sau:

sudo apt install phpmyadmin

Trong quá trình cài đặt, bạn sẽ được nhắc chọn một máy chủ web (Apache hoặc Lighttpd) để cấu hình. phpMyAdmin có thể tự động thực hiện một số thay đổi cấu hình để đảm bảo rằng nó hoạt động chính xác với một trong các máy chủ web này khi cài đặt. Tuy nhiên, vì bạn đang sử dụng Nginx làm máy chủ web, bạn không nên chọn một trong hai tùy chọn này. Thay vào đó, hãy nhấn TABđể đánh dấu <Ok> và sau đó nhấn ENTERđể tiếp tục quá trình cài đặt.

Tiếp theo, bạn sẽ được nhắc có sử dụng dbconfig-commonđể định cấu hình cơ sở dữ liệu ứng dụng hay không. Chọn <Có> . Thao tác này sẽ thiết lập cơ sở dữ liệu nội bộ và người dùng quản trị cho phpMyAdmin. Bạn sẽ được yêu cầu xác định mật khẩu mới cho người dùng phpmyadmin MySQL, nhưng vì đây không phải là mật khẩu bạn cần nhớ nên bạn có thể để trống và để phpMyAdmin tạo mật khẩu ngẫu nhiên.

Lưu ý : Giả sử bạn đã cài đặt MySQL bằng cách làm theo Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên Ubuntu 20.04 , bạn có thể đã quyết định bật plugin Xác thực mật khẩu. Theo cách viết này, việc kích hoạt thành phần này sẽ gây ra lỗi khi quá trình cài đặt phpMyAdmin cố gắng đặt mật khẩu cho người dùng phpmyadmin :

Để giải quyết vấn đề này, hãy chọn tùy chọn hủy bỏ để dừng quá trình cài đặt. Sau đó, mở lời nhắc MySQL của bạn:

sudo mysql

Hoặc, nếu bạn đã bật xác thực mật khẩu cho người dùng MySQL gốc , hãy chạy lệnh này và sau đó nhập mật khẩu của bạn khi được nhắc:

mysql -u root -p

Từ lời nhắc MySQL, hãy chạy lệnh sau để tắt thành phần Xác thực mật khẩu. Lưu ý rằng điều này sẽ không thực sự gỡ cài đặt nó mà chỉ ngăn thành phần được tải trên máy chủ MySQL của bạn

UNINSTALL COMPONENT "file://component_validate_password";
exit

Sau đó, hãy thử cài đặt lại phpmyadmingói và nó sẽ hoạt động như mong đợi:

sudo apt install phpmyadmin

Khi phpMyAdmin được cài đặt, bạn có thể mở lại lời nhắc MySQL bằng sudo mysql hoặc mysql -u root -p và sau đó chạy lệnh sau để kích hoạt lại thành phần Xác thực mật khẩu:

sudo ln -s /usr/share/phpmyadmin /var/www/thietkewebs.net/phpmyadmin

Cài đặt phpMyAdmin của bạn hiện đã hoạt động. Để truy cập giao diện, hãy truy cập vào tên miền của máy chủ hoặc địa chỉ IP công cộng /phpmyadmin của bạn, sau đó là trong trình duyệt web của bạn:

http://thietkewebs.net/phpmyadmin/

Như đã đề cập trước đây, phpMyAdmin xử lý xác thực bằng thông tin đăng nhập MySQL. Điều này có nghĩa là để đăng nhập vào phpMyAdmin, bạn sử dụng cùng tên người dùng và mật khẩu mà bạn thường sử dụng để kết nối với cơ sở dữ liệu bằng dòng lệnh hoặc bằng API. Nếu bạn cần trợ giúp tạo người dùng MySQL

Tại thời điểm này, cài đặt phpMyAdmin của bạn đã hoàn toàn hoạt động. Tuy nhiên, bằng cách cài đặt giao diện web, bạn đã tiếp xúc với máy chủ cơ sở dữ liệu MySQL của mình với thế giới bên ngoài. Do sự phổ biến của phpMyAdmin và khả năng nó cung cấp quyền truy cập vào một lượng lớn dữ liệu nhạy cảm, các cài đặt như thế này là mục tiêu phổ biến của các cuộc tấn công. Trong các phần tiếp theo của hướng dẫn này, chúng tôi sẽ giới thiệu cho các bạn một số phương pháp khác nhau mà bạn có thể thực hiện cài đặt phpMyAdmin của mình an toàn hơn.

Bước 2 – Thay đổi vị trí mặc định của phpMyAdmin

Một cách để bảo vệ cài đặt phpMyAdmin của bạn là làm cho nó khó tìm hơn. Chương trình sẽ quét các đường dẫn thông thường, như /phpmyadmin/pma/admin/mysql, và tên tương tự khác. Thay đổi URL của giao diện từ /phpmyadminthành một thứ gì đó không chuẩn sẽ khiến các tập lệnh tự động khó tìm thấy cài đặt phpMyAdmin của bạn và cố gắng thực hiện các cuộc tấn công brute-force.

Ở bước trước, bạn đã tạo một liên kết tượng trưng trong thư mục gốc của tài liệu web Nginx trỏ đến /usr/share/phpmyadmin, nơi chứa các tệp ứng dụng phpMyAdmin thực. Bạn có thể đổi tên liên kết tượng trưng này để thay đổi URL giao diện của phpMyAdmin.

Mình sử dụng bitvise ssh client truy cập bằng SFTP vào rename file thành phpmyadmin123 cho nhanh nhé
Truy cập lại sẽ được dường dẫn mới!

Bằng cách che khuất vị trí thực của phpMyAdmin trên máy chủ, bạn đang đảm bảo giao diện của nó chống lại quá trình quét tự động và các nỗ lực bạo lực thủ công.

Bước 3 – Vô hiệu hóa đăng nhập gốc

Trên MySQL, cũng như trong các hệ thống Linux thông thường, tài khoản gốc là một tài khoản quản trị đặc biệt với quyền truy cập không hạn chế vào hệ thống. Ngoài việc là một tài khoản đặc quyền, đó là một tên đăng nhập đã biết, khiến nó trở thành mục tiêu rõ ràng cho các cuộc tấn công vũ phu. Để giảm thiểu những rủi ro này, bước này sẽ phác thảo cách cấu hình phpMyAdmin để từ chối bất kỳ nỗ lực đăng nhập nào đến từ người dùng MySQL gốc . Bằng cách này, ngay cả khi bạn cung cấp thông tin xác thực hợp lệ cho người dùng root , bạn vẫn sẽ bị từ chối Quyền truy cập! lỗi và sẽ không được phép đăng nhập.

Vì bạn đã chọn dbconfig-common định cấu hình và lưu trữ cài đặt phpMyAdmin nên cấu hình mặc định của ứng dụng hiện được lưu trữ trong cơ sở dữ liệu MySQL của bạn. Bạn sẽ cần tạo một config.inc.php tệp mới trong thư mục cấu hình của phpMyAdmin để xác định cài đặt tùy chỉnh của bạn. Mặc dù các tập lệnh PHP của phpMyAdmin được đặt bên trong /usr/share/phpmyadminthư mục, nhưng các tệp cấu hình của ứng dụng vẫn nằm trong đó /etc/phpmyadmin.

Đầu tiên bạn cần tạo 1 password mã hóa gồm 32 ký tự,

Ta lấy được pass 32 ký tự như sau: HLVjVH92IL6Ak05cN8DiTTLTmcJcDxqT

Tạo một tệp cài đặt tùy chỉnh mới bên trong /etc/phpmyadmin/conf.dthư mục và đặt tên cho nó pma_secure.php:

sudo nano /etc/phpmyadmin/conf.d/pma_secure.php
<?php

# PhpMyAdmin Settings
# This should be set to a random string of at least 32 chars HLVjVH92IL6Ak05cN8DiTTLTmcJcDxqT
$cfg['blowfish_secret'] = 'HLVjVH92IL6Ak05cN8DiTTLTmcJcDxqT';

$i=0;
$i++;

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['AllowRoot'] = false;

?>

Bằng cách bao gồm các AllowNoPassword và AllowRoot chỉ thị và thiết lập cả trong số họ để false, tập tin cấu hình này đăng nhập và đăng nhập vô hiệu hóa mật mã bởi các gốc sử dụng MySQL, tương ứng.

Lưu ý rằng auth_typecài đặt cấu hình phpMyAdmin để sử dụng cookie phương thức xác thực. phpMyAdmin sử dụng cookiephương thức xác thực theo mặc định, cho phép bạn đăng nhập vào phpMyAdmin với tư cách là bất kỳ người dùng MySQL hợp lệ nào với sự trợ giúp của cookie . Với phương pháp này, mật khẩu người dùng MySQL được lưu trữ và mã hóa bằng thuật toán Tiêu chuẩn mã hóa nâng cao (AES) trong một cookie tạm thời.

Về mặt lịch sử, phpMyAdmin thay vào đó đã sử dụng thuật toán Blowfish cho mục đích này. Tuy nhiên, nó vẫn tìm kiếm một chỉ thị có tên blowfish_secret, trỏ đến cụm mật khẩu được sử dụng nội bộ bởi thuật toán AES. Đây không phải là cụm mật khẩu bạn cần nhớ, vì vậy bất kỳ chuỗi nào chứa 32 ký tự ngẫu nhiên sẽ hoạt động ở đây.

Các thay đổi sẽ tự động áp dụng. Nếu bạn tải lại trang đăng nhập ngay bây giờ và cố gắng đăng nhập bằng quyền root , bạn sẽ bị từ chối Quyền truy cập! lỗi:

Đăng nhập bởi người dùng MySQL gốc hiện bị cấm trong quá trình cài đặt phpMyAdmin của bạn. Biện pháp bảo mật này sẽ chặn các tập lệnh brute-force cố gắng đoán mật khẩu của người dùng cơ sở dữ liệu gốc trên máy chủ của bạn. Hơn nữa, nó sẽ thực thi việc sử dụng các tài khoản MySQL ít đặc quyền hơn để truy cập giao diện web của phpMyAdmin, bản thân nó là một thực tiễn bảo mật quan trọng.

Bước 4: Cách tạo người dùng mới và cấp quyền trong MySQL

chúng ta đã vô hiệu hóa người dùng root, giờ thì bắt đầu tạo 1 người dùng mới để vào phpmyadmin quản lý database nhé!

đầu tiên cần truy cập vào mysql

sudo mysql

Hãy bắt đầu bằng cách tạo một người dùng mới trong MySQL shell:

CREATE USER 'netwebvn'@'localhost' IDENTIFIED BY '12345678';

Cấp tất cả các quyền cho người dùng netwebvn

GRANT ALL PRIVILEGES ON * . * TO 'netwebvn'@'localhost';

Khi bạn đã hoàn tất các quyền mà bạn muốn thiết lập cho người dùng mới của mình, hãy luôn đảm bảo tải lại tất cả các đặc quyền.

FLUSH PRIVILEGES;
ok sau khi tạo người dùng xong, các bạn có thể lấy người dùng mới truy cập vào phpmyadmin

Thay đổi password user trong mysql

ALTER USER 'user-name'@'localhost' IDENTIFIED BY 'NEW_USER_PASSWORD';
FLUSH PRIVILEGES;

Bình luận trên facebook netweb.vn