Mặc dù nhiều người dùng cần chức năng của một hệ thống quản lý cơ sở dữ liệu như MySQL, nhưng họ có thể không cảm thấy thoải mái khi tương tác với hệ thống chỉ từ lời nhắc của MySQL.
phpMyAdmin được tạo để người dùng có thể tương tác với MySQL thông qua giao diện web. Trong hướng dẫn này, chúng tôi sẽ thảo luận 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ý cơ sở dữ liệu của mình trên hệ thống Ubuntu 20.04.
Để hoàn thành hướng dẫn này, bạn sẽ cần:
ufw
. Để thiết lập điều này, hãy làm theo hướng dẫn thiết lập máy chủ ban đầu của chúng tôi cho Ubuntu 20.04.Ngoài ra, có những cân nhắc bảo mật quan trọng khi sử dụng phần mềm như phpMyAdmin, vì nó:
Vì những lý do này và vì đây là một ứng dụng PHP được triển khai rộng rãi, thường là 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 đơn giản.
Nếu bạn không có miền hiện có được thiết lập cấu hình bằng chứng chỉ 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ý một tên miền, tạo bản ghi DNS cho máy chủ của bạn và thiết lập Máy chủ ảo Apache.
Bạn có thể sử dụng APT để cài đặt phpMyAdmin từ kho lưu trữ mặc định của Ubuntu.
Là non-root sudo user của bạn, hãy cập nhật chỉ mục gói máy chủ của bạn:
- 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 số tiện ích mở rộng PHP vào máy chủ của mình để 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 stack tiên quyết, một số mô-đun này sẽ được cài đặt cùng với gói php
. Tuy nhiên, bạn cũng nên cài đặt các gói này:
php-mbstring
: Một mô-đun để quản lý các chuỗi không phải ASCII và chuyển đổi các chuỗi thành các bảng mã khác nhauphp-zip
: Tiện ích mở rộng này hỗ trợ tải các tệp .zip
lên phpMyAdminphp-gd
: Bật hỗ trợ cho GD Graphics Library (Thư viện đồ họa)php-json
: Cung cấp PHP với sự hỗ trợ cho tuần tự hóa JSONphp-curl
: Cho phép PHP tương tác với các loại máy chủ khác nhau bằng các giao thức khác nhauXin lưu ý rằng nếu bạn đang sử dụng phiên bản PHP khác với phiên bản mặc định được cài đặt trong hướng dẫn LAMP stack điều kiện tiên quyết, thì bạn sẽ cần cài đặt phiên bản thích hợp của các gói mô-đun này. Chẳng hạn, nếu bạn đang sử dụng PHP phiên bản 8.0, bạn sẽ cần cài đặt gói php8.0-mbstring
thay vì gói php-mbstring
mặc định.
Chạy lệnh dưới đây để cài đặt các gói này vào hệ thống của bạn. Tuy nhiên, xin lưu ý rằng quá trình cài đặt yêu cầu bạn thực hiện một số lựa chọn để thiết lập cấu hình chính xác phpMyAdmin. Chúng ta sẽ sớm xem qua các tùy chọn nà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 nhắc để thiết lập cấu hình cài đặt của mình một cách chính xác:
apache2
Cảnh báo: Khi lời nhắc xuất hiện, “apache2” được tô sáng nhưng không đượ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 di chuyển các tệp cần thiết trong quá trình cài đặt. Nhấn SPACE
, TAB
, rồi ENTER
để chọn Apache.
Yes
khi được hỏi có sử dụng dbconfig-common
để thiết lập cơ sở dữ liệu khôngLưu ý: Giả sử bạn đã cài đặt MySQL bằng cách làm theo Bước 2 của hướng dẫn LAMP stack tiên quyết, bạn có thể đã quyết định bật plugin Xác thực mật khẩu (Validate Password). Khi viết bài 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:
Để giải quyết vấn đề này, hãy chọn tùy chọn abort (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 root MySQL user, hãy chạy lệnh này rồi nhập mật khẩu của bạn khi được nhắc:
- mysql -u root -p
Từ lời nhắc, hãy chạy lệnh dưới đây để tắt thành phần Xác thực mật khẩu. Lưu ý rằng thao tác 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";
Sau đó, bạn có thể đóng ứng dụng khách MySQL:
- exit
Sau đó thử cài đặt lại gói phpmyadmin
và nó sẽ hoạt động như mong đợi:
- sudo apt install phpmyadmin
Sau khi cài đặt phpMyAdmin, bạn có thể mở lại lời nhắc MySQL bằng sudo mysql
hoặc mysql -u root -p
rồi chạy lệnh sau để bật lại thành phần Xác thực mật khẩu:
- INSTALL COMPONENT "file://component_validate_password";
Quá trình cài đặt thêm tệp cấu hình Apache phpMyAdmin vào thư mục /etc/apache2/conf-enabled/
, nơi nó được đọc tự động. Để hoàn tất việc thiết lập cấu hình Apache và PHP để hoạt động với phpMyAdmin, nhiệm vụ duy nhất còn lại trong phần hướng dẫn này là kích hoạt rõ ràng tiện ích mở rộng mbstring
PHP, bạn có thể thực hiện thao tác này bằng cách nhập:
- sudo phpenmod mbstring
Sau đó, khởi động lại Apache để những thay đổi của bạn được công nhận:
- sudo systemctl restart apache2
phpMyAdmin hiện đã được cài đặt và thiết lập 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 cơ sở dữ liệu MySQL của mình, bạn cần đảm bảo rằng người dùng MySQL của bạn có các đặc quyền cần thiết để tương tác với chương trình.
Khi bạn cài đặt phpMyAdmin trên máy chủ của mình, nó sẽ tự động tạo một người dùng cơ sở dữ liệu 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 tư cách người dùng này bằng mật khẩu quản trị mà bạn đã đặt trong khi cài đặt, bạn nên đăng nhập với tư cách là root MySQL user của mình hoặc với tư cách là người dùng chuyên quản lý cơ sở dữ liệu thông qua giao diện phpMyAdmin.
Trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản mới hơn), root MySQL user được đặt để xác thực bằng cách sử dụng plugin auth_socket
theo mặc định thay vì bằng mật khẩu. Điều này cho phép một số tính bảo mật và khả năng sử dụng cao hơn 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 người dùng.
Để đăng nhập vào phpMyAdmin với tư cách là root MySQL user của bạn, bạn sẽ 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 mật khẩu, nếu bạn chưa làm như vậy. Để thực hiện việc này, hãy mở lời nhắc MySQL từ thiết bị đầu cuối của bạn:
- sudo mysql
Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi tài khoản người dùng 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 rằng root user trên thực tế xác thực bằng plugin auth_socket
. Để thiết lập cấu hình tài khoản root để xác thực bằng mật khẩu, hãy chạy lệnh ALTER USER
sau. Đảm bảo thay đổi password
thành mật khẩu mạnh do bạn chọn:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Lưu ý: Câu lệnh ALTER USER
trước đặt root MySQL user xác thực bằng plugin caching_sha2_password
. Theo tài liệu chính thức của MySQL, caching_sha2_password
là plugin xác thực ưa thích của MySQL, vì nó cung cấp khả năng mã hóa mật khẩu an toàn hơn so với mysql_native_password
cũ hơn nhưng vẫn được sử dụng rộng rãi.
Tuy nhiên, một số phiên bản PHP không hoạt động đá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ừ PHP 7.4, nhưng nếu bạn gặp lỗi khi cố gắng đăng nhập vào phpMyAdmin sau này, bạn có thể đặt quyền 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 người dùng của bạn để xác nhận rằng root không còn xác thực bằng cách sử dụ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ừ đầu ra này rằng root user sẽ xác thực bằng mật khẩu. Bây giờ bạn có thể đăng nhập vào giao diện phpMyAdmin với tư cách là root user bằng mật khẩu bạn đã đặt cho nó tại đây.
Ngoài ra, một số người có thể thấy rằng nó phù hợp hơn với quy trình công việc của họ để kết nối với phpMyAdmin với một người dùng chuyên dụng. Để làm điều này, hãy mở MySQL shell một lần nữa:
- sudo mysql
Nếu bạn đã bật xác thực mật khẩu cho root user của mình, như được mô tả trong phần trước, bạn sẽ cần chạy lệnh sau và nhập mật khẩu của mình khi được nhắc để kết nối:
- mysql -u root -p
Từ đó, tạo một người dùng mới và đặt cho nó một mật khẩu mạnh:
- CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
Lưu ý: Một lần nữa, tùy thuộc vào phiên bản PHP bạn đã cài đặt, bạn có thể muốn đặt người dùng mới của mình 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 người dùng mới của bạn các đặc quyền phù hợp. Ví dụ: bạn có thể cấp đặc quyền người dùng cho tất cả các bảng trong cơ sở dữ liệu, cũng như quyền thêm, thay đổi và xóa đặc quyền người dùng bằng lệnh này:
- GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Sau đó, thoát khỏi MySQL shell:
- exit
Giờ đây, 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ủ, sau đó là /phpmyadmin
:
https://your_domain_or_IP/phpmyadmin
Đăng nhập vào giao diện, với quyền root hoặc bằng tên người dùng và mật khẩu mới mà bạn vừa cấu hình.
Khi bạn đăng nhập, bạn sẽ thấy giao diện người dùng trông giống như sau:
Bây giờ 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 phải làm là tăng cường bảo mật hệ thống của bạn để bảo vệ nó khỏi những kẻ tấn công.
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 hết sức 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 vào trước toàn bộ ứng dụng bằng cách sử dụng các chức năng ủy quyền và xác thực .htaccess
tích hợp sẵn của Apache.
Để thực hiện điều này, trước tiên bạn phải cho phép sử dụng tính năng ghi đè tệp .htaccess
bằng cách chỉnh sửa tệp cấu hình Apache của bản cài đặt phpMyAdmin của bạn.
Sử dụng trình soạn thảo văn bản ưa thích của bạn để chỉnh sửa tệp phpmyadmin.conf
đã được đặt trong thư mục cấu hình Apache của bạn. Ở đây, chúng tôi sẽ sử dụng nano
:
- sudo nano /etc/apache2/conf-available/phpmyadmin.conf
Thêm một lệnh AllowOverride All
trong phần <Directory /usr/share/phpmyadmin>
của tệp cấu hình, như sau:
<Directory /usr/share/phpmyadmin>
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
AllowOverride All
. . .
Khi bạn đã thêm dòng này, hãy lưu và đóng tệp. Nếu bạn đã sử dụng nano
để chỉnh sửa tệp, hãy thực hiện bằng cách nhấn CTRL + X
, Y
, rồi ENTER
.
Để thực hiện những thay đổi bạn đã thực hiện, hãy khởi động lại Apache:
- sudo systemctl restart apache2
Bây giờ bạn đã cho phép sử dụng các tệp .htaccess
cho ứng dụng của mình, bạn cần tạo một tệp để thực sự triển khai một số bảo mật.
Để điều này thành công, tệp phải được tạo trong thư mục ứng dụng. Bạn có thể tạo tệp cần thiết và mở tệp đó trong trình soạn thảo văn bản của mình với quyền root bằng cách nhập:
- sudo nano /usr/share/phpmyadmin/.htaccess
Trong tệp này, hãy nhập thông tin sau:
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/phpmyadmin/.htpasswd
Require valid-user
Đây là ý nghĩa của từng dòng này:
AuthType Basic
: Dòng này chỉ định loại xác thực mà bạn đang triển khai. Loại này sẽ thực hiện xác thực mật khẩu bằng tệp mật khẩu.AuthName
: Cái này đặt thông báo cho hộp thoại xác thực. Bạn nên giữ thông tin chung này để người dùng trái phép không nhận được bất kỳ thông tin nào về nội dung đang được bảo vệ.AuthUserFile
: Điều này đặt vị trí của tệp mật khẩu sẽ được sử dụng để xác thực. Điều này phải nằm ngoài các thư mục đang được phục vụ. Chúng tôi sẽ tạo tập tin này trong thời gian ngắn.Require valid-user
: Điều này chỉ định rằng chỉ những người dùng đượ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à những gì thực sự ngăn người dùng trái phép vào.Khi bạn hoàn tất, hãy lưu và đóng tệp.
Vị trí bạn đã chọn cho tệp mật khẩu của mình là /etc/phpmyadmin/.htpasswd
. Bây giờ bạn có thể tạo tệp này và chuyển nó cho người dùng ban đầu bằng tiện ích htpasswd
:
- sudo htpasswd -c /etc/phpmyadmin/.htpasswd username
Bạn sẽ được nhắc chọn và xác nhận mật khẩu cho người dùng mà bạn đang tạo. Sau đó, tệp được tạo bằng mật khẩu băm mà bạn đã nhập.
Nếu bạn muốn nhập một người dùng bổ sung, bạn cần làm như vậy mà không có cờ -c
, như sau:
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Sau đó khởi động lại Apache để xác thực .htaccess
có hiệu lực:
- sudo systemctl restart apache2
Bây giờ, khi bạn truy cập thư mục con phpMyAdmin của mình, bạn sẽ được nhắc nhập tên tài khoản và mật khẩu bổ sung mà bạn vừa thiết lập cấu hình:
https://domain_name_or_IP/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 xác thực không phải MySQL bổ sung, bạn đang cung cấp cho cơ sở dữ liệu của mình một lớp bảo mật bổ sung. Điều này là đáng mong đợi, vì trước đây phpMyAdmin dễ bị tấn công bởi các mối đe dọa bảo mật.
Bây giờ bạn đã cấu hình phpMyAdmin và sẵn sàng sử dụng trên máy chủ Ubuntu 20.04 của mình. Sử dụng giao diện này, bạn có thể tạo cơ sở dữ liệu, người dùng 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.