Trang chủ / Chuyên đề / Cài đặt và bảo mật phpMyAdmin trên Ubuntu 20.04
Thứ hai, 04/05/2020 | 00:00 GMT+7

Cài đặt và bảo mật phpMyAdmin trên Ubuntu 20.04

Trong khi nhiều user cần chức năng của một hệ thống quản lý database như MySQL, họ có thể không cảm thấy tiện lợi khi tương tác với hệ thống từ dấu nhắc console MySQL. 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 trên hệ thống Ubuntu 20.04.

Yêu cầu

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

Ngoài ra, có những lưu ý quan trọng về bảo mật khi sử dụng phần mềm như phpMyAdmin, vì 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 bị 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 đơn giản, thay vào đó là HTTPS/SSL.

Nếu bạn chưa có domain đượ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 Apache bằng Let's Encrypt trên Ubuntu 20.04 . Điều này sẽ yêu cầu bạn đăng ký domain , tạo bản ghi DNS cho server và cài đặt VirtualHost Apache .

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

Bạn có thể sử dụng APT để cài đặt phpMyAdmin từ repository mặc định của Ubuntu.

Là user sudo không phải root, hãy cập nhật server:

  • sudo apt update

Sau đó, bạn có thể cài đặt gói phpmyadmin . Cùng với gói này, tài liệu chính thức cũng khuyên bạn nên cài đặt một vài phần mở rộng PHP vào server để kích hoạt một số chức năng nhất định và cải thiện hiệu suất.

Nếu bạn đã làm theo hướng dẫn LAMP, một số module này sẽ được cài đặt cùng với gói php:

  • php-mbstring : Một module để quản lý các chuỗi không phải ASCII và chuyển đổi các chuỗi thành các mã hóa khác nhau
  • php-zip : Phần mở rộng này hỗ trợ tải các .zip lên phpMyAdmin
  • php-gd : Bật hỗ trợ cho Thư viện đồ họa GD
  • php-json : Cung cấp PHP hỗ trợ tuần tự hóa JSON
  • php-curl : Cho phép PHP tương tác với các loại server khác nhau bằng các giao thức khác nhau

Chạy lệnh sau để cài đặt các gói này vào hệ thống của bạn. Tuy nhiên, xin lưu ý quá trình cài đặt yêu cầu bạn thực hiện một số lựa chọn để cấu hình phpMyAdmin một cách chính xác. Ta sẽ xem qua các tùy chọn này sau đây:

  • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

Dưới đây là các tùy chọn bạn nên chọn khi được yêu cầu để cấu hình cài đặt của bạn một cách chính xác:

  • Đối với lựa chọn server, hãy chọn apache2 Cảnh báo: Khi dấu nhắc xuất hiện, “apache2” được đánh dấu, nhưng không được chọn. Nếu bạn không nhấn SPACE để chọn Apache, trình cài đặt sẽ không di chuyển các file cần thiết trong khi cài đặt. Nhấn SPACE , TAB , sau đó ENTER để chọn Apache.
  • Chọn Yes khi được hỏi có sử dụng dbconfig-common để cài đặt database hay không
  • Sau đó, bạn cần chọn và xác nhận password ứng dụng MySQL cho phpMyAdmin

Lưu ý : Giả sử bạn đã cài đặt MySQL theo Bước 2 của hướng dẫn LAMP yêu cầu , bạn có thể đã bật plugin Xác thực password. Theo hướng dẫn này, việc kích hoạt thành phần này sẽ gây ra lỗi khi bạn cố gắng đặt password cho user phpmyadmin :

lỗi xác thực password phpMyAdmin

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

  • sudo mysql

Hoặc, nếu bạn đã cài đặt xác thực password cho user MySQL root , hãy chạy lệnh này và sau đó nhập password của bạn khi được yêu cầu:

  • mysql -u root -p

Từ dấu nhắc, hãy chạy lệnh sau để tắt thành phần Xác thực password. Lưu ý điều này sẽ không thực sự gỡ cài đặt mà chỉ ngăn thành phần được chạy:

  • UNINSTALL COMPONENT "file://component_validate_password";

Sau đó, bạn có thể đóng client MySQL:

  • exit

Sau đó, hãy thử cài đặt lại gói phpmyadmin 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 dấu nhắc MySQL bằng sudo mysql hoặc mysql -u root -p và sau đó chạy lệnh sau để bật lại thành phần Xác thực password:

  • INSTALL COMPONENT "file://component_validate_password";

Quá trình cài đặt thêm file cấu hình phpMyAdmin Apache vào folder /etc/apache2/conf-enabled/ , nơi nó được đọc tự động. Để hoàn tất việc cấu hình Apache và PHP để hoạt động với phpMyAdmin, nhiệm vụ còn lại là bật phần mở rộng mbstring PHP, bạn có thể thực hiện bằng lệnh:

  • sudo phpenmod mbstring

Sau đó, khởi động lại Apache để các thay đổi được áp dụng:

  • sudo systemctl restart apache2

phpMyAdmin hiện đã được cài đặt và cấu hình để hoạt động với Apache. Tuy nhiên, trước khi bạn có thể đăng nhập và bắt đầu tương tác với database MySQL của bạn, bạn cần đảm bảo user MySQL của bạn có các quyền cần thiết để tương tác với chương trình.

Bước 2 - Điều chỉnh Xác thực User và Quyền

Khi bạn cài đặt phpMyAdmin vào server, nó sẽ tự động tạo ra một user database có tên là phpmyadmin để thực hiện các quy trình cơ bản nhất định cho chương trình. Thay vì đăng nhập với quyền user này bằng password quản trị bạn đã đặt trong khi cài đặt, bạn nên đăng nhập với quyền là user MySQL root của bạn hoặc với quyền là user chuyên quản lý database thông qua giao diện phpMyAdmin.

Cấu hình quyền truy cập password cho account root MySQL

Trong hệ thống Ubuntu chạy MySQL 5.7 (và các version mới hơn), user MySQL root được đặt xác thực bằng cách sử dụng plugin auth_socket theo mặc định chứ không phải bằng password. Điều này cho phép một số bảo mật và hữu dụng trong nhiều trường hợp, nhưng nó cũng có thể làm phức tạp mọi thứ khi bạn cần cho phép một chương trình bên ngoài - như phpMyAdmin - truy cập vào user.

Để đăng nhập vào phpMyAdmin với quyền là user MySQL root của bạn, bạn cần chuyển phương thức xác thực của nó từ auth_socket sang phương thức sử dụng password nếu bạn chưa làm như vậy. Để thực hiện việc này, hãy mở dấu nhắc MySQL từ terminal:

  • sudo mysql

Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi account user MySQL của bạn sử dụng bằng lệnh sau:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Trong ví dụ này, bạn có thể thấy user root đang xác thực bằng cách sử dụng plugin auth_socket . Để cấu hình account root để xác thực bằng password, hãy chạy ALTER USER . Đảm bảo đổi password thành một password mạnh mà bạn chọn:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Lưu ý : Câu ALTER USER trước đó đặt user MySQL root để xác thực bằng plugin caching_sha2_password . Theo tài liệu MySQL chính thức , caching_sha2_password là plugin xác thực ưu tiên của MySQL, vì nó cung cấp mã hóa password an toàn hơn mysql_native_password cũ hơn vẫn được sử dụng rộng rãi.

Tuy nhiên, một số version PHP không hoạt động tin cậy với caching_sha2_password . PHP đã báo cáo rằng sự cố này đã được khắc phục kể từ version PHP 7.4 , nhưng nếu bạn gặp lỗi khi cố gắng đăng nhập vào phpMyAdmin sau đó, bạn có thể cần đặt root để xác thực bằng mysql_native_password thay thế:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau đó, hãy kiểm tra lại các phương thức xác thực được sử dụng bởi từng user để xác nhận root không còn xác thực bằng plugin auth_socket :

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost |
| debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost |
| phpmyadmin       | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Bạn có thể thấy từ kết quả này user root sẽ xác thực bằng password. Đến đây bạn có thể đăng nhập vào giao diện phpMyAdmin với quyền là user root của bạn với password bạn đã đặt cho nó ở đây.

Cấu hình quyền truy cập password cho user MySQL chuyên dụng

Ngoài ra, một số người có thể thấy rằng việc kết nối với phpMyAdmin với một user riêng (không phải root) phù hợp hơn với quy trình làm việc của họ. Để thực hiện việc này, hãy mở lại MySQL shell:

  • sudo mysql

Nếu bạn đã cài đặt xác thực password cho user root của bạn, như được mô tả trong phần trước, bạn cần chạy lệnh sau và nhập password của bạn khi được yêu cầu để kết nối:

  • mysql -u root -p

Từ đó, tạo một user mới và cung cấp cho nó một password mạnh:

  • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

Lưu ý : , tùy thuộc vào version PHP bạn đã cài đặt, bạn có thể cần đặt user mới của bạn xác thực bằng mysql_native_password thay vì caching_sha2_password :

  • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

 

Sau đó, cấp cho user mới của bạn các quyền thích hợp. Ví dụ: bạn có thể cấp quyền user cho tất cả các bảng trong database, cũng như quyền thêm, thay đổi và xóa quyền user bằng lệnh này:

  • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

Sau đó, thoát MySQL shell:

  • exit

Như vậy, bạn có thể truy cập giao diện web bằng cách truy cập vào domain hoặc địa chỉ IP công cộng của server, theo sau là /phpmyadmin :

https://your_domain_or_IP/phpmyadmin

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

Đăng nhập vào giao diện, bằng quyền root hoặc bằng tên user và password mới mà bạn vừa cấu hình.

Khi đăng nhập, bạn sẽ thấy giao diện user trông giống như sau:

giao diện user phpMyAdmin

Đến đây bạn có thể kết nối và tương tác với phpMyAdmin, tất cả những gì còn lại cần làm là tăng cường bảo mật cho hệ thống của bạn để bảo vệ nó khỏi những kẻ tấn công.

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

Do tính phổ biến của nó, phpMyAdmin là mục tiêu phổ biến của những kẻ tấn công và bạn nên cẩn thận hơn để ngăn chặn truy cập trái phép. Một cách để thực hiện việc này là đặt một cổng vào trước toàn bộ ứng dụng bằng cách sử dụng các chức năng xác thực và ủy quyền .htaccess được tích hợp sẵn của Apache.

Để thực hiện việc này, trước tiên bạn phải cho phép sử dụng overrides (ghi đè) file .htaccess bằng cách chỉnh sửa file cấu hình Apache của cài đặt phpMyAdmin của bạn.

Sử dụng editor bạn muốn để chỉnh sửa file phpmyadmin.conf đã được đặt trong folder cấu hình Apache của bạn. Ở đây, ta sẽ sử dụng nano :

  • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Thêm chỉ thị AllowOverride All trong phần <Directory /usr/share/phpmyadmin> của file cấu hình, như sau:

/etc/apache2/conf-available/phpmyadmin.conf
<Directory /usr/share/phpmyadmin>
    Options FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    . . .

Khi bạn đã thêm dòng này, hãy lưu file. Nếu bạn đã sử dụng nano để chỉnh sửa file, hãy làm như vậy bằng cách nhấn CTRL + X , Y , sau đó ENTER .

Để áp dụng các thay đổi bạn đã thực hiện, hãy khởi động lại Apache:

  • sudo systemctl restart apache2

Đến đây bạn đã cho phép sử dụng .htaccess cho ứng dụng của bạn, bạn cần tạo một file để thực sự triển khai một số bảo mật.

Để thành công, file phải được tạo trong folder ứng dụng. Bạn có thể tạo file cần thiết và mở file đó trong editor với quyền root bằng lệnh:

  • sudo nano /usr/share/phpmyadmin/.htaccess

Trong file này, hãy nhập thông tin sau:

/usr/share/phpmyadmin/.htaccess
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user

Đây là ý nghĩa của mỗi dòng này:

  • AuthType Basic : chỉ định kiểu xác thực mà bạn đang triển khai. Loại này sẽ triển khai xác thực password bằng file password.
  • AuthName : đặt thông báo cho hộp thoại xác thực. Bạn nên giữ điều này chung chung để user lạ sẽ không nhận được bất kỳ thông tin nào về những gì đang được bảo vệ.
  • AuthUserFile : đặt vị trí của file password sẽ được sử dụng để xác thực. này phải nằm ngoài các folder được truy cập. Ta sẽ tạo file này trong thời gian ngắn.
  • Require valid-user : chỉ định rằng chỉ những user được xác thực mới được cấp quyền truy cập vào tài nguyên này. Đây là điều thực sự ngăn user lạ xâm nhập.

Khi bạn hoàn tất, hãy lưu file.

Vị trí bạn đã chọn cho file password của bạn là /etc/phpmyadmin/.htpasswd . Đến đây bạn có thể tạo file này và chuyển nó thành user ban đầu bằng tiện ích htpasswd :

  • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

Bạn cần chọn và xác nhận password cho user bạn đang tạo. Sau đó, file được tạo bằng password băm (hash) mà bạn đã nhập.

Nếu bạn muốn nhập thêm user, bạn cần phải làm như vậy mà không có cờ -c , như sau:

  • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Bây giờ, khi bạn truy cập vào folder con phpMyAdmin của bạn, bạn cần nhập tên account và password bổ sung mà bạn vừa cấu hình:

https://domain_name_or_IP/phpmyadmin

password apache phpMyAdmin

Sau khi nhập xác thực Apache, bạn sẽ được đưa đến trang xác thực phpMyAdmin thông thường để nhập thông tin đăng nhập MySQL của bạn. Bằng cách thêm một bộ thông tin đăng nhập không phải MySQL, bạn đang cung cấp cho database của bạn một lớp bảo mật bổ sung. Đây là điều cần thiết vì phpMyAdmin từng dễ bị tấn công bởi các mối đe dọa bảo mật.

Kết luận

Xin chúc mừng, bạn đã cấu hình phpMyAdmin và sẵn sàng sử dụng trên server Ubuntu 20.04. Sử dụng giao diện này, bạn có thể tạo database, user và bảng cũng như thực hiện các thao tác thông thường như xóa và sửa đổi cấu trúc và dữ liệu một cách tiện lợi, trực quan.



Các tin trước

Cài đặt và bảo mật Redis trên Ubuntu 18.04 2020-04-30

Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 20 04 2020-04-29

Cài đặt LEMP Linux Nginx MySQL PHP (LEMP ) trên Ubuntu 20 04 2020-04-29

Bảo mật apache với let-s-encrypt trên Ubuntu 20.04 2020-04-29

Cài đặt Apache Web Server trên Ubuntu 20.04 2020-04-27

Cài đặt Nginx trên Ubuntu 20.04 2020-04-24

Khởi tạo bảo mật Server Ubuntu 20.04 2020-04-23

Cài đặt SSH Key trên Ubuntu 20.04 2020-04-23

Cài đặt MySQL trên Ubuntu 18.04 2020-04-21

Cài đặt và bảo mật phpMyAdmin trên Ubuntu 18.04 2020-04-21