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

2023-11-17

介绍

很大一部分网站和应用程序都需要 MySQL 等关系数据库管理系统。然而,并非所有用户都愿意从命令行管理数据。

为了解决这个问题,创建了一个名为 phpMyAdmin 的项目,以提供基于 Web 的管理界面形式的替代方案。在本指南中,我们将演示如何在 Ubuntu 14.04 服务器上安装和保护 phpMyAdmin 配置。我们将在 Nginx Web 服务器之上构建此设置,该服务器具有良好的性能配置文件,并且可以比其他一些 Web 服务器更好地处理重负载。

先决条件

在开始之前,有一些要求需要解决。

为了确保您有一个坚实的基础来构建这个系统,您应该运行我们的Ubuntu 14.04 初始服务器设置指南。除其他事项外,这将引导您设置非 root 用户sudo访问管理命令。

为了开始本指南,必须满足的第二个先决条件是在 Ubuntu 14.04 服务器上安装 LEMP(Linux、Nginx、MySQL 和 PHP)堆栈。这是我们将用来服务 phpMyAdmin 界面的平台(MySQL 也是我们希望管理的数据库管理软件)。如果您的服务器上尚未安装 LEMP,请按照我们的教程进行操作在 Ubuntu 14.04 上安装 LEMP.

当您的服务器在遵循这些指南后处于正常运行状态时,您可以继续本页的其余部分。

第一步 — 安装 phpMyAdmin

LEMP 平台已经就位后,我们可以立即开始安装 phpMyAdmin 软件。这在 Ubuntu 的默认存储库中可用,因此安装过程很简单。

首先,更新服务器的本地包索引,以确保它具有一组对可用包的新引用。然后,我们可以使用apt用于从存储库中下载软件并将其安装到我们的系统上的打包工具:

sudo apt-get update
sudo apt-get install phpmyadmin

在安装过程中,系统会提示您输入一些信息。它会询问您希望软件自动配置哪个网络服务器。由于我们使用的 Web 服务器 Nginx 不是可用选项之一,因此您只需按 TAB 键即可绕过此提示。

下一个提示将询问您是否愿意dbconfig-common配置数据库供 phpmyadmin 使用。选择“是”继续。

您需要输入在 MySQL 安装期间配置的数据库管理密码才能允许这些更改。之后,系统会要求您选择并确认新数据库的密码,该数据库将保存 phpMyAdmin 自己的数据。

安装现在将完成。为了让 Nginx Web 服务器正确查找并提供 phpMyAdmin 文件,我们只需输入以下命令创建从安装文件到 Nginx 文档根目录的符号链接:

sudo ln -s /usr/share/phpmyadmin /usr/share/nginx/html

我们需要解决的最后一个问题是启用mcryptPHP 模块,phpMyAdmin 所依赖的。它是与 phpMyAdmin 一起安装的,因此我们只需将其打开并重新启动我们的 PHP 处理器:

sudo php5enmod mcrypt
sudo service php5-fpm restart

这样,我们的 phpMyAdmin 安装就可以运行了。要访问该界面,请转到您的服务器的域名或公共IP地址,然后输入/phpmyadmin,在您的网络浏览器中:

http://server_domain_or_IP/phpmyadmin

phpMyAdmin login screen

要登录,请使用有效 MySQL 用户的用户名/密码对。这root用户和 MySQL 管理密码是一个不错的入门选择。然后您将能够访问管理界面:

phpMyAdmin admin interface

单击周围以熟悉界面。在下一节中,我们将采取措施保护新界面的安全。

第二步 — 保护您的 phpMyAdmin 实例

此时,安装在我们服务器上的 phpMyAdmin 实例应该可以完全使用。然而,通过安装Web界面,我们已经将我们的MySQL系统暴露给了外界。

即使有包含的身份验证屏幕,这也是一个很大的问题。由于 phpMyAdmin 的受欢迎程度以及它提供的大量数据的访问权限,此类安装成为攻击者的常见目标。

我们将实施两种简单的策略来减少我们的安装被攻击和受损的机会。我们将更改界面的位置/phpmyadmin采取其他措施来回避一些自动化机器人的暴力尝试。我们还将创建一个额外的 Web 服务器级身份验证网关,在进入 phpMyAdmin 登录屏幕之前必须通过该网关。

更改应用程序的访问位置

为了让 Nginx Web 服务器找到并提供 phpMyAdmin 文件,我们在前面的步骤中创建了从 phpMyAdmin 目录到文档根目录的符号链接。

要更改可以访问 phpMyAdmin 界面的 URL,我们只需重命名符号链接即可。进入 Nginx 文档根目录以更好地了解我们正在做的事情:

cd /usr/share/nginx/html
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 phpmyadmin -> /usr/share/phpmyadmin

如您所见,我们有一个名为的符号链接phpmyadmin在此目录中。我们可以将此链接名称更改为我们想要的任何名称。这将更改可以从浏览器访问 phpMyAdmin 的位置,这有助于隐藏硬编码机器人的访问点。

选择一个不表明该位置用途的名称。在本指南中,我们将命名我们的访问位置/nothingtosee。为此,我们只需重命名该链接:

sudo mv phpmyadmin nothingtosee
ls -l
total 8
-rw-r--r-- 1 root root 537 Mar  4 06:46 50x.html
-rw-r--r-- 1 root root 612 Mar  4 06:46 index.html
lrwxrwxrwx 1 root root  21 Aug  6 10:50 nothingtosee -> /usr/share/phpmyadmin

现在,如果您转到 phpMyAdmin 安装的先前位置,您将收到 404 错误:

http://server_domain_or_IP/phpmyadmin

phpMyAdmin 404 error

但是,您的 phpMyAdmin 界面将在我们选择的新位置可用:

http://server_domain_or_IP/nothingtosee

phpMyAdmin login screen

设置 Web 服务器身份验证门

我们安装时需要的下一个功能是身份验证提示,用户在看到 phpMyAdmin 登录屏幕之前需要通过该提示。

幸运的是,大多数 Web 服务器(包括 Nginx)本身就提供此功能。我们只需要修改 Nginx 配置文件的详细信息即可。

在此之前,我们将创建一个密码文件来存储我们的身份验证凭据。 Nginx 要求使用以下方式对密码进行加密crypt()功能。 OpenSSL 套件应该已经安装在您的服务器上,包含此功能。

要创建加密密码,请键入:

openssl passwd

系统将提示您输入并确认您要使用的密码。然后,该实用程序将显示密码的加密版本,如下所示:

O5az.RSPzd.HE

复制此值,因为您需要将其粘贴到我们将创建的身份验证文件中。

现在,创建一个身份验证文件。我们将这个文件称为pma_pass并将其放置在 Nginx 配置目录中:

sudo nano /etc/nginx/pma_pass

在此文件中,您只需指定要使用的用户名,后跟冒号 (:),然后是从openssl passwd公用事业。

我们将为我们的用户命名demo,但您应该选择不同的用户名。本指南的文件如下所示:

demo:O5az.RSPzd.HE

完成后保存并关闭文件。

现在,我们准备修改 Nginx 配置文件。在文本编辑器中打开此文件即可开始:

sudo nano /etc/nginx/sites-available/default

在此文件中,我们需要添加一个新的位置部分。这将针对我们为 phpMyAdmin 界面选择的位置(我们选择/nothingtosee在本指南中)。

在以下位置创建此部分server块,但位于任何其他块之外。我们将把新的位置块放在location /在我们的示例中阻止:

server {
    . . .

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

    location /nothingtosee {
    }

    . . .
}

在这个块中,我们需要设置一个名为的指令的值auth_basic我们的提示将向用户显示的身份验证消息。我们不想向未经身份验证的用户表明我们正在保护什么,因此不要提供具体细节。在我们的示例中,我们将仅使用“管理员登录”。

然后我们需要使用一个名为auth_basic_user_file将我们的 Web 服务器指向我们创建的身份验证文件。 Nginx 将提示用户输入身份验证详细信息,并检查输入的值是否与在指定文件中找到的值相匹配。

完成后,该文件应如下所示:

server {
    . . .

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

    location /nothingtosee {
        auth_basic "Admin Login";
        auth_basic_user_file /etc/nginx/pma_pass;
    }

    . . .
}

完成后保存并关闭文件。

要实现新的身份验证门,我们必须重新启动 Web 服务器:

sudo service nginx restart

现在,如果我们在网络浏览器中访问 phpMyAdmin 位置(如果您已经使用过 phpMyAdmin,您可能需要清除缓存或使用不同的浏览器会话),系统应该提示您输入添加到的用户名和密码。pma_pass file:

http://server_domain_or_IP/nothingtosee

Nginx authentication page

输入凭据后,您将进入正常的 phpMyAdmin 登录页面。除了增加的安全优势之外,这一附加的保护层还将帮助您的 MySQL 日志免受身份验证尝试的影响。

结论

您现在可以通过相当安全的 Web 界面管理您的 MySQL 数据库。此 UI 公开了 MySQL 命令提示符下可用的大部分功能。您可以查看数据库和架构、执行查询以及创建新的数据集和结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin 的相关文章

  • 如何从准备好的语句中获取标量结果?

    是否可以将准备好的语句的结果设置为变量 我正在尝试创建以下存储过程 但失败了 第 31 行出现错误 1064 42000 您的 SQL 语法有错误 检查与您的 MySQL 服务器版本相对应的手册 了解在 stmt USING m c a 附
  • MySQL 多索引与多列索引进行搜索

    在我正在编写的软件中 它能够搜索给定的表以获取信息 搜索表单有 5 个字段 当然所有字段都对应于表中的不同列 但所有字段都是可选的 我的问题是关于多列索引是否有效以及为其构建查询的正确方法 如果我有一个跨 5 列的索引 并且我构建了一个查询
  • 为什么java字符串在MYSQL中不保存为UTF-8?

    message new String round id getBytes UTF 8 conn DriverManager getConnection jdbc mysql host db useUnicode true character
  • GROUP_CONCAT 逗号分隔符 - MySQL

    我有一个疑问 我在哪里使用GROUP CONCAT和自定义分隔符 因为我的结果可能包含逗号 这一切都运行良好 但它仍然以逗号分隔 所以我的输出是 Result A Result B Result C 我怎样才能做到这一点 输出是 Resul
  • 我是否应该标准化我的数据库?

    在设计数据库 例如 MySQL 的模式时 会出现是否完全规范化表的问题 一方面 连接 以及外键约束等 非常慢 另一方面 您会获得冗余数据和潜在的不一致 最后优化 是正确的方法吗 即创建一个按书本规范化的数据库 然后查看可以对哪些内容进行非规
  • 如何在 Eclipse 中使用 MySql 数据库

    我对编程非常陌生 所以请耐心等待 如果一开始我没有理解的话 请提前道歉 我正在做一个本科编程项目 需要在 Java 程序中创建一些数据库 我正在使用 eclipse galilo 来编写我的程序 我已经下载了一个连接器 J 但还不知道应该如
  • MySQL - 如何按相关性排序? INNODB表

    我在一个名为 cards 的 INNODB 表中有大约 20 000 行 所以 FULLTEXT 不是一个选项 请考虑这张表 id name description 1 John Smith Just some dude 2 Ted Joh
  • nginx 重写文件夹重定向

    all 我正在尝试在 nginx 中做一些事情来重定向对文件的所有调用 images 成为 assets images 有人可以帮我重写规则吗 给予 301 永久移动状态 以下是使用较新版本的 Nginx 执行此操作的首选方法 locati
  • Glassfish 4 服务器意外停止

    我是 GlassFish 和一般应用程序服务器的新手 我有一个运行 Ubuntu 的 Amazon EC2 实例 并安装了 GlassFish 4 它启动时没有问题 但过了一会儿 GlassFish 服务器就自行关闭了 我查看了 serve
  • 在 Entity-Framework Core 中批量插入到 MySQL [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个由约 10 000 个对象组成的列表 比方说类Person 我需要将其插入到 MySQL 表中
  • 重新排列mysql中的主键

    从MySQL表中删除一些行后如何重新排列主键列值 例如 一个包含 4 行数据的表 主键值为 1 2 3 4 当删除第2行和第3行时 第4行的键值变为2 请帮助我找到解决方案 为什么要这样做 你不需要重新排列您的密钥 因为它只是记录的数字和标
  • SQL Server到Mysql迁移(使用Mysql Workbench)数据传输错误

    我正在使用 Mysql Work bench 6 3 将数据库从 MS Sql server 2008 迁移到 Mysql 在 批量数据传输 期间出错并出现以下警告 这种情况仅发生在像 varchar char 这样的列类型上 当我尝试使用
  • 用于分页的php示例脚本[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 任何人都可以建议一个好的分页 php 脚本 其中人们想要分页显示数据库中的大量项目 以下链接可以帮助您
  • MySQL - 此版本的 MySQL 尚不支持“LIMIT 和 IN/ALL/ANY/SOME 子查询”

    这是php编码我正在使用的 Last Video db gt fetch all SELECT VID thumb FROM video WHERE VID IN SELECT VID FROM video WHERE title LIKE
  • 如何在 Ubuntu 10.10 (Maverick Meerkat) 上安装 Sun Java JDK?

    我尝试添加 Canonical 合作伙伴存储库 但仍然找不到sun java6 jdk包裹 安装 Oracle Sun JDK 而不是 OpenJDK 的正确方法是什么乌班图10 10 http en wikipedia org wiki
  • 如何安装 Node 和 NPM 以便不必使用 sudo?

    我正在尝试在 Ubuntu 14 04 计算机上设置 Node js 和 NPM 但遇到了一些问题 在我的第一次尝试中 我不断得到EACCES尝试安装软件包时出错 有时甚至使用sudo 所以我彻底卸载了node和npm 现在我正在尝试找出如
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • 如何获取mysql中一条记录的大小

    如果表包含 TEXT 或 BLOB 类型的字段 如何获取 MySql 中记录的大小 是否可以使用sql语句获取记录或表的大小 要计算字符串或 blob 的大小 以字节为单位 请使用LENGTH YourColumn http dev mys
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from

随机推荐

  • 如何在 Linux 中移动文件和目录(mv 命令)

    移动文件和目录是您经常需要在 Linux 系统上执行的最基本任务之一 在本教程中 我们将解释如何使用mv移动文件和目录的命令 如何使用mv命令 The mv命令 move 的缩写 用于将文件和目录从一个位置重命名和移动到另一个位置 语法为m
  • 如何在 CentOS 8 上安装 Xrdp 服务器(远程桌面)

    Xrdp 是 Microsoft 远程桌面协议 RDP 的开源实现 允许您以图形方式控制远程系统 使用 RDP 您可以登录到远程计算机并创建真实的桌面会话 就像登录到本地计算机一样 本教程介绍如何在 CentOS 8 上安装和配置 Xrdp
  • 如何在 Ubuntu 18.04 上安装 Flask

    Flask 是一个免费 开源的 Python 微型 Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 烧瓶是基于Werkzeug和用途Jinja2作为模板引擎 Unlike Django 默认情况下 Flask 不
  • Linux 中的 Whoami 命令

    在本文中 我们将介绍whoami命令 顾名思义 whoami命令打印有效用户 ID 的用户名 换句话说 它显示当前登录用户的名称 如何使用whoami命令 语法为whoami命令如下 whoami OPTION 要显示当前登录用户的名称 请
  • 如何在 CentOS 8 上安装和配置 Redmine

    Redmine 是一款免费的开源项目管理和问题跟踪应用程序 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 本教程介绍如何在 Ce
  • Linux 中的 Stat 命令

    stat是一个命令行实用程序 显示有关给定文件或文件系统的详细信息 本文介绍了如何使用stat命令 使用stat命令 语法为stat命令如下 stat OPTION FILE stat接受一个或多个输入FILE名称并包含许多控制命令行为和输
  • 如何在 CentOS 8 上安装 Python 3.8

    Python 是世界上使用最广泛的编程语言之一 凭借其简单易学的语法 Python 成为初学者和经验丰富的开发人员的热门选择 Python 是一种非常通用的编程语言 它可用于构建各种应用程序 从简单的脚本到复杂的机器学习算法 CentOS
  • Linux 中的 Chgrp 命令(更改组)

    在 Linux 中 每个文件都与一个所有者和一个组相关联 并具有确定哪些用户可以读取 写入或执行该文件的权限 本文介绍了如何使用chgrp命令更改给定文件的组所有权 chgrp命令语法 The chgrp命令采用以下形式 chgrp OPT
  • 如何在 CentOS 7 上安装 Ruby

    Ruby 是当今最流行的语言之一 它具有优雅的语法 是 Ruby on Rails 框架背后的语言 本文展示了在 CentOS 上安装 Ruby 的几种不同方法 每种安装方法都有自己的优点 您可以选择最适合您的一种安装方法 先决条件 在开始
  • 如何每 5 分钟、10 分钟或 15 分钟运行一次 Cron 作业

    cron 作业是按指定时间间隔执行的任务 可以将任务安排为按分钟 小时 每月的某一天 每月 每周的某一天或这些的任意组合运行 Cron 作业通常用于自动化系统维护或管理 例如备份数据库或数据 使用最新的安全补丁更新系统 检查磁盘空间使用情况
  • Bash:追加到文件

    在 Bash 中 有多种方法可以将文本附加到文件中 本文解释了其中一些 要将文本附加到文件 您需要对其具有写入权限 否则 您将收到权限被拒绝的错误 使用重定向运算符附加到文件 gt gt 重定向允许您捕获命令的输出并将其作为输入发送到另一个
  • 在 C/C++ 中使用 INT_MAX 和 INT_MIN

    在本文中 我们将了解在 C C 中使用 INT MAX 和 INT MIN 这些实际上是有用的宏 它们表示最大和最小整数值 让我们用一些例子来看看它 使用 INT MAX 和 INT MIN INT MAX 是一个表示最大整数值的宏 同样
  • Google Guice 依赖注入示例教程

    谷歌指南是在应用程序中自动执行依赖项注入的框架 如果您直接遇到这里 我建议您查看一下依赖注入示例在这里我们了解了传统对象创建方法的问题以及依赖注入的实现优势 在上一篇教程中 我们学习了如何在应用程序中手动实现依赖注入 但是 当应用程序中的类
  • 如何在 CentOS 7 上安装 MySQL

    介绍 MySQL是一个开源数据库管理系统 通常作为流行的一部分安装LEMP Linux Nginx MySQL MariaDB PHP Python Perl 堆栈 它使用关系数据库和 SQL 结构化查询语言 来管理其数据 CentOS 7
  • 如何配置 DNS 循环负载平衡以实现高可用性

    介绍 尽管这是一种更有争议的技术 但利用提供商的全球影响力在地理上分发应用程序的一个好方法是使用和管理 DNS 响应 即返回的 IP 地址列表 除非您愿意在硬件和基础设施成本上花费一点钱 否则使用 DNS 来实现高可用性可能是一个很好的方法
  • 如何在 CentOS 7 上使用 FreeIPA 设置集中式 Linux 身份验证

    介绍 FreeIPA是 Linux 的开源安全解决方案 提供帐户管理和集中身份验证 类似于 Microsoft 的 Active Directory FreeIPA 构建在多个开源项目之上 包括 389 Directory Server M
  • Spring Boot 教程

    欢迎来到 Spring Boot 教程 春季启动是 Pivotal Team The Spring Team 的一个全新项目 它是在现有 Spring 框架之上开发的框架 Spring Boot 教程 Spring Boot使用全新的开发模
  • 如何使用 Whisper 和 Spleeter AI 工具制作卡拉 OK 视频

    介绍 人工智能工具可用于处理图像 音频或视频以产生新颖的结果 直到最近 在不使用大量时间和计算能力的情况下 自动编辑图像或音频仍然具有挑战性 即使如此 通常也只能运行交钥匙滤波器来删除声音中的某些频率或更改图像的调色板 较新的方法使用人工智
  • JSF PrimeFaces 教程

    欢迎来到 JSF Primefaces 教程 JavaServer Faces是当今用于实现 Java Web 应用程序用户界面的领先框架之一 JSF 已经组件化了 Web 应用程序 特别是与界面相关的部分 因为 JSF 中的所有单一视图都
  • 如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin

    介绍 很大一部分网站和应用程序都需要 MySQL 等关系数据库管理系统 然而 并非所有用户都愿意从命令行管理数据 为了解决这个问题 创建了一个名为 phpMyAdmin 的项目 以提供基于 Web 的管理界面形式的替代方案 在本指南中 我们