Hướng dẫn cài đặt và bảo mật phpMyAdmin với Nginx trên máy chủ Ubuntu 20.04

Thứ sáu - 12/03/2021 23:15
Khi phát triển một trang web hoặc ứng dụng web, nhiều người dùng cần chức năng của một hệ thống cơ sở dữ liệu như MySQL . Tuy nhiên, việc tương tác với hệ thống chỉ từ máy khách dòng lệnh MySQL yêu cầu sự quen thuộc với Ngôn ngữ truy vấn có cấu trúc - thường được gọi là SQL - có thể gây trở ngại lớn cho một số người dùng.
login
login

Theo dòng sự kiện

Cách cài đặt máy chủ với Ubuntu 18.04

Khi bạn lần đầu tiên tạo một máy chủ Ubuntu 18.04 mới, có một số bước cấu hình mà bạn nên thực hiện...

Cách tạo chứng chỉ SSL tự ký cho Apache trong Ubuntu 18.04

TLS, hay bảo mật lớp truyền tải và SSL tiền nhiệm của nó, viết tắt của lớp cổng bảo mật, là các giao...

Những tin cũ hơn

Tự động thiết lập máy chủ ban đầu với Ubuntu 18.04

Khi bạn lần đầu tiên tạo một máy chủ Ubuntu 18.04 mới, có một số bước cấu hình mà bạn nên thực hiện...

Cách cài đặt (LAMP) với Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 20.04

“LAMP” là một nhóm phần mềm nguồn mở thường được cài đặt cùng nhau để cho phép máy chủ lưu trữ các...

phpMyAdmin được tạo ra để cho phép người dùng tương tác với MySQL thông qua giao diện web trực quan, chạy cùng với môi trường phát triển PHP. Hướng dẫn này sẽ hướng dẫn bạn cách cài đặt phpMyAdmin trên máy chủ Nginx.
Lưu ý: phpMyAdmin chạy trên máy chủ cơ sở dữ liệu, xử lý thông tin xác thực cơ sở dữ liệu và cho phép người dùng thực thi các câu lệnh SQL trên cơ sở dữ liệu. Kết hợp với thực tế là nó là một ứng dụng PHP được triển khai rộng rãi, điều này có nghĩa là phpMyAdmin thường xuyên bị nhắm mục tiêu tấn công. Nếu bạn cài đặt và định cấu hình phpMyAdmin mà không thực hiện các bước thích hợp để bảo mật nó khỏi các tác nhân độc hại, bạn có nguy cơ bị mất hoặc đánh cắp dữ liệu của mình.

Ngoài việc cài đặt ứng dụng, hướng dẫn này sẽ trình bày một số biện pháp bạn có thể thực hiện để tăng cường bảo mật cho cài đặt phpMyAdmin của mình. Nó cũng sẽ giải thích chi tiết từng biện pháp để bạn có thể đưa ra quyết định sáng suốt và bảo vệ hệ thống của mình.
Để hoàn thành hướng dẫn này, bạn sẽ cần:
Máy chủ chạy Ubuntu 20.04. Máy chủ này phải có người dùng không phải root có đặc quyền quản trị và tường lửa được định cấu hình với 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 .
Một ngăn xếp LEMP (Linux, Nginx, MySQL và PHP) được cài đặt trên máy chủ Ubuntu 20.04 của bạn. Để cài đặt và định cấu hình các thành phần này, hãy làm theo hướng dẫn của chúng tôi về Cách cài đặt Linux, Nginx, MySQL, PHP (ngăn xếp LEMP) trên Ubuntu 20.04 .
Ngoài ra, vì phpMyAdmin xử lý xác thực bằng thông tin đăng nhập MySQL, chúng tôi thực sự khuyên bạn nên cài đặt chứng chỉ SSL / TLS để kích hoạt lưu lượng được mã hóa giữa máy chủ và máy khách. Nếu bạn không có miền hiện có được định cấu hình với chứng chỉ hợp lệ, hãy làm theo hướng dẫn này về cách bảo mật Nginx với Let's Encrypt trên Ubuntu 20.04 để thiết lập điều này.
Cảnh báo: Nếu bạn chưa cài đặt chứng chỉ SSL / TLS trên máy chủ và bạn vẫn muốn tiếp tục, vui lòng xem xét việc thực thi quyền truy cập qua Đường hầm SSH như được giải thích trong Bước 5 của hướng dẫn này.
Khi bạn đã có những điều kiện tiên quyết này, bạn có thể bắt đầu làm theo Bước 1 của hướng dẫn này.
Bước 1 - Cài đặt phpMyAdmin
Bạn có thể cài đặt phpMyAdmin bằng cách sử dụng APT để tải xuống phpmyadmingói từ kho lưu trữ mặc định của Ubuntu.
Bắt đầu bằng cách cập nhật chỉ mục gói của máy chủ:
sudo apt update
Bây giờ bạn có thể cài đặt phpMyAdmin bằng cách chạy lệnh sau:
sudo apt install phpmyadmin
Trong quá trình cài đặt, bạn sẽ được nhắc chọn một máy chủ web (Apache hoặc Lighttpd) để cấu hình. phpMyAdmin có thể tự động thực hiện một số thay đổi cấu hình để đảm bảo rằng nó hoạt động chính xác với một trong các máy chủ web này khi cài đặt. Tuy nhiên, vì bạn đang sử dụng Nginx làm máy chủ web, bạn không nên chọn một trong hai tùy chọn này. Thay vào đó, hãy nhấn TAB để đánh dấu <Ok> và sau đó nhấn ENTER để tiếp tục quá trình cài đặt.
Tiếp theo, bạn sẽ được nhắc có sử dụng dbconfig-common để định cấu hình cơ sở dữ liệu ứng dụng hay không. Chọn <Có> . Thao tác này sẽ thiết lập cơ sở dữ liệu nội bộ và người dùng quản trị cho phpMyAdmin. Bạn sẽ được yêu cầu xác định mật khẩu mới cho người dùng phpmyadmin MySQL, nhưng vì đây không phải là mật khẩu bạn cần nhớ nên bạn có thể để trống và để phpMyAdmin tạo mật khẩu ngẫu nhiên.
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 ngăn xếp LAMP điều kiện tiên quyết , bạn có thể đã quyết định bật plugin Xác thực mật khẩu. Theo cách viết này, việc kích hoạt thành phần này sẽ gây ra lỗi khi quá trình cài đặt phpMyAdmin cố gắng đặt mật khẩu cho người dùng phpmyadmin :
pma vpp error

Để giải quyết vấn đề này, hãy chọn tùy chọn 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 người dùng MySQL gốc , hãy chạy lệnh này và sau đó nhập mật khẩu của bạn khi được nhắc:
mysql -u root -p
Từ lời nhắc MySQL, hãy chạy lệnh sau để tắt thành phần Xác thực mật khẩu. Lưu ý rằng điều 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:
mysql> exit
Sau đó, hãy thử cài đặt lại phpmyadmingói 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 lời nhắc MySQL bằng 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 Xác thực mật khẩu:
mysql> INSTALL COMPONENT "file://component_validate_password";
Khi apt installlệnh hoàn tất, phpMyAdmin sẽ được cài đặt đầy đủ. Tuy nhiên, để máy chủ web Nginx tìm và phục vụ các tệp phpMyAdmin một cách chính xác, bạn sẽ cần tạo một liên kết tượng trưng từ các tệp cài đặt đến thư mục gốc tài liệu của Nginx. Nếu bạn đã làm theo hướng dẫn về ngăn xếp LEMP điều kiện tiên quyết , thì gốc tài liệu cài đặt Nginx của bạn là /var/www/your_domain/
sudo ln -s /usr/share/phpmyadmin /var/www/your_domain/phpmyadmin
Cài đặt phpMyAdmin của bạn hiện đã hoạt động. Để truy cập giao diện, hãy truy cập tên miền của máy chủ hoặc địa chỉ IP công cộng/phpmyadmin của bạn, sau đó là trong trình duyệt web của bạn:
https://server_domain_or_IP/phpmyadmin
login

Như đã đề cập trước đây, phpMyAdmin xử lý xác thực bằng thông tin đăng nhập MySQL. Điều này có nghĩa là để đăng nhập vào phpMyAdmin, bạn sử dụng cùng tên người dùng và mật khẩu mà bạn thường sử dụng để kết nối với cơ sở dữ liệu bằng dòng lệnh hoặc bằng API. Nếu bạn cần trợ giúp tạo người dùng MySQL, hãy xem hướng dẫn này về Cách quản lý cơ sở dữ liệu SQL.
Lưu ý: Không khuyến khích đăng nhập vào phpMyAdmin với tư cách là người dùng MySQL gốc vì nó có nguy cơ bảo mật đáng kể. Hướng dẫn này sẽ trình bày cách tắt đăng nhập với tư cách người dùng MySQL gốc trong Bước 3 của hướng dẫn này .
Tại thời điểm này, cài đặt phpMyAdmin của bạn đã hoàn toàn hoạt động. Tuy nhiên, bằng cách cài đặt giao diện web, bạn đã tiếp xúc với máy chủ cơ sở dữ liệu MySQL của mình với thế giới bên ngoài. Do sự phổ biến của phpMyAdmin và khả năng nó cung cấp quyền truy cập vào một lượng lớn dữ liệu nhạy cảm, các cài đặt như thế này là mục tiêu phổ biến của các cuộc tấn công. Trong các phần tiếp theo của hướng dẫn này, chúng tôi sẽ giới thiệu cho các bạn một số phương pháp khác nhau mà bạn có thể thực hiện cài đặt phpMyAdmin của mình an toàn hơn.

Bước 2 - Thay đổi vị trí mặc định của phpMyAdmin
Một cách để bảo vệ cài đặt phpMyAdmin của bạn là làm cho nó khó tìm hơn. Chương trình sẽ quét các đường dẫn thông thường, như /phpmyadmin/pma/admin/mysql, và tên tương tự khác. Thay đổi URL của giao diện từ /phpmyadminthành một thứ gì đó không chuẩn sẽ khiến các tập lệnh tự động khó tìm thấy cài đặt phpMyAdmin của bạn và cố gắng tấn công brute-force.
Trong bước trước, bạn đã tạo một liên kết tượng trưng trong thư mục gốc của tài liệu web Nginx trỏ đến /usr/share/phpmyadmin, nơi chứa các tệp ứng dụng phpMyAdmin thực. Bạn có thể đổi tên liên kết tượng trưng này để thay đổi URL giao diện của phpMyAdmin.
Để thực hiện việc này, hãy điều hướng đến thư mục gốc của tài liệu Nginx:
  • cd /var/www/your_domain/
Sao chép
Sau đó, chạy lslệnh sau để liệt kê các tệp trong thư mục gốc của tài liệu để hiểu rõ hơn về thay đổi bạn sẽ thực hiện. Lệnh này bao gồm -ltùy chọn cho lệnh sử dụng định dạng "danh sách dài". Điều này sẽ hướng dẫn lstrả lại nhiều thông tin hơn so với cách khác:
  • ls-l
Sao chép
Đầu ra của bạn sẽ chứa một dòng như sau:
Output
. . . lrwxrwxrwx 1 root root 22 Jan 15 21:09 phpmyadmin -> /usr/share/phpmyadmin/ . . .

Dòng này cho biết rằng bạn có một liên kết tượng trưng có tên phpmyadmintrong thư mục này. Bạn có thể thay đổi tên liên kết này thành bất kỳ tên nào bạn muốn và làm như vậy sẽ thay đổi URL nơi bạn có thể truy cập phpMyAdmin. Điều này sẽ giúp che khuất điểm cuối khỏi các bot thực hiện tìm kiếm tự động các tên điểm cuối phổ biến.
Chọn tên ẩn mục đích của điểm cuối. Hướng dẫn này sẽ đặt tên cho điểm cuối và sử dụng tên này trong các ví dụ xuyên suốt, nhưng bạn nên chọn một tên thay thế ./hiddenlink
Đổi tên liên kết tượng trưng bằng mvlệnh:
  • sudo mv phpmyadmin hiddenlink
Sao chép
Sau khi chạy lệnh này, hãy chạy lại ls -llệnh để xác nhận rằng liên kết tượng trưng đã được đổi tên chính xác:
  • ls -l
 
Sao chép
Lần này, kết quả sẽ cho biết rằng danh sách cho liên kết tượng trưng đã được cập nhật với tên mới của nó:
Output
total 8 . . . lrwxrwxrwx 1 root root 22 Jan 15 21:09 hiddenlink -> /usr/share/phpmyadmin/ . . .
Bây giờ khi bạn truy cập URL mà trước đây bạn đã sử dụng để truy cập phpMyAdmin, bạn sẽ gặp lỗi 404: https://server_domain_or_IP/phpmyadmin
nginx 1 18 404

Thay vào đó, bạn có thể truy cập vào giao diện phpMyAdmin của mình tại URL mới mà bạn vừa định cấu hình:
https://server_domain_or_IP/hiddenlink
login

Bằng cách che khuất vị trí thực của phpMyAdmin trên máy chủ, bạn đang đảm bảo giao diện của nó chống lại quá trình quét tự động và các nỗ lực bạo lực thủ công.
Bước 3 - Vô hiệu hóa đăng nhập gốc Trên MySQL, cũng như trong các hệ thống Linux thông thường, tài khoản gốc là một tài khoản quản trị đặc biệt với quyền truy cập không hạn chế vào hệ thống. Ngoài việc là một tài khoản đặc quyền, nó còn là một tên đăng nhập đã biết, khiến nó trở thành mục tiêu rõ ràng cho các cuộc tấn công brute-force. Để giảm thiểu những rủi ro này, bước này sẽ phác thảo cách cấu hình phpMyAdmin để từ chối bất kỳ nỗ lực đăng nhập nào đến từ người dùng MySQL gốc . Bằng cách này, ngay cả khi bạn cung cấp thông tin xác thực hợp lệ cho người dùng root , bạn vẫn sẽ bị từ chối Quyền truy cập! lỗi và sẽ không được phép đăng nhập.
Vì bạn đã chọn dbconfig-commonđịnh cấu hình và lưu trữ cài đặt phpMyAdmin nên cấu hình mặc định của ứng dụng hiện được lưu trữ trong cơ sở dữ liệu MySQL của bạn. Bạn sẽ cần tạo một config.inc.phptệp mới trong thư mục cấu hình của phpMyAdmin để xác định cài đặt tùy chỉnh của bạn. Mặc dù các tập lệnh PHP của phpMyAdmin được đặt bên trong /usr/share/phpmyadminthư mục, nhưng các tệp cấu hình của ứng dụng vẫn nằm trong đó /etc/phpmyadmin.
Tạo một tệp cài đặt tùy chỉnh mới bên trong /etc/phpmyadmin/conf.dthư mục và đặt tên cho nó pma_secure.php:
sudo nano /etc/phpmyadmin/conf.d/pma_secure.php 
 
Sao chép
Sau đó, thêm nội dung sau vào tệp mới:
/etc/phpmyadmin/conf.d/pma_secure.php
<?php

# PhpMyAdmin Settings
# This should be set to a random string of at least 32 chars
$cfg['blowfish_secret'] = 'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS';

$i=0;
$i++;

$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
$cfg['Servers'][$i]['AllowRoot'] = false;

?>
Sao chép
Bằng cách bao gồm các AllowNoPasswordvà AllowRootchỉ thị và thiết lập cả trong số họ để false, tập tin cấu hình này đăng nhập và đăng nhập vô hiệu hóa mật mã bởi các gốc sử dụng MySQL, tương ứng.
Lưu ý rằng auth_typecài đặt cấu hình phpMyAdmin để sử dụng cookiephương thức xác thực. phpMyAdmin sử dụng cookiephương thức xác thực theo mặc định, cho phép bạn đăng nhập vào phpMyAdmin với tư cách là bất kỳ người dùng MySQL hợp lệ nào với sự trợ giúp của cookie . Với phương pháp này, mật khẩu người dùng MySQL được lưu trữ và mã hóa bằng thuật toán Tiêu chuẩn mã hóa nâng cao (AES) trong một cookie tạm thời.
Về mặt lịch sử, phpMyAdmin thay vào đó đã sử dụng thuật toán Blowfish cho mục đích này. Tuy nhiên, nó vẫn tìm kiếm một chỉ thị có tên blowfish_secret, trỏ đến cụm mật khẩu được sử dụng nội bộ bởi thuật toán AES. Đây không phải là cụm mật khẩu bạn cần nhớ, vì vậy bất kỳ chuỗi nào chứa 32 ký tự ngẫu nhiên sẽ hoạt động ở đây.
Cập nhật dòng đọc thành một chuỗi ngẫu nhiên có ít nhất 32 ký tự.'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS'
Lưu ý: Nếu cụm mật khẩu bạn nhập ở đây có độ dài ngắn hơn 32 ký tự, điều đó sẽ dẫn đến việc các cookie được mã hóa kém an toàn hơn. Tuy nhiên, nhập một chuỗi dài hơn 32 ký tự sẽ không gây hại gì.
Để tạo một chuỗi ký tự ngẫu nhiên thực sự, bạn có thể cài đặt và sử dụng pwgenchương trình với APT:
  • sudo apt install pwgen
 
Sao chép
Theo mặc định, pwgentạo mật khẩu dễ phát âm, mặc dù kém an toàn hơn. Tuy nhiên, bằng cách thêm -scờ, như trong lệnh sau, bạn có thể tạo một mật khẩu hoàn toàn ngẫu nhiên, khó ghi nhớ. Lưu ý hai đối số cuối cùng của lệnh này:, lệnh 32này cho biết chuỗi mật khẩu pwgensẽ tạo ra sẽ dài bao nhiêu ; và 1cho biết pwgennó sẽ tạo ra bao nhiêu chuỗi:
  • pwgen -s 32 1
 
Sao chép
Sao chép kết quả đầu ra của lệnh này và thêm nó vào pma_secure.phptệp, thay thế .'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS'

Lưu và đóng tệp khi bạn chỉnh sửa xong. Nếu bạn đã sử dụng nano, hãy làm như vậy bằng cách nhấn CTRL + XYđể xác nhận các thay đổi, sau đó ENTERđể quay lại lời nhắc bash.
Các thay đổi sẽ tự động áp dụng. Nếu bạn tải lại trang đăng nhập ngay bây giờ và cố gắng đăng nhập bằng quyền root , bạn sẽ bị từ chối Quyền truy cập! lỗi:
pma access denied root error

Đăng nhập bởi người dùng MySQL gốc hiện bị cấm trong quá trình cài đặt phpMyAdmin của bạn. Biện pháp bảo mật này sẽ chặn các tập lệnh brute-force cố gắng đoán mật khẩu của người dùng cơ sở dữ liệu gốc trên máy chủ của bạn. Hơn nữa, nó sẽ thực thi việc sử dụng các tài khoản MySQL ít đặc quyền hơn để truy cập vào giao diện web của phpMyAdmin, bản thân nó là một phương pháp bảo mật quan trọng.
Bước 4 - Tạo cổng xác thực Việc ẩn cài đặt phpMyAdmin của bạn ở một vị trí bất thường có thể bỏ qua một số bot tự động quét mạng, nhưng nó vô dụng trước các cuộc tấn công có chủ đích. Để bảo vệ tốt hơn một ứng dụng web có quyền truy cập bị hạn chế, thông thường, việc ngăn chặn những kẻ tấn công trước khi chúng có thể tiếp cận ứng dụng sẽ hiệu quả hơn. Bằng cách này, họ sẽ không thể sử dụng khai thác chung và các cuộc tấn công vũ phu để đoán thông tin đăng nhập.
Trong trường hợp cụ thể của phpMyAdmin, điều quan trọng hơn là giữ cho giao diện đăng nhập bị khóa. Bằng cách giữ cho nó mở với thế giới, bạn đang cung cấp một nền tảng brute-force để những kẻ tấn công đoán thông tin đăng nhập cơ sở dữ liệu của bạn.
Bước này phác thảo cách thêm một lớp xác thực bổ sung vào cài đặt phpMyAdmin của bạn để tăng tính bảo mật cho cơ sở dữ liệu MySQL của bạn. Hầu hết các máy chủ web, bao gồm cả Nginx, đều cung cấp khả năng này. Bằng cách hoàn thành bước này, bất kỳ ai cố gắng truy cập vào màn hình đăng nhập của cài đặt phpMyAdmin của bạn trước tiên sẽ được yêu cầu chuyển qua lời nhắc xác thực HTTP bằng cách nhập tên người dùng và mật khẩu hợp lệ.
Để thiết lập điều này, trước tiên bạn cần tạo một tệp mật khẩu để lưu trữ thông tin xác thực. Nginx yêu cầu mật khẩu phải được mã hóa bằng crypt()chức năng này. Bộ OpenSSL, nên được cài đặt trên máy chủ Ubuntu của bạn theo mặc định, bao gồm chức năng này.
Để tạo mật khẩu được mã hóa, hãy nhập:
openssl passwd
Sao chép
Bạn sẽ được nhắc nhập và xác nhận mật khẩu mà bạn muốn sử dụng. Sau đó, tiện ích sẽ hiển thị một phiên bản mật khẩu được mã hóa trông giống như sau:
Output9YHV.p60.Cg6I
Sao chép giá trị này, vì bạn sẽ cần đưa nó vào tệp xác thực mà bạn sắp tạo.

Bây giờ, hãy tạo một tệp xác thực. Theo mục đích của hướng dẫn này, chúng tôi sẽ gọi tệp này pma_passvà đặt nó trong thư mục cấu hình Nginx:
sudo nano /etc/nginx/pma_pass
Sao chép
Trong tệp này, chỉ định tên người dùng bạn muốn sử dụng, theo sau là dấu hai chấm ( :) và sau đó là phiên bản mật khẩu được mã hóa mà bạn nhận được từ openssl passwdtiện ích.
Trong ví dụ này, người dùng được đặt tên sammy, nhưng bạn có thể chọn bất kỳ tên người dùng nào bạn muốn. Đây không cần phải là tên của một hồ sơ người dùng hiện có trên máy chủ Ubuntu của bạn hoặc của một người dùng MySQL.
Sau khi thêm tên người dùng đã chọn và mật khẩu được mã hóa mà bạn đã sao chép trước đó, tệp sẽ trông giống như sau:
/ etc / nginx / pma_passsammy:9YHV.p60.Cg6ISao chép
Lưu và đóng tệp khi hoàn tất.
Tiếp theo, bạn sẽ cần sửa đổi tệp cấu hình Nginx. Một lần nữa, hướng dẫn này tuân theo các quy ước được thiết lập trong hướng dẫn LEMP điều kiện tiên quyết , vì vậy tệp cấu hình được sử dụng trong các ví dụ sau là . Đảm bảo rằng bạn sử dụng tệp cấu hình Nginx có liên quan cho vị trí web nơi cài đặt phpMyAdmin của bạn hiện đang được lưu trữ.
/etc/nginx/sites-available/your_domain

Mở tệp cấu hình Nginx của bạn trong trình soạn thảo văn bản ưa thích của bạn để bắt đầu:
  • sudo nano /etc/nginx/sites-available/your_domain
    ao chép
Xác định vị trí serverkhối và location /phần bên trong nó. Bạn cần tạo một phần mới location bên dưới location /khối này để khớp với đường dẫn hiện tại của phpMyAdmin trên máy chủ.
Nhớ lại rằng trong Bước 2 của hướng dẫn này, bạn đã thay đổi tên vị trí của phpMyAdmin bằng cách đổi tên liên kết tượng trưng ( hiddenlinktrong ví dụ của chúng tôi). Tại đây, bạn cần nhập tên mà bạn đã sử dụng cho liên kết tượng trưng này. Bạn không cần phải bao gồm đường dẫn đầy đủ của tệp, chỉ cần tên của liên kết tượng trưng liên quan đến thư mục gốc của tài liệu Nginx:
/ etc / nginx / sites-available / your_domain
server {
        . . .

        location / {
                try_files $uri $uri/ =404;
        }

        location ^~ /hiddenlink {

        }

        . . .
}
Sao chép
Trong khối này, hãy thiết lập hai chỉ thị:, auth_basicxác định thông báo sẽ được hiển thị trên lời nhắc xác thực và auth_basic_user_filetrỏ đến tệp xác thực bạn vừa tạo. Thêm cả hai lệnh này vào phần mới location:
/ etc / nginx / sites-available / your_domain
server {
        . . .
        location / {
                try_files $uri $uri/ =404;
        }

        location ^~ /hiddenlink {
                auth_basic "Admin Login";
                auth_basic_user_file /etc/nginx/pma_pass;
        }
        . . .
}
Sao chép
Cuối cùng, hãy lưu ý rằng khối này có một ^~bộ chọn trước định nghĩa vị trí mới. Điều này là để đảm bảo rằng Nginx sẽ không bỏ qua các quy tắc truy cập của bạn khi nó khớp với quy tắc dành cho tệp PHP, thường được định nghĩa là một biểu thức chính quy để bắt tất cả .phpcác tệp. Trong các tệp cấu hình Nginx, các định nghĩa biểu thức chính quy có mức độ ưu tiên cao hơn các định nghĩa vị trí tiêu chuẩn. Điều này có nghĩa là nếu bạn không sử dụng ^~bộ chọn ở đầu vị trí, người dùng vẫn có thể bỏ qua lời nhắc xác thực bằng cách điều hướng đến trong trình duyệt của họ.
http://server_domain_or_ip/hiddenlink/index.php

Bộ ^~ chọn ở đầu định nghĩa vị trí yêu cầu Nginx bỏ qua các kết quả phù hợp khác khi tìm thấy kết quả phù hợp cho vị trí này. Điều này có nghĩa là bất kỳ thư mục con hoặc tệp nào bên trong sẽ được khớp với quy tắc này. Tuy nhiên, vì định nghĩa để phân tích cú pháp tệp PHP sẽ bị bỏ qua do sử dụng bộ chọn, chúng tôi sẽ cần bao gồm một khối vị trí PHP mới bên trong định nghĩa. Điều này sẽ đảm bảo các tệp PHP bên trong vị trí này được phân tích cú pháp chính xác; nếu không chúng sẽ được gửi đến trình duyệt dưới dạng nội dung tải xuống.
/hiddenlink/^~/hiddenlink

Thêm các dòng được đánh dấu sau trong locationkhối bạn vừa thêm:
/ etc / nginx / sites-available / your_domain
server {
        . . .

        location / {
                try_files $uri $uri/ =404;
        }

        location ^~ /hiddenlink/ {
                auth_basic "Admin Login";
                auth_basic_user_file /etc/nginx/pma_pass;

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                }
        }
    . . .
}
Sao chép
Nhớ thay liên kết ẩnvới đường dẫn thực tế nơi có thể tìm thấy phpMyAdmin. Bạn cũng nên kiểm tra kỹ vị trí của tệp ổ cắm PHP-FPM của mình, vị trí này sẽ khác nhau tùy thuộc vào phiên bản PHP mà bạn hiện đã cài đặt. Trong ví dụ này, chúng tôi sử dụng php7.4-fpm.sockphiên bản hợp lệ cho PHP 7.4, phiên bản được cài đặt trên Ubuntu 20.04 thông qua kho lưu trữ APT mặc định.
Lưu và đóng tệp khi bạn hoàn tất. Để kiểm tra xem tệp cấu hình có hợp lệ hay không, hãy chạy lệnh sau:
  • sudo nginx -t
Sao chép
Kết quả sau cho biết rằng cú pháp của tệp cấu hình là hợp lệ:
Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 

Để kích hoạt cổng xác thực mới, hãy tải lại Nginx:
  • sudo systemctl reload nginx
 
Sao chép
Bây giờ khi bạn truy cập URL phpMyAdmin trong trình duyệt web của mình, bạn sẽ được nhắc nhập tên người dùng và mật khẩu bạn đã thêm vào pma_passtệp: https://server_domain_or_IP/hiddenlin
pma auth gate 2004 generic

Sau khi nhập thông tin đăng nhập của mình, bạn sẽ được đưa đến trang đăng nhập phpMyAdmin tiêu chuẩn.
Lưu ý: Lời nhắc xác thực có thể không xuất hiện nếu bạn đã truy cập phpMyAdmin gần đây. Để buộc lời nhắc xuất hiện, bạn có thể phải làm mới trang, xóa bộ nhớ cache hoặc mở một phiên trình duyệt khác.

Ngoài việc cung cấp thêm một lớp bảo mật, cổng này sẽ giúp giữ cho nhật ký MySQL của bạn sạch sẽ trước các nỗ lực xác thực spam.
Bước 5 - Thiết lập quyền truy cập qua đường hầm được mã hóa
Để tăng cường bảo mật, bạn chỉ có thể khóa cài đặt phpMyAdmin của mình ở những máy chủ được ủy quyền. Bạn có thể giới hạn quyền truy cập vào phpMyAdmin bằng cách chỉ định từng máy chủ được ủy quyền trong tệp cấu hình Nginx của bạn. Bằng cách này, bất kỳ yêu cầu nào đến từ địa chỉ IP không có trong danh sách sẽ bị từ chối.
Mặc dù tính năng này một mình có thể đủ trong một số trường hợp sử dụng, nhưng nó không phải lúc nào cũng là giải pháp lâu dài tốt nhất, chủ yếu là do hầu hết mọi người không truy cập Internet từ địa chỉ IP tĩnh. Ngay sau khi nhận được địa chỉ IP mới từ nhà cung cấp internet, bạn sẽ không thể truy cập giao diện phpMyAdmin cho đến khi cập nhật tệp cấu hình Nginx bằng địa chỉ IP mới của mình.
Để có giải pháp lâu dài mạnh mẽ hơn, bạn có thể sử dụng kiểm soát truy cập dựa trên IP để tạo thiết lập trong đó người dùng sẽ chỉ có quyền truy cập vào giao diện phpMyAdmin của bạn nếu họ đang truy cập từ địa chỉ IP được ủy quyền hoặc máy chủ cục bộ thông qua  SSH . Chúng ta sẽ xem xét cách thiết lập cả hai điều khiển truy cập này trong các phần bên dưới.
Kết hợp kiểm soát truy cập dựa trên IP với SSH tunneling giúp tăng tính bảo mật đáng kể vì nó chặn hoàn toàn truy cập đến từ internet công cộng (ngoại trừ các IP được phép), ngoài ra còn cung cấp một kênh bảo mật giữa người dùng và máy chủ thông qua việc sử dụng các đường hầm được mã hóa. Thiết lập Kiểm soát truy cập dựa trên IP trên Nginx Trên Nginx, kiểm soát truy cập dựa trên IP có thể được xác định trong locationkhối tương ứng của một trang web nhất định, sử dụng các lệnh allowvà deny. Ví dụ: nếu bạn chỉ muốn cho phép các yêu cầu đến từ một máy chủ nhất định, bạn sẽ bao gồm hai dòng sau, theo thứ tự này, bên trong locationkhối liên quan cho trang web mà bạn muốn bảo vệ: allow hostname_or_IP; deny all; Bạn có thể cho phép bao nhiêu máy chủ lưu trữ tùy thích và bạn chỉ cần bao gồm một allowdòng cho mỗi máy chủ lưu trữ / IP được ủy quyền bên trong locationkhối tương ứng cho trang web bạn đang bảo vệ. Các chỉ thị sẽ được đánh giá theo thứ tự như chúng được liệt kê cho đến khi tìm thấy kết quả phù hợp hoặc yêu cầu cuối cùng bị từ chối do deny allchỉ thị.
Trong bước này, bạn sẽ định cấu hình Nginx để chỉ cho phép các yêu cầu đến từ localhost hoặc địa chỉ IP hiện tại của bạn. Đầu tiên, bạn cần biết địa chỉ IP công cộng hiện tại mà máy cục bộ của bạn đang sử dụng để kết nối với internet. Có nhiều cách khác nhau để lấy thông tin này; để đơn giản, hướng dẫn này sẽ sử dụng dịch vụ do ipinfo.io cung cấp. Bạn có thể mở URL https://ipinfo.io/iptrong trình duyệt của mình hoặc chạy lệnh sau từ máy cục bộ của bạn :
  • curl https://ipinfo.io/ip
Sao chép
Lệnh này sẽ trả về một địa chỉ IP, như sau: Output 203.0.113.0 Giá trị được trả về bởi lệnh này là địa chỉ IP công cộng hiện tại của máy cục bộ của bạn. Bạn sẽ định cấu hình locationkhối của phpMyAdmin để chỉ cho phép các yêu cầu đến từ IP đó hoặc cục bộ từ chính máy chủ.
Để thực hiện việc này, một lần nữa hãy mở tệp cấu hình Nginx của trang web của bạn bằng trình soạn thảo văn bản ưa thích của bạn:
  • sudo nano /etc/nginx/sites-available/your_domain
Sao chép
Bởi vì bạn đã có quy tắc truy cập trong cấu hình hiện tại của mình, bạn cần kết hợp nó với kiểm soát truy cập dựa trên IP bằng cách sử dụng lệnh satisfy all. Bằng cách này, bạn có thể giữ lời nhắc xác thực HTTP hiện tại để tăng cường bảo mật.
Thêm các dòng được đánh dấu sau vào locationkhối cấu hình phpMyAdmin của bạn :
/ etc / nginx / sites-available / your_domain
server {
        . . .

        location ^~ /hiddenlink/ {
                satisfy all; #requires both conditions

                allow 203.0.113.0; #allow your IP
                allow 127.0.0.1; #allow localhost via SSH tunnels
                deny all; #deny all other sources

                auth_basic "Admin Login";
                auth_basic_user_file /etc/nginx/pma_pass;

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                }
        }

        . . .
}
Sao chép
Đây là cách tệp sẽ trông như thế nào sau khi thêm các chỉ thị mới này. Hãy nhớ thay thế hiddenlinkbằng đường dẫn thực tế nơi có thể tìm thấy phpMyAdmin và địa chỉ IP được đánh dấu bằng địa chỉ IP công cộng hiện tại của máy cục bộ của bạn:
/ etc / nginx / sites-available / your_domain
server {
        . . .

        location ^~ /hiddenlink/ {
                satisfy all; #requires both conditions

                allow 203.0.113.0; #allow your IP
                allow 127.0.0.1; #allow localhost via SSH tunnels
                deny all; #deny all other sources

                auth_basic "Admin Login";
                auth_basic_user_file /etc/nginx/pma_pass;

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                }
        }

        . . .
}
Sao chép
Lưu và đóng tệp khi bạn hoàn tất. Để kiểm tra xem tệp cấu hình có hợp lệ không, bạn có thể chạy:
  • sudo nginx -t
Sao chép
Đầu ra sau đây được mong đợi:
Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

Bây giờ tải lại máy chủ web để các thay đổi có hiệu lực: div class="context">
  • sudo systemctl reload nginx
 
Sao chép
Bởi vì địa chỉ IP của bạn được liệt kê rõ ràng là máy chủ được ủy quyền, quyền truy cập của bạn sẽ không bị ảnh hưởng. Tuy nhiên, bất kỳ ai khác đang cố gắng truy cập cài đặt phpMyAdmin của bạn bây giờ sẽ gặp 403 Forbiddenlỗi: https://server_domain_or_IP/hiddenlink
nginx 1 18 403
Phần phụ tiếp theo của hướng dẫn này sẽ cung cấp chi tiết về cách sử dụng đường hầm SSH để truy cập vào máy chủ web thông qua các yêu cầu cục bộ. Bằng cách này, bạn vẫn có thể truy cập giao diện của phpMyAdmin ngay cả khi địa chỉ IP của bạn thay đổi.
Truy cập phpMyAdmin thông qua SSH được mã hóa
SSH hoạt động như một cách chuyển hướng lưu lượng mạng thông qua các kênh được mã hóa. Bằng cách chạy một sshlệnh tương tự như những gì bạn sẽ sử dụng để đăng nhập vào một máy chủ, bạn có thể tạo một “đường hầm” an toàn giữa máy cục bộ của bạn và máy chủ đó. Sau khi thiết lập đường hầm, tất cả lưu lượng truy cập vào một cổng cục bộ nhất định có thể được chuyển hướng qua đường hầm được mã hóa, sử dụng máy chủ từ xa làm proxy trước khi truy cập internet. Điều này tương tự như những gì xảy ra khi bạn sử dụng mạng riêng ảo (VPN) , nhưng đường hầm SSH thường yêu cầu ít cấu hình hơn để thiết lập.
Bạn có thể sử dụng đường hầm SSH để ủy quyền các yêu cầu của mình tới máy chủ web từ xa đang chạy phpMyAdmin. Bằng cách tạo một đường hầm giữa máy cục bộ của bạn và máy chủ nơi phpMyAdmin được cài đặt, bạn có thể chuyển hướng các yêu cầu cục bộ đến máy chủ web từ xa. Quan trọng hơn, lưu lượng truy cập sẽ được mã hóa và các yêu cầu sẽ đến được Nginx như thể chúng đến từ localhost . Bằng cách này, bất kể bạn đang kết nối từ địa chỉ IP nào, bạn sẽ có thể truy cập an toàn vào giao diện của phpMyAdmin.
Vì lưu lượng giữa máy cục bộ của bạn và máy chủ web từ xa sẽ được mã hóa, đây là một giải pháp thay thế an toàn cho các trường hợp bạn không thể cài đặt chứng chỉ SSL / TLS trên máy chủ web chạy phpMyAdmin.
Từ máy cục bộ của bạn , hãy chạy lệnh này bất cứ khi nào bạn cần truy cập vào phpMyAdmin:​​
ssh user@server_domain_or_IP -L 8000:localhost:80 -L 8443:localhost:443 -N
Sao chép
Hãy xem xét từng phần của lệnh:
  • người dùng : hồ sơ người dùng Ubuntu để kết nối trên máy chủ nơi phpMyAdmin đang chạy
  • server_domain_or_IP : Máy chủ SSH nơi phpMyAdmin đang chạy
  • -L 8000: localhost: 80 chuyển hướng lưu lượng HTTP trên cổng8000
  • -L 8443: localhost: 443 chuyển hướng lưu lượng HTTPS trên cổng8443
  • -N : ngăn chặn việc thực hiện các lệnh từ xa
 
​​​​​​​Lưu ý: Lệnh này sẽ chặn thiết bị đầu cuối cho đến khi bạn ngắt nó bằng cách nhấn CTRL+C, trong trường hợp đó, lệnh này sẽ kết thúc kết nối SSH và dừng chuyển hướng gói. Nếu bạn muốn chạy lệnh này ở chế độ nền, bạn có thể bao gồm tùy chọn SSH -f.
Bây giờ, hãy truy cập trình duyệt của bạn và thay thế server_domain_or_IPvới , đâu là cho HTTP hoặc cho HTTPS:localhost:PORTPORT80008443 http://localhost:8000/hiddenlink https://localhost:8443/hiddenlink
login
 
Lưu ý: Nếu bạn đang truy cập phpMyAdmin qua HTTPS, bạn có thể nhận được thông báo cảnh báo đặt câu hỏi về tính bảo mật của chứng chỉ SSL. Điều này xảy ra do tên miền bạn đang sử dụng (localhost) không khớp với địa chỉ đã đăng ký trong chứng chỉ (nghĩa là miền nơi phpMyAdmin thực sự đang được phân phát). Hãy yên tâm rằng nó là an toàn để tiến hành.

Ngoài ra, hãy lưu ý rằng bạn có thể cần phải làm mới phiên trình duyệt của mình hoặc kiểm tra lại URL nếu bạn đã thiết lập bất kỳ chuyển hướng nào trong tệp cấu hình Nginx của mình.

Tất cả các yêu cầu trên localhost:8000(HTTP) và localhost:8443(HTTPS) hiện đang được chuyển hướng qua một đường hầm an toàn đến ứng dụng phpMyAdmin từ xa của bạn. Bạn không chỉ tăng cường bảo mật bằng cách vô hiệu hóa quyền truy cập công khai vào phpMyAdmin của mình, bạn còn bảo vệ tất cả lưu lượng truy cập giữa máy tính cục bộ và máy chủ từ xa bằng cách sử dụng một đường hầm được mã hóa để gửi và nhận dữ liệu.
Nếu bạn muốn thực thi việc sử dụng đường hầm SSH cho bất kỳ ai muốn truy cập vào giao diện phpMyAdmin của bạn (bao gồm cả bạn), bạn có thể làm điều đó bằng cách xóa bất kỳ IP được ủy quyền nào khác khỏi tệp cấu hình Nginx, để lại 127.0.0.1là máy chủ duy nhất được phép truy cập vị trí đó. Vì không ai có thể thực hiện yêu cầu trực tiếp đến phpMyAdmin, nên an toàn khi xóa xác thực HTTP để đơn giản hóa thiết lập của bạn. Đây là cách tệp cấu hình của bạn sẽ trông như thế nào trong trường hợp như vậy:
/ etc / nginx / sites-available / your_domain
server {
        . . .

        location ^~ /hiddenlink/ {
                allow 127.0.0.1; #allow localhost via SSH tunnels
                deny all; #deny all other sources

                location ~ \.php$ {
                        include snippets/fastcgi-php.conf;
                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
                }
        }

        . . .
}
Sao chép
Sau khi bạn tải lại cấu hình của Nginx sudo systemctl reload nginx, cài đặt phpMyAdmin của bạn sẽ bị khóa và người dùng sẽ được yêu cầu sử dụng đường hầm SSH để truy cập giao diện của phpMyAdmin thông qua các yêu cầu được chuyển hướng.
Phần kết luận
​​​​​​​
Bằng cách làm theo hướng dẫn này, bạn đã cài đặt phpMyAdmin trên Ubuntu 20.04 chạy Nginx làm máy chủ web. Bạn cũng đã tìm hiểu về một số phương pháp nâng cao để bảo mật cài đặt phpMyAdmin trên Ubuntu, chẳng hạn như tắt đăng nhập gốc , tạo thêm một lớp xác thực và sử dụng đường hầm SSH để truy cập cài đặt phpMyAdmin chỉ thông qua yêu cầu cục bộ.
Sau khi hoàn thành hướng dẫn này, bạn có thể quản lý cơ sở dữ liệu MySQL của mình từ một giao diện web an toàn hợp lý. Giao diện người dùng này thể hiện hầu hết các chức năng có sẵn thông qua dòng lệnh MySQL. Bạn có thể duyệt qua cơ sở dữ liệu và lược đồ, thực thi các truy vấn cũng như tạo các cấu trúc và tập dữ liệu mới.
Nếu bạn muốn tìm hiểu thêm về cách làm việc với MySQL, chúng tôi khuyến khích bạn xem phần giới thiệu này về các truy vấn trong MySQL . Để hiểu sâu hơn về SQL ngoài các truy vấn, bạn cũng có thể quan tâm đến loạt bài hướng dẫn Cách sử dụng SQL của chúng tôi .
 

Tác giả bài viết: Mr. King

Tổng số điểm của bài viết là: 5 trong 1 đánh giá

Xếp hạng: 5 - 1 phiếu bầu
Click để đánh giá bài viết

Phần mềm - Tiện ích

Code - Website

Claim free virtual currency

The current Bitcoin (BTC) token is:
Get it for free right HERE
The current Ethereum (ETH) token is:
Get it for free right HERE
The current Litecoin (LTC) token is:
Get it for free right HERE
Top
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây