如何在 Ubuntu 20.04 服务器上使用 Nginx 安装并保护 phpMyAdmin

介绍

在开发网站或 Web 应用程序时,许多用户需要数据库系统的功能,例如 MySQL

phpMyAdmin被创建以允许用户通过直观的Web接口与MySQL进行交互,并与PHP开发环境一起运行。

<$>[note] 注: phpMyAdmin 运行在数据库服务器上,处理数据库凭证,并允许用户在数据库上执行 SQL 陈述. 加上它是一个广泛部署的 PHP 应用程序,这意味着 phpMyAdmin 经常受到攻击的攻击。

除了安装应用程序外,本教程还将介绍您可以采取的若干措施来加强您的phpMyAdmin安装的安全性,并将详细解释每个措施,以便您能够做出明智的决定并保护您的系统。

前提条件

为了完成本指南,您将需要:

  • 运行Ubuntu 20.04 的服务器 这个服务器应该有一个非根用户,具有管理权限和与ufw配置的防火墙。 要设置此设置,请遵循我们的 Ubuntu 20.04 的初始服务器设置指南
  • 在 Ubuntu 20.04 服务器上安装了 LEMP 堆栈 (Linux, Nginx, MySQL 和 PHP)。

此外,由于 phpMyAdmin 使用 MySQL 身份验证来处理身份验证,我们强烈建议您安装 SSL/TLS 证书,以便在服务器和客户端之间实现加密流量。

<$>[警告] 警告: 如果您在服务器上没有安装SSL/TLS证书,但仍然想要继续,请考虑通过SSH隧道执行访问,如本指南的第5步(https://andsky.com/tech/tutorials/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-20-04-server# step-5-%E2%80%94-setting-up-access-via-encrypted-tunnels)所解释。

一旦您有这些前提条件,您可以开始遵循本指南的第一步。

第1步:安装phpMyAdmin

您可以使用 APT 安装 phpMyAdmin 来从默认 Ubuntu 存储库下载 phpmyadmin 包。

首先,更新服务器的包索引:

1sudo apt update

现在你可以通过运行以下命令来安装phpMyAdmin:

1sudo apt install phpmyadmin

在安装过程中,您将被要求选择一个 Web 服务器(Apache 或 Lighttpd)来配置。 phpMyAdmin 可以自动进行一系列配置更改,以确保在安装时与任何一个 Web 服务器正常工作。

接下来,您将被提示是否使用dbconfig-common来配置应用程序数据库. 选择 . 这将为 phpMyAdmin 设置内部数据库和管理用户。 您将被要求为 ** phpmyadmin** MySQL 用户定义一个新的密码,但因为这不是一个密码,您需要记住,您可以让它空白,让 phpMyAdmin 随机创建一个密码。

<$>[note] Note :假设您安装了MySQL,通过遵循前提LEMP堆栈教程的第2步(https://andsky.com/tech/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04# step-2-%E2%80%94-installing-mysql),您可能已经决定启用验证密码插件。

phpMyAdmin password validation error

要解决此问题,请选择 abort 选项来停止安装过程,然后打开您的 MySQL 提示:

1sudo mysql

或者,如果您为 root MySQL 用户启用了密码身份验证,请运行此命令,然后在提示时输入您的密码:

1mysql -u root -p

从MySQL提示,运行以下命令来禁用验证密码组件. 请注意,这实际上不会卸载它,但只会阻止该组件在您的MySQL服务器上加载:

1UNINSTALL COMPONENT "file://component_validate_password";

接下来,您可以关闭 MySQL 客户端:

1exit

然后尝试重新安装phpmyadmin包,它将按预期工作:

1sudo apt install phpmyadmin

一旦 phpMyAdmin 安装,您可以用 sudo mysqlmysql -u root -p 再次打开 MySQL 提示,然后运行以下命令来重新启用验证密码组件:

1INSTALL COMPONENT "file://component_validate_password";

美元

一旦apt install命令完成,phpMyAdmin将被完全安装,但是,为了让 Nginx 网页服务器能够正确地找到和服务 phpMyAdmin 文件,您需要从安装文件中创建一个符号链接到 Nginx 的文档根目录。如果您遵循了 LEMP 堆栈教程,您的 Nginx 安装的文档根是 /var/www/your_domain/

1sudo ln -s /usr/share/phpmyadmin /var/www/your_domain/phpmyadmin

您的 phpMyAdmin 安装已启动. 要访问接口,请前往您的服务器的域名或公共 IP 地址,然后在您的 Web 浏览器中使用 /phpmyadmin:

1https://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

正如前面提到的,phpMyAdmin使用MySQL凭证来处理身份验证,这意味着要登录phpMyAdmin,您会使用相同的用户名和密码,您通常会使用命令行或API连接到数据库。

<$>[注] 注: 作为 root 的 MySQL 用户登录 phpMyAdmin 是不可鼓励的,因为它代表了重大安全风险。

但是,通过安装 Web 接口,您已经将您的 MySQL 数据库服务器暴露在外部世界中. 由于 phpMyAdmin 的普及,以及它提供大量敏感数据的潜力,这样的安装是攻击的常见目标。 在本指南的以下部分,我们将讨论几个不同的方法,您可以让您的 phpMyAdmin 安装更安全。

步骤 2 — 更改 phpMyAdmin 的默认位置

一个方法来保护你的phpMyAdmin安装是通过使它更难找到。机器人会扫描常见的路径,如/phpmyadmin,/pma,/admin,/mysql和其他类似的名称。

在之前的步骤中,您在您的 Nginx 网页文档根中创建了一个符号链接,指向 /usr/share/phpmyadmin,实际 phpMyAdmin 应用程序文件所在的地方。

要做到这一点,请导航到 Nginx 文档根目录:

1cd /var/www/your_domain/

然后运行以下ls命令列出文档根目录中的文件,以便更好地了解您将进行的更改。该命令包括-l选项,该命令告诉命令使用长列表格式。

1ls -l

您的输出将包含如下的一行:

1[secondary_label Output]
2. . .
3lrwxrwxrwx 1 root root 22 Jan 15 21:09 phpmyadmin -> /usr/share/phpmyadmin/
4. . .

此行表示您在此目录中有一个名为phpmyadmin的符号链接. 您可以将这个链接的名称更改为您想要的任何东西,而这样做将反过来改变您可以访问phpMyAdmin的URL。

本指南将命名端点 /hiddenlink,并在整个示例中使用该名称,但您应该 选择替代名称

mv命令重命名符号链接:

1sudo mv phpmyadmin hiddenlink

运行此命令后,再次运行ls -l命令,以确认符号链接被更名为正确:

1ls -l

这次,输出将表明象征链接的列表已更新以其新名称:

1[secondary_label Output]
2total 8
3. . .
4lrwxrwxrwx 1 root root 22 Jan 15 21:09 hiddenlink -> /usr/share/phpmyadmin/
5. . .

现在,当您访问您以前使用的访问phpMyAdmin的URL时,您将收到一个404错误:

1https://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

相反,您可以在您刚刚配置的新 URL 上访问您的 phpMyAdmin 界面:

1https://server_domain_or_IP/hiddenlink

phpMyAdmin login screen

通过隐藏phpMyAdmin在服务器上的真实位置,您可以保护其界面免受自动扫描和手动暴力尝试。

步骤 3 – 禁用 root 登录

在MySQL上,以及在正常的Linux系统中, root 帐户是一个特殊的管理帐户,可以无限制地访问系统。 除了是一种特权帐户外,它也是一个已知的登录名称,这使得它成为暴力攻击的明显目标。 为了最大限度地降低这些风险,此步骤将描述如何配置phpMyAdmin来拒绝来自 ** root** MySQL用户的任何登录尝试。

由于您选择了「dbconfig-common」来配置和存储 phpMyAdmin 设置,因此应用程序的默认配置目前存储在您的 MySQL 数据库中。您需要在 phpMyAdmin 的配置目录中创建一个新的「config.inc.php」文件来定义您的自定义设置。即使 phpMyAdmin 的 PHP 脚本位于 /usr/share/phpmyadmin 目录中,应用程序的配置文件位于 /etc/phpmyadmin

/etc/phpmyadmin/conf.d目录中创建一个新的自定义设置文件,并命名它为pma_secure.php:

1sudo nano /etc/phpmyadmin/conf.d/pma_secure.php

然后将以下内容添加到新文件中:

 1[label /etc/phpmyadmin/conf.d/pma_secure.php]
 2<?php
 3
 4# PhpMyAdmin Settings
 5# This should be set to a random string of at least 32 chars
 6$cfg['blowfish_secret'] = 'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS';
 7
 8$i=0;
 9$i++;
10
11$cfg['Servers'][$i]['auth_type'] = 'cookie';
12$cfg['Servers'][$i]['AllowNoPassword'] = false;
13$cfg['Servers'][$i]['AllowRoot'] = false;
14
15?>

通过包括AllowNoPasswordAllowRoot指令,并将两者设置为false,此配置文件将对 root MySQL 用户的无密码登录和登录进行禁用。

请注意,auth_type设置将phpMyAdmin配置为使用cookie身份验证方法。phpMyAdmin默认情况下使用cookie身份验证方法,允许您登录phpMyAdmin作为任何有效的MySQL用户,使用 cookies

历史上,phpMyAdmin 使用了 Blowfish 算法为此目的,但它仍然在寻找一个名为 'blowfish_secret' 的指令,指向 AES 算法内部使用passphrase. 这不是一个你需要记住的passphrase,所以任何包含 32 个随机字符的字符串都会在这里工作。

更新读取 `'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS' 的行到包含至少 32 个字符的随机字符串。

<$>[注] 注: 如果您在这里输入的密码短于32个字符,则会导致加密的cookie不那么安全。

要生成一个真正的随机字符串,你可以安装和使用pwgen程序与APT:

1sudo apt install pwgen

默认情况下,pwgen会创建易于发音的,但不那么安全的密码,但是,如下命令所示,你可以创建一个完全随机的,难以记忆的密码,请注意这个命令的最后两个参数:32指示pwgen应生成密码字符串的长度;1指示pwgen应该生成多少字符串:

1pwgen -s 32 1

复制此命令的结果输出,并将其添加到 pma_secure.php 文件中,取代 'CHANGE_THIS_TO_A_STRING_OF_32_RANDOM_CHARACTERS'

如果您使用了nano,请按CTRL + X,Y来确认更改,然后按ENTER返回 bash 提示。

如果您现在重新加载登录页面并尝试作为 root 登录,您将收到一个 ** Access denied!** 错误:

access denied

root MySQL 用户登录现在被禁止在您的 phpMyAdmin 安装. 此安全措施将阻止 brute-force 脚本试图猜测您的服务器上的 ** root** 数据库用户的密码. 此外,它将强制使用不太特权的 MySQL 帐户访问 phpMyAdmin 的 Web 界面,这本身是一个重要的安全实践。

步骤 4 – 创建身份验证网关

隐藏您的 phpMyAdmin 安装在一个不寻常的位置可能会阻止一些自动机器人扫描网络,但它对目标攻击是无用的。为了更好地保护受限制访问的 Web 应用程序,通常更有效地阻止攻击者在他们甚至可以到达应用程序之前。

在phpMyAdmin的具体情况下,保持登录接口锁定更为重要. 通过让它向世界开放,您正在为攻击者提供一项粗暴的平台,以便他们可以猜测您的数据库凭据。

此步骤描述了如何将额外的身份验证层添加到您的 phpMyAdmin 安装中,以增加您的 MySQL 数据库的安全性。 包括 Nginx 在内的大多数 Web 服务器都提供此功能。 完成此步骤后,任何试图访问您的 phpMyAdmin 安装的登录屏幕的用户将首先需要通过输入有效的用户名和密码来通过 HTTP 身份验证提示。

要设置此设置,您首先需要创建一个密码文件来存储身份验证凭证。 Nginx 要求使用 crypt() 函数加密密码。

要创建一个加密的密码,键入:

1openssl passwd

您将被要求输入并确认您想要使用的密码,该实用程序将显示密码的加密版本,它将看起来像这样:

1[secondary_label Output]
29YHV.p60.Cg6I

复制此值,因为您需要将其包含在您即将创建的身份验证文件中。

现在,创建一个身份验证文件. 为本指南的目的,我们将这个文件称为pma_pass,并将其放入 Nginx 配置目录:

1sudo nano /etc/nginx/pma_pass

在此文件中,指定您想要使用的用户名,然后是密码(:),然后是您从openssl passwd实用程序获得的密码的加密版本。

在这个例子中,用户被命名为sammy,但您可以选择您想要的用户名,这不需要是您 Ubuntu 服务器上的现有用户配置文件或 MySQL 用户的名称。

在添加您选择的用户名和您先前复制的加密密码后,文件将看起来像这样:

1[label /etc/nginx/pma_pass]
2sammy:9YHV.p60.Cg6I

保存并关闭文件完成后。

接下来,您需要更改 Nginx 配置文件。 再次,本指南遵循 前提 LEMP 教程中规定的惯例,因此下面的示例中使用的配置文件是 /etc/nginx/sites-available/your_domain. 请确保您使用当前托管您的 phpMyAdmin 安装位置的 Web 位置的相关 Nginx 配置文件。

在您喜爱的文本编辑器中打开您的 Nginx 配置文件以开始:

1sudo nano /etc/nginx/sites-available/your_domain

你需要创建一个 位置部分在这个位置/块下,以匹配phpMyAdmin在服务器上的当前路径。

请记住,在本指南的 步骤 2中,您通过重新命名符号链接(‘hiddenlink’在我们的示例中)来更改 phpMyAdmin 的位置名称,在这里,您需要输入您为此符号链接使用的名称。

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4
 5        location / {
 6                try_files $uri $uri/ =404;
 7        }
 8
 9        location ^~ /hiddenlink {
10
11        }
12
13        . . .
14}

在此区块中,设置两个指令: auth_basic,该指令定义了在身份验证提示中显示的消息,以及 auth_basic_user_file,指向您刚刚创建的身份验证文件。

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4        location / {
 5                try_files $uri $uri/ =404;
 6        }
 7
 8        location ^~ /hiddenlink {
 9                auth_basic "Admin Login";
10                auth_basic_user_file /etc/nginx/pma_pass;
11        }
12        . . .
13}

最后,请注意,这个区块在新定义位置之前有一个^~选择器。这就是为了确保 Nginx在匹配 PHP 文件的规则时不会绕过您的访问规则,这些规则通常被定义为 常规表达式以捕捉所有.php 文件。在 Nginx 配置文件中,常规表达式定义比标准位置定义更有优势。这意味着如果我们在位置开始时不使用^~选择器,用户仍然可以通过浏览器中浏览到http://server_domain_or_ip/hiddenlink/index.php来绕过身份验证提示。

位置定义开始时的^~选择器告诉 Nginx在找到这个位置的匹配时忽略其他匹配,这意味着在/hiddenlink/内的任何子目录或文件将与这个规则匹配。然而,因为通过使用^~选择器来分析PHP文件的定义将被忽略,我们需要在/hiddenlink定义中包含一个新的PHP位置块。

在您刚刚添加的位置块中添加以下突出的行:

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4
 5        location / {
 6                try_files $uri $uri/ =404;
 7        }
 8
 9        location ^~ /hiddenlink/ {
10                auth_basic "Admin Login";
11                auth_basic_user_file /etc/nginx/pma_pass;
12
13                location ~ \.php$ {
14                        include snippets/fastcgi-php.conf;
15                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
16                }
17        }
18    . . .
19}

请记住用实际的路径来替换 hiddenlink 以找到 phpMyAdmin. 你还应该双重检查你的 PHP-FPM 接口文件的位置,这将取决于你目前所安装的 PHP 版本。

完成后保存并关闭文件. 若要检查配置文件是否有效,请执行以下命令:

1sudo nginx -t

以下输出表示配置文件的语法是有效的:

1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful

要激活新的身份验证门,重新加载 Nginx:

1sudo systemctl reload nginx

现在,当您访问您的 Web 浏览器中的 phpMyAdmin URL,您将被提示为您添加到 pma_pass 文件的用户名和密码:

1https://server_domain_or_IP/hiddenlink

Nginx authentication popup

一旦您输入您的身份证,您将被带到标准的phpMyAdmin登录页面。

<$>[注] 注: 如果您最近访问过 phpMyAdmin,则可能不会出现身份验证提示,要强迫提示出现,您可能需要刷新页面、清除缓存或打开不同的浏览器会话。

除了提供额外的安全层外,这个网关还将有助于保持您的MySQL日志清除垃圾邮件身份验证尝试。

步骤 5 – 通过加密隧道设置访问

为了提高安全性,您可以将您的 phpMyAdmin 安装锁定到授权的主机上,您可以通过在 Nginx 配置文件中指定授权的主机来限制访问 phpMyAdmin。

虽然这项功能本身在某些用例中可能足够,但它并不总是最好的长期解决方案,主要是因为大多数人没有从静态IP地址访问互联网。

对于一个更强大的长期解决方案,您可以使用基于IP的访问控制来创建一个设置,其中用户只会访问您的phpMyAdmin界面,如果他们通过SSH隧道通过 授权的IP地址 或 ** 本地托管** 访问。

将基于IP的访问控制与SSH隧道相结合,大大提高了安全性,因为它完全阻止了来自公共互联网的访问(除了授权的IP),并通过使用加密隧道提供用户和服务器之间的安全通道。

在 Nginx 上设置基于 IP 的访问控制

在 Nginx 上,基于 IP 的访问控制可以在给定网站的相应位置块中定义,使用允许拒绝指令,例如,如果您只希望允许来自给定主机的请求,则将以下两行列入您想要保护的网站的相关位置块中:

1allow hostname_or_IP;
2deny all;

您可以允许尽可能多的主机,您只需要在您保护的网站的相应位置块中为每个授权的主机/IP列出一个允许行,指令将以列出的相同顺序进行评估,直到找到匹配或由于拒绝所有指令最终拒绝请求。

在此步骤中,您将配置 Nginx 以仅允许来自 localhost 或您当前的 IP 地址的请求。 首先,您需要知道您的本地计算机正在使用的当前公共 IP 地址来连接到互联网。 有几种方法可以获取这些信息;为了方便,本指南将使用由 ipinfo.io提供的服务。 您可以在浏览器中打开 URL https://ipinfo.io/ip或从您的本地计算机** 运行以下命令:

1[environment local]
2curl https://ipinfo.io/ip

这个命令会返回一个IP地址,如下:

1[environment local]
2[secondary_label Output]
3203.0.113.0

此命令返回的值是您本地机器的当前公共 IP 地址. 您将配置 phpMyAdmin 的位置块,仅允许来自该 IP 或本地服务器的请求。

要做到这一点,请使用您喜爱的文本编辑器再次打开网站的 Nginx 配置文件:

1sudo nano /etc/nginx/sites-available/your_domain

由于您已经在当前配置中有访问规则,您需要将其与基于 IP 的访问控制结合使用满足所有人指令。

添加以下突出的行到您的 phpMyAdmin 配置的位置块:

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4
 5        location ^~ /hiddenlink/ {
 6                satisfy all; #requires both conditions
 7
 8                allow 203.0.113.0; #allow your IP
 9                allow 127.0.0.1; #allow localhost via SSH tunnels
10                deny all; #deny all other sources
11
12                auth_basic "Admin Login";
13                auth_basic_user_file /etc/nginx/pma_pass;
14
15                location ~ \.php$ {
16                        include snippets/fastcgi-php.conf;
17                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
18                }
19        }
20
21        . . .
22}

添加这些新指令后,文件将看起来像这样: 请记住,用实际的路径替换hiddenlink,其中可以找到 phpMyAdmin,并将突出的 IP 地址替换为本地机器的当前公共 IP 地址:

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4
 5        location ^~ /hiddenlink/ {
 6                satisfy all; #requires both conditions
 7
 8                allow 203.0.113.0; #allow your IP
 9                allow 127.0.0.1; #allow localhost via SSH tunnels
10                deny all; #deny all other sources
11
12                auth_basic "Admin Login";
13                auth_basic_user_file /etc/nginx/pma_pass;
14
15                location ~ \.php$ {
16                        include snippets/fastcgi-php.conf;
17                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
18                }
19        }
20
21        . . .
22}

完成保存并关闭文件. 若要检查配置文件是否有效,您可以运行:

1sudo nginx -t

预计产出如下:

1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful

现在重新加载 Web 服务器,以便更改生效:

1sudo systemctl reload nginx

由于您的 IP 地址明确列为授权主机,所以您的访问不应该受到干扰. 然而,任何其他试图访问您的 phpMyAdmin 安装的人现在都会收到一个403 禁止错误:

1https://server_domain_or_IP/hiddenlink

Nginx 403 error

本指南的下一个子部分将提供有关如何使用SSH隧道来通过本地请求访问Web服务器的详细信息,这样,即使您的IP地址发生更改,您仍然可以访问phpMyAdmin的界面。

通过加密隧道访问phpMyAdmin

SSH隧道是通过加密渠道重定向网络流量的一种方式。通过运行类似于您在登录服务器时使用的ssh命令,您可以在本地机器和该服务器之间创建一个安全的隧道。建立隧道后,可以通过加密隧道重定向给定本地端口的所有流量,使用远程服务器作为代理服务器,然后连接到互联网。这类似于使用虚拟私人网络(VPN)时发生的事情(https://andsky.com/tech/tutorials/what-is-a-vpn),但SSH隧道通常需要更少的配置来设置。

您可以使用 SSH 隧道来向远程 Web 服务器代理您的请求运行 phpMyAdmin. 通过在本地机器和安装 phpMyAdmin 的服务器之间创建隧道,您可以将本地请求重定向到远程 Web 服务器。

由于您的本地机器和远程 Web 服务器之间的流量将被加密,这对于您无法在运行 phpMyAdmin 的 Web 服务器上安装 SSL/TLS 证书的情况来说是一个安全的替代方案。

从本地计算机 运行此命令,当您需要访问phpMyAdmin时:

1[environment local]
2ssh user@server_domain_or_IP -L 8000:localhost:80 -L 8443:localhost:443 -N

让我们来看看命令的每个部分:

  • 用户 :在phpMyAdmin运行
  • server_domain_or_IP 的服务器上要连接的Ubuntu用户配置文件:在phpMyAdmin运行
  • -L 8000:localhost:80 的SSH主机将HTTP流量重定向到端口 8000
  • -L 8443:localhost:443 将HTTPS流量重定向到端口 8443
  • -N :防止远程命令 执行

<$>[注] 注: 此命令将阻止终端,直到您通过按CTRL+C来中断它,在这种情况下它将终止SSH连接并阻止包重定向。

现在,转到您的浏览器并将 server_domain_or_IP 替换为localhost:PORT,其中PORT为 HTTP 或 HTTPS 中的80008443:

1http://localhost:8000/hiddenlink
1https://localhost:8443/hiddenlink

phpMyAdmin login screen

<$>[note] 注: 如果您通过 HTTPS 访问 phpMyAdmin,您可能会收到一个警告消息,质疑 SSL 证书的安全性。

此外,请注意,如果您在 Nginx 配置文件中设置了任何重定向,您可能需要更新浏览器会话或双重检查 URL。

所有请求在localhost:8000 (HTTP) 和localhost:8443 (HTTPS) 现在正在通过安全隧道重定向到您的远程 phpMyAdmin 应用程序. 您不仅通过禁用公共访问您的 phpMyAdmin 来增加安全性,还通过使用加密隧道来发送和接收数据来保护本地计算机和远程服务器之间的所有流量。

如果你想强制使用SSH隧道,谁想要访问你的phpMyAdmin界面(包括你),你可以这样做,删除任何其他授权的IP从 Nginx配置文件,留下‘127.0.0.1’作为唯一允许访问这个位置的主机。

 1[label /etc/nginx/sites-available/your_domain]
 2server {
 3        . . .
 4
 5        location ^~ /hiddenlink/ {      
 6                allow 127.0.0.1; #allow localhost via SSH tunnels
 7                deny all; #deny all other sources
 8
 9                location ~ \.php$ {
10                        include snippets/fastcgi-php.conf;
11                        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
12                }
13        }
14
15        . . .
16}

一旦您使用sudo systemctl reload nginx重新加载 Nginx 配置,您的 phpMyAdmin 安装将被锁定,用户将被要求**使用 SSH 隧道以通过重定向请求访问 phpMyAdmin 界面。

结论

通过遵循本教程,您在 Ubuntu 20.04 上安装了 phpMyAdmin 作为 Web 服务器运行 Nginx. 您还了解了几种先进的方法来保护 Ubuntu 上的 phpMyAdmin 安装,例如禁用 root 登录,创建一个额外的身份验证层,并使用 SSH 隧道访问 phpMyAdmin 安装仅通过本地请求。

完成本教程后,您可以从合理安全的 Web 界面管理您的 MySQL 数据库. 此用户界面揭示了通过 MySQL 命令行可用的大部分功能. 您可以浏览数据库和方案,执行查询,并创建新的数据集和结构。

如果您想了解更多关于使用MySQL的工作,我们鼓励您查看此 介绍MySQL中的查询

Published At
Categories with 技术
comments powered by Disqus