Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

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

Ngày đăng: 1 tháng 3 năm 2023

Ubuntu

Giới thiệu

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.

Điều kiện tiên quyết

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

  • Một máy chủ Ubuntu 20.04. Máy chủ này phải có non-root user với quyền quản trị và tường lửa được thiết lập cấu hình bằng 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.
  • LAMP (Linux, Apache, MySQL và PHP) stack được cài đặt trên máy chủ Ubuntu 20.04 của bạn. Nếu điều này vẫn chưa hoàn thành, bạn có thể làm theo hướng dẫn này để cài đặt LAMP stack trên 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ó:

  • 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à 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ước 1 — Cài đặt phpMyAdmin

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:

  1. 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 nhau
  • php-zip: Tiện ích mở rộng này hỗ trợ tải các tệp .zip lên phpMyAdmin
  • php-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 JSON
  • php-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 nhau

Xin 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:

  1. 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:

  • Đối với lựa chọn máy chủ, hãy chọn 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.

  • Chọn Yes khi được hỏi có sử dụng dbconfig-common để thiết lập cơ sở dữ liệu 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 ý: 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:

description image

Để 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:

  1. 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:

  1. 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:

  1. UNINSTALL COMPONENT "file://component_validate_password";

Sau đó, bạn có thể đóng ứng dụng khách MySQL:

  1. exit

Sau đó thử cài đặt lại gói phpmyadmin và nó sẽ hoạt động như mong đợi:

  1. 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:

  1. 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:

  1. sudo phpenmod mbstring

Sau đó, khởi động lại Apache để những thay đổi của bạn được công nhận:

  1. 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.

Bước 2 — Điều chỉnh xác thực người dùng và đặc quyền

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.

Thiết lập cấu hình quyền truy cập mật khẩu cho tài khoản gốc MySQL

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:

  1. 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:

  1. 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:

  1. 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ế:

  1. 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:

  1. 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.

Thiết lập cấu hình quyền truy cập mật khẩu cho người dùng MySQL chuyên dụng

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:

  1. 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:

  1. 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:

  1. 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:

  1. 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:

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

Sau đó, thoát khỏi MySQL shell:

  1. 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

description image

Đă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:

description image

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.

Bước 3 — Bảo vệ Phiên bản 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 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:

  1. 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:

/etc/apache2/conf-available/phpmyadmin.conf
<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:

  1. 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:

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

Trong tệp 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 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:

  1. 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:

  1. sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

Sau đó khởi động lại Apache để xác thực .htaccess có hiệu lực:

  1. 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

description image

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.

Kết luận

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.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời