Hướng dẫn Setup bảo mật phpMyAdmin trên Ubuntu

Hướng dẫn setup bảo mật phpMyAdmin trên Ubuntu

Dù MySQL là một hệ quản trị cơ sở dữ liệu phổ biến, không phải ai cũng quen thuộc với việc thao tác hoàn toàn qua giao diện dòng lệnh. Để đơn giản hóa quá trình quản lý cơ sở dữ liệu, phpMyAdmin ra đời, cung cấp một giao diện web trực quan, giúp người dùng dễ dàng tương tác với MySQL mà không cần nhập lệnh thủ công.

Đọc hướng dẫn dưới đây, bạn sẽ học cách cài đặt và bảo mật phpMyAdmin trên Ubuntu, đảm bảo hệ thống của bạn an toàn và hoạt động ổn định. Việc bảo mật phpMyAdmin là rất quan trọng để tránh các rủi ro bảo mật tiềm ẩn, đặc biệt là khi quản lý dữ liệu quan trọng trên máy chủ.

 Yêu cầu

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

  • Một máy chủ Ubuntu.Máy chủ này cần có một người dùng không phải root với quyền quản trị và một firewall được cấu hình bằng ufw. Để thiết lập, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu dành cho Ubuntu.

  • Một bộ LAMP (Linux, Apache, MySQL, và PHP) đã được cài đặt trên máy chủ Ubuntu của bạn.
    Nếu chưa cài đặt, bạn có thể làm theo hướng dẫn cài đặt bộ LAMP trên Ubuntu.

Ngoài ra, có một số lưu ý 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ả của các truy vấn SQL tuỳ ý.

Vì những lý do trên, và do phpMyAdmin là một ứng dụng PHP được triển khai rộng rãi nên thường xuyên trở thành mục tiêu tấn công, bạn không bao giờ nên chạy phpMyAdmin trên các hệ thống từ xa qua kết nối HTTP thông thường.

Nếu bạn chưa có domain được cấu hình với chứng chỉ SSL/TLS, hãy làm theo hướng dẫn bảo mật Apache với Let’s Encrypt trên Ubuntu. Việc này đòi hỏi bạn phải đăng ký tên miền, tạo các bản ghi DNS cho máy chủ và thiết lập Apache Virtual Host.

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

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

Với tư cách là người dùng sudo không phải root, hãy cập nhật chỉ mục gói của máy chủ nếu bạn chưa cập nhật gần đây:

sudo apt update

Tiếp theo, bạn có thể cài đặt gói phpmyadmin. Theo tài liệu chính thức, cũng khuyến khích cài đặt một số extension của PHP vào máy chủ của bạn để kích hoạt một số chức năng và cải thiện hiệu suất.

Nếu bạn đã làm theo hướng dẫn cài đặt bộ LAMP, một số module này có thể đã được cài đặt cùng với gói PHP. Tuy nhiên, bạn nên cài đặt thêm các gói sau:

  • php-mbstring: Module để quản lý các chuỗi không phải ASCII và chuyển đổi chuỗi sang các định dạng mã hoá khác nhau.
  • php-zip: Extension hỗ trợ tải lên các file .zip vào phpMyAdmin.
  • php-gd: Kích hoạt hỗ trợ cho GD Graphics Library.
  • php-json: Cung cấp hỗ trợ cho việc tuần tự hóa JSON trong PHP.
  • php-curl: Cho phép PHP tương tác với các loại máy chủ khác nhau qua các giao thức khác nhau.

Chạy lệnh sau để cài đặt các gói này:

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

Khi được hỏi để cấu hình cài đặt, bạn nên chọn các tùy chọn sau:

Đối với lựa chọn máy chủ, chọn apache2.

Cảnh báo: Khi xuất hiện thông báo, “apache2” có thể được đánh dấu nhưng chưa được chọn. Nếu bạn không nhấn phím SPACE để chọn Apache, trình cài đặt sẽ không chuyển các file cần thiết trong quá trình cài đặt. Hãy nhấn SPACE, sau đó TAB và ENTER để chọn Apache.

Chọn Yes khi được hỏi có sử dụng dbconfig-common để thiết lập cơ sở dữ liệu hay không.

Sau đó, bạn sẽ được yêu cầu chọn và xác nhận mật khẩu ứng dụng MySQL cho phpMyAdmin.

Lưu ý: Nếu bạn cài đặt MySQL theo hướng dẫn bước 2 của bộ LAMP, có thể bạn đã bật plugin Validate Password. Tại thời điểm này, việc bật thành phần này sẽ gây ra lỗi khi bạn cố gắng đặt mật khẩu cho người dùng phpmyadmin.

Hướng dẫn setup bảo mật phpMyAdmin trên Ubuntu
Để khắc phục, hãy chọn tùy chọn “abort” để dừng quá trình cài đặt, sau đó mở MySQL prompt:
sudo mysql

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

mysql -u root -p

Từ MySQL prompt, chạy lệnh sau để tắt thành phần Validate Password (lưu ý: lệnh này chỉ tắt chứ không gỡ cài đặt):

UNINSTALL COMPONENT "file://component_validate_password";

Sau đó, thoát MySQL:

exit

Thử cài đặt lại gói phpmyadmin:

sudo apt install phpmyadmin

Sau khi cài đặt phpMyAdmin, bạn có thể mở lại MySQL prompt bằng lệnh 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 Validate Password:

INSTALL COMPONENT "file://component_validate_password";
Quá trình cài đặt sẽ thêm file cấu hình Apache cho phpMyAdmin vào thư mục /etc/apache2/conf-enabled/, nơi nó được Apache tự động đọc. Để hoàn tất cấu hình Apache và PHP làm việc với phpMyAdmin, công việc duy nhất còn lại trong phần này là kích hoạt extension mbstring của PHP bằng lệnh:
sudo phpenmod mbstring

Sau đó, khởi động lại Apache để các thay đổi có hiệu lực:

sudo systemctl restart apache2

Hiện tại, phpMyAdmin đã được cài đặt và cấu hình để làm việc với Apache. Tuy nhiên, trước khi bạn có thể đăng nhập và tương tác với các cơ sở dữ liệu MySQL, bạn cần đảm bảo rằng các người dùng MySQL 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 người dùng và quyền hạn

Khi bạn cài đặt phpMyAdmin trên máy chủ, nó tự động tạo ra một người dùng cơ sở dữ liệu có tên phpmyadmin, thực hiện một số tác vụ nội bộ cho chương trình. Thay vì đăng nhập với người dùng này bằng mật khẩu quản trị đã đặt trong quá trình cài đặt, khuyến nghị là bạn đăng nhập với người dùng root của MySQL hoặc một người dùng chuyên dụng để quản lý cơ sở dữ liệu qua giao diện phpMyAdmin.

Cấu hình truy cập bằng mật khẩu cho tàI khoản root của MySQL

Trên các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản sau), người dùng root của MySQL mặc định được thiết lập để xác thực bằng plugin auth_socket thay vì bằng mật khẩu. Điều này mang lại một số lợi ích về bảo mật và tính tiện dụng, nhưng cũng có thể gây khó khăn khi cần cho phép một chương trình bên ngoài-như phpMyAdmin-truy cập tài khoản này.

Để đăng nhập vào phpMyAdmin với tư cách là người dùng root của MySQL, bạn cần chuyển phương thức xác thực của nó từ auth_socket sang sử dụng mật khẩu (nếu bạn chưa làm điều đó). Để thực hiện, mở MySQL prompt từ terminal:

sudo mysql

Tiếp theo, kiểm tra phương thức xác thực của từng tài khoản MySQL với lệnh:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Lưu ý kết quả trên cho thấy người dùng root đang xác thực bằng plugin auth_socket. Để chuyển tài khoản root sang xác thực bằng mật khẩu, chạy lệnh ALTER USER sau (hãy thay ‘password’ bằng mật khẩu mạnh mà bạn chọn):

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

Lưu ý: Lệnh ALTER USER trên thiết lập người dùng root của MySQL xác thực với 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 mật khẩu an toàn hơn so với mysql_native_password. Tuy nhiên, một số phiên bản PHP có thể không tương thích hoàn toàn với caching_sha2_password. Nếu bạn gặp lỗi khi đăng nhập vào phpMyAdmin, bạn có thể đặt lại người dùng root sử dụng mysql_native_password:

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

Sau đó, kiểm tra lại phương thức xác thực của tất cả người dùng:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$I:jOry?]Sy<|qhQRj3fBRQ43i4UJxrpm.IaT6lOHkgveJjmeIjJrRe6         | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| phpmyadmin       | $A$005$?#{Z?`gN!c2az)}V-INCWXSuVdqB9zWteH1IkZfTe/rOLgVhSzEMM9R3G6K9    | caching_sha2_password | localhost |
| root             | $A$005$3y�y|Z?'_[} ZyVHuESVwNmjKWOH/ndETwS.Kty0IH7UfiXjOfVvyWroy4a.   | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
6 rows in set (0.00 sec)

Kết quả trên cho thấy người dùng root sẽ xác thực bằng mật khẩu. Giờ đây, bạn có thể đăng nhập vào giao diện phpMyAdmin với người dùng root và mật khẩu đã đặt.

Cấu hình truy cập bằng mật khẩu cho người dùng MySQL chuyên dụng

Ngoài ra, nếu bạn cảm thấy thuận tiện hơn khi kết nối phpMyAdmin bằng một người dùng riêng, hãy mở lại MySQL shell:

sudo mysql

Nếu bạn đã bật xác thực mật khẩu cho người dùng root như hướng dẫn ở trên, hãy kết nối với:

mysql -u root -p

Sau đó, tạo một người dùng mới và đặt mật khẩu mạnh cho người đó:

CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Lưu ý: Tùy thuộc vào phiên bản PHP bạn đang cài đặt, bạn có thể muốn đặt người dùng mới xác thực với mysql_native_password thay vì caching_sha2_password:
ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Tiếp theo, cấp cho người dùng mới các quyền phù hợp. Ví dụ, bạn có thể cấp quyền cho người dùng trên tất cả các bảng trong cơ sở dữ liệu và quyền thêm, thay đổi, xóa các quyền người dùng với lệnh:

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

Sau đó, thoát MySQL shell:

exit
Bây giờ, bạn có thể truy cập giao diện web bằng cách truy cập tên miền hoặc địa chỉ IP công cộng của máy chủ, theo sau là /phpmyadmin:
https://your_domain_or_IP/phpmyadmin

Hướng dẫn setup bảo mật phpMyAdmin trên Ubuntu

Đăng nhập vào giao diện bằng người dùng root hoặc người dùng mới mà bạn vừa cấu hình.

Khi đăng nhập, bạn sẽ được chuyển đến giao diện của phpMyAdmin.

Hướng dẫn setup bảo mật phpMyAdmin trên Ubuntu

Sau khi đã kết nối và tương tác thành công với phpMyAdmin, công việc còn lại là tăng cường bảo mật hệ thống của bạn để bảo vệ khỏi các cuộc tấn công.

Bước 3 – Bảo mật phiên phpMyAdmin của bạn

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

Để thực hiện, trước tiên bạn cần bật khả năng ghi đè file .htaccess bằng cách chỉnh sửa file cấu hình Apache của phpMyAdmin.

Sử dụng trình soạn thảo văn bản ưa thích (ở đây chúng ta dùng nano) để chỉnh sửa file cấu hình phpmyadmin.conf nằm trong thư mục cấu hình của Apache:

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

Thêm dòng chỉ thị AllowOverride All vào bên 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 SymLinksIfOwnerMatch
    DirectoryIndex index.php
    AllowOverride All
    . . .

Khi đã thêm xong, lưu file và đóng lại. Nếu sử dụng nano, nhấn CTRL + X, sau đó YENTER để lưu.

Để áp dụng các thay đổi, khởi động lại Apache:

sudo systemctl restart apache2

Giờ đây, khi bạn đã kích hoạt sử dụng file .htaccess cho ứng dụng, bạn cần tạo một file .htaccess để thực hiện việc bảo mật.

File .htaccess phải được tạo trong thư mục cài đặt của phpMyAdmin. Bạn có thể tạo file này với quyền root bằng cách:

sudo nano /usr/share/phpmyadmin/.htaccess

Bên trong file, nhập thông tin sau:

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

Giải thích các dòng trên:

  • AuthType Basic: Xác định loại xác thực bạn đang áp dụng. Loại này sẽ sử dụng file mật khẩu để xác thực.
  • AuthName: Đặt thông điệp cho hộp thoại xác thực. Bạn nên giữ cho thông điệp này chung chung để người dùng trái phép không nắm được thông tin về nội dung được bảo vệ.
  • AuthUserFile: Đặt vị trí của file mật khẩu sẽ được sử dụng để xác thực. File này nên được đặt bên ngoài các thư mục đang được phục vụ.
  • Require valid-user: Chỉ định rằng chỉ những người dùng đã xác thực mới được truy cập tài nguyên này. Đây là cơ chế ngăn chặn người dùng trái phép.

Khi hoàn tất, lưu và đóng file.

File mật khẩu mà bạn đã chỉ định ở đây là /etc/phpmyadmin/.htpasswd. Bây giờ, tạo file này và thêm một người dùng khởi tạo bằng tiện ích htpasswd:

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

Bạn sẽ được yêu cầu chọn và xác nhận mật khẩu cho người dùng vừa tạo. Sau đó, file sẽ được tạo với mật khẩu đã được mã hoá.

Nếu bạn muốn thêm người dùng khác, hãy thực hiện lệnh sau (không dùng cờ -c):

sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Sau đó, khởi động lại Apache để áp dụng xác thực .htaccess:

sudo systemctl restart apache2

Giờ đây, khi truy cập vào thư mục phpMyAdmin, bạn sẽ được yêu cầu nhập tên tài khoản và mật khẩu đã cấu hình:

https://domain_name_or_IP/phpmyadmin

Thiet ke chua co ten 31

Sau khi xác thực qua Apache, bạn sẽ được chuyển đến trang đăng nhập thông thường của phpMyAdmin để nhập thông tin đăng nhập MySQL. Việc thêm một lớp xác thực ngoài MySQL cung cấp cho cơ sở dữ liệu của bạn một lớp bảo vệ bổ sung, điều này rất cần thiết vì phpMyAdmin đã từng bị tấn công trong quá khứ.

Kết luận

Giờ đây, phpMyAdmin đã được thiết lập và hoạt động ổn định trên máy chủ Ubuntu của bạn. Với giao diện web thân thiện và dễ sử dụng, bạn có thể quản lý cơ sở dữ liệu MySQL một cách hiệu quả mà không cần thao tác trên dòng lệnh. Từ việc tạo và quản lý cơ sở dữ liệu, tài khoản người dùng, bảng dữ liệu cho đến thực hiện các truy vấn SQL, mọi thao tác đều trở nên thuận tiện và nhanh chóng. Hãy đảm bảo cập nhật và bảo mật phpMyAdmin thường xuyên để duy trì hiệu suất và an toàn cho hệ thống của bạn.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *