Cài đặt và bảo mật phpMyAdmin trên Ubuntu 18.04
PhpMyAdmin được tạo ra để user có thể tương tác với MySQL thông qua giao diện web, sẽ tiện lợi hơn nhiền so với dùng dòng lệnh với mysql client. 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 trên hệ thống Ubuntu 18.04.Yêu cầu
Trước khi bắt đầu bạn cần hoàn thành một số bước cơ bản.
Đầu tiên, ta sẽ giả định server có user không phải root có quyền sudo
, cũng như firewall được cấu hình với ufw
, như được mô tả trong hướng dẫn cài đặt server ban đầu cho Ubuntu 18.04 .
Giả định bạn đã hoàn tất cài đặt LAMP (Linux, Apache, MySQL và PHP) trên server Ubuntu 18.04 . Nếu việc này vẫn chưa hoàn tất, bạn có thể làm theo hướng dẫn cách cài đặt LAMP trên Ubuntu 18.04 .
Cuối cùng, 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 MySQL
- 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
Vì PHP được triển khai rộng rãi thường là mục tiêu tấn công, bạn không nên chạy phpMyAdmin trên hệ thống từ xa qua kết nối HTTP thông thường, thay vào đó là HTTPS / SSL. Nếu bạn không 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 18.04.
Sau khi hoàn tất các bước này, ta sẽ đi tiếp.
Bước 1 - Cài đặt phpMyAdmin
Để bắt đầu, ta cài đặt phpMyAdmin từ repository mặc định của Ubuntu, bằng cách update gói mới của server và sau đó sử dụng trình apt
để cài đặt:
- sudo apt update
- sudo apt install phpmyadmin php-mbstring php-gettext
Tiếp theo sẽ hỏi bạn để cấu hình cài đặt một cách chính xác.
Nhấn SPACE
, TAB
, sau đó ENTER
để chọn Apache.
- Đối với lựa chọn server, hãy chọn
apache2
- Chọn
Yes
khi được hỏi có sử dụngdbconfig-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
Quá trình cài đặt thêm file cấu hình phpMyAdmin Apache vào folder /etc/apache2/conf-enabled/
. Bạn cần enable phần mở rộng mbstring
PHP:
- sudo phpenmod mbstring
Sau đó, khởi động lại Apache để các thay đổi được nhận:
- sudo systemctl restart apache2
phpMyAdmin hiện đã được cài đặt và cấu hình. Tuy nhiên, trước khi có thể đăng nhập và bắt đầu tương tác với database MySQL, bạn cần đảm bảo user MySQL có các quyền cần thiết để tương tác với chương trình.
Bước 2 - 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 user này bằng password quản trị trong khi cài đặt, bạn nên đăng nhập user MySQL root hoặc với 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 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, nhưng nó cũng có thể làm phức tạp thêm 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.
Để đăng nhập vào phpMyAdmin với quyền là user MySQL root , bạn cần chuyển phương thức xác thực của nó từ auth_socket
sang mysql_native_password
(nếu bạn chưa làm như vậy). Để thực hiện việc này, hãy mở MySQL từ terminal :
- sudo mysql
Tiếp theo, kiểm tra phương thức xác thực mà account user MySQL sử dụng bằng lệnh sau:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
Trong ví dụ này, bạn có thể thấy rằng user root xác thực bằng cách sử dụng plugin auth_socket
. Để account root xác thực bằng password, hãy chạy ALTER USER
và thay đổi password
thành một password mạnh:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Sau đó, chạy FLUSH PRIVILEGES
để yêu cầu server reload (tải-lại) các bảng và áp dụng các thay đổi:
- FLUSH PRIVILEGES;
Kiểm tra lại các phương pháp 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;
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | mysql_native_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)
Bạn có thể thấy user root xác thực bằng password. Đến đây bạn có thể đăng nhập vào giao diện phpMyAdmin với user root và password vừa đặt.
Cấu hình quyền truy cập password cho user MySQL chuyên dụng
Ngoài ra, để kết nối với phpMyAdmin với một user riêng phù hợp hơn với quy trình làm việc thì ta có thể vào MySQL shell để tạo user:
- sudo mysql
Lưu ý: Nếu bạn đã cài đặt xác thực password, bạn cần gõ lệnh để truy cập Mysql shell:
- mysql -u root -p
Từ đó, tạo một user mới và cấp một password mạnh:
- CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Sau đó, cấp cho user mới 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
:
http://your_domain_or_IP/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:
Đến đây bạn có thể kết nối và tương tác với phpMyAdmin, và tiếp theo ta cần tăng cường bảo mật để bảo vệ khỏi tấn công.
Bước 3 - Bảo mật version phpMyAdmin
Do tính phổ biến của nó, phpMyAdmin là mục tiêu phổ biến để tấn công và ta nên cẩn thận hơn để ngăn chặn truy cập trái phép. Một trong những cách đơn giản nhất để 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
hợp của Apache.
Để thực hiện việc này, trước tiên bạn cần cho phép sử dụng overrides (ghi-đè) file .htaccess
bằng cách chỉnh sửa file cấu hình Apache .
Chỉnh sửa file được liên kết đã được đặt trong folder cấu hình Apache :
- 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:
<Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All . . .
Khi đã thêm dòng này, hãy lưu file.
Để áp dụng các thay đổi đã thực hiện, hãy khởi động lại Apache:
- sudo systemctl restart apache2
Đến đây bạn đã bật sử dụng .htaccess
cho ứng dụng , bạn cần tạo một .htaccess
để áp dụng một số bảo mật.
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:
AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
Đây là ý nghĩa của mỗi dòng:
AuthType Basic
: Dòng này 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 trái phép 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. Điều này phải nằm ngoài các folder public. Ta sẽ tạo file này lát nữa.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, để ngăn user trái phép 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 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 đang tạo. Sau đó, file được tạo bằng password băm đã nhập.
Nếu muốn nhập thêm user thì bỏ cờ -c
, như sau:
- sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser
Bây giờ, khi bạn truy cập vào folder con phpMyAdmin , sẽ được yêu cầu nhập tên account và password bổ sung mà bạn vừa 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ài đặt này bổ sung một lớp bảo mậtt, an toàn hơn phpMyAdmin đã từng bị các lỗ hổng bảo mật trong quá khứ cũng như có thể trong tương lai.
Kết luận
Tuyệt vời, bạn đã cấu hình phpMyAdmin và sẵn sàng sử dụng trên server Ubuntu 18.04 . Sử dụng giao diện này, bạn có thể dễ dàng tạo database, user, bảng, v.v. và 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.
Các tin trước
Cài đặt MySQL trên Ubuntu 18.04 2020-04-21
Cài đặt Webserver Apache trên CentOS 7 2019-05-29
So sánh SQLite , MySQL , PostgreSQL 2019-03-19
Cài đặt và sử dụng Docker trên Ubuntu 16 2018-10-19
Cài đặt và sử dụng Composer trên Ubuntu 18.04 2018-10-16
Chuyển folder dữ liệu Mysql tới vị trí mới trên Ubuntu 18.04 2018-07-06
Cài đặt WordPress với LAMP trên Ubuntu 18.04 2018-07-06
Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05
Cài đặt Firewall với UFW trên Ubuntu 18.04 2018-07-05
Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05