在 CentOS 8 上安装和保护 phpMyAdmin
在此页
- 要求
- 安装 LAMP 服务器
- 配置 MariaDB
- 安装 phpMyAdmin
- 为 phpMyAdmin 配置 Apache
- 配置 SELinux 和防火墙
- 安全的 phpMyAdmin
- 允许来自特定 IP 的 phpMyAdmin
- 配置额外的身份验证层
phpMyAdmin 是一个免费的开源工具,用于通过基于 Web 的界面管理 MySQL 和 MariaDB 服务器。使用 phpMyAdmin,您可以创建和管理数据库和用户、执行 SQL 语句、导入和导出数据以及执行数据库活动,例如创建、删除表、列、索引、权限等等。 phpMyAdmin 是最流行和使用最广泛的管理工具之一,尤其是对于网络托管服务。
特征
- 提供简单且用户友好的网络界面。
- 从 CSV 和 SQL 导入数据。
- 支持大多数 MySQL 功能,包括创建、复制、删除、重命名、删除和更改数据库、表、字段和索引。
- 允许您将数据导出为各种格式,例如 PDF、CSV、SQL、XML 等等。
- 管理多台服务器。
- 使用示例查询 (QBE) 创建复杂查询。
在本教程中,我们将向您展示如何在 CentOS 8 服务器上安装和保护 phpMyAdmin。
要求
- 一台运行 CentOS 8 的服务器。
- 在服务器上配置了 root 密码。
安装 LAMP 服务器
首先,您需要在您的服务器上安装 Apache、MariaDB、PHP 和其他 PHP 库。您可以使用以下命令安装所有这些:
dnf install httpd mariadb-server php php-pdo php-pecl-zip php-json php-common php-fpm php-mbstring php-cli php-mysqlnd php-json php-mbstring wget unzip
安装所有软件包后,启动 Apache 和 MariaDB 服务,并使用以下命令使它们在系统重启后启动:
systemctl start httpd
systemctl start mariadb
systemctl enable httpd
systemctl enable mariadb配置 MariaDB
默认情况下,MariaDB 是不安全的。所以你需要先保护它。您可以通过运行 mysql_secure_installation 脚本来完成:
mysql_secure_installation
如下图所示回答所有问题:
Set root password? [Y/n] Y New password: Remove anonymous users? [Y/n] Y Disallow root login remotely? [Y/n] Y Remove test database and access to it? [Y/n] Y Reload privilege tables now? [Y/n] Y
完成后,您应该会看到以下输出:
... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!
此时,您的 MariaDB 安装是安全的。
安装 phpMyAdmin
默认情况下,phpMyAdmin 在 CentOS 8 默认存储库中不可用。因此,您需要从其官方网站下载最新版本的 phpMyAdmin。您可以使用以下命令下载它:
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
下载后,使用以下命令解压缩下载的文件:
unzip phpMyAdmin-4.9.2-all-languages.zip
接下来,将提取的内容移动到 /usr/share 目录,如下所示:
mv phpMyAdmin-4.9.2-all-languages /usr/share/phpmyadmin
接下来,将目录更改为 /usr/share/phpmyadmin 并将文件重命名为 config.sample.inc.php:
cd /usr/share/phpmyadmin
mv config.sample.inc.php config.inc.php接下来,使用您喜欢的文本编辑器打开文件,如下所示:
nano config.inc.php
更改以下行:
$cfg['blowfish_secret'] = 'your-secret-password';
完成后保存并关闭文件。然后,使用以下命令导入 create_tables.sql:
mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
在提示导入表时提供您的 root 密码。
接下来,为 phpmyadmin 创建一个 tmp 目录并赋予适当的权限:
mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp为 phpMyAdmin 配置 Apache
接下来,您需要为 phpMyAdmin 创建一个 Apache 虚拟主机配置文件。您可以使用以下命令创建它:
nano /etc/httpd/conf.d/phpmyadmin.conf
添加以下行:
Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin/> AddDefaultCharset UTF-8 <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require all granted </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory> <Directory /usr/share/phpmyadmin/setup/> <IfModule mod_authz_core.c> # Apache 2.4 <RequireAny> Require all granted </RequireAny> </IfModule> <IfModule !mod_authz_core.c> # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 </IfModule> </Directory>
完成后保存并关闭文件。然后,使用以下命令重新启动 Apache 服务:
systemctl restart httpd
您可以使用以下命令检查 Apache 的状态:
systemctl status httpd
您应该看到以下输出:
? httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/httpd.service.d ??php-fpm.conf Active: active (running) since Wed 2019-12-18 01:07:52 EST; 6s ago Docs: man:httpd.service(8) Main PID: 5636 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 25044) Memory: 28.7M CGroup: /system.slice/httpd.service ??5636 /usr/sbin/httpd -DFOREGROUND ??5639 /usr/sbin/httpd -DFOREGROUND ??5640 /usr/sbin/httpd -DFOREGROUND ??5641 /usr/sbin/httpd -DFOREGROUND ??5642 /usr/sbin/httpd -DFOREGROUND Dec 18 01:07:52 centos8 systemd[1]: Stopped The Apache HTTP Server. Dec 18 01:07:52 centos8 systemd[1]: Starting The Apache HTTP Server... Dec 18 01:07:52 centos8 httpd[5636]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::200:d0> Dec 18 01:07:52 centos8 httpd[5636]: Server configured, listening on: port 80 Dec 18 01:07:52 centos8 systemd[1]: Started The Apache HTTP Server.
配置 SELinux 和防火墙
默认情况下,SELinux 在 CentOS 8 中启用。因此您需要配置 SELinux 以使 phpMyAdmin 正常工作。
首先,使用以下命令安装 policycoreutils-python-utils 包以管理 SELinux 环境:
dnf install policycoreutils-python-utils
接下来,使用以下命令启用对 /usr/share/phpmyadmin 目录的访问:
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/phpmyadmin/'
semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/phpmyadmin/tmp(/.*)?"现在通过运行以下命令递归访问 phpmyadmin 目录中的所有文件:
restorecon -Rv '/usr/share/phpmyadmin/'
接下来,您需要创建防火墙规则以允许来自外部网络的 HTTP 服务。您可以使用以下命令允许它:
firewall-cmd --permanent --add-service=http
firewall-cmd --reloadphpMyAdmin 现已安装并配置。现在是时候检查它是否正常工作了。
打开您的 Web 浏览器并输入 URL http://your-server-ip/phpmyadmin。您将被重定向到以下页面:
安全的 phpMyAdmin
此时,phpMyAdmin 实例运行正常。但是,保护您的 phpMyAdmin 实例免受外界侵害对您来说是一项重要任务。在本节中,我们将向您展示如何保护您的 phpMyAdmin 实例。
允许来自特定 IP 的 phpMyAdmin
首先,您需要将 phpMyAdmin 配置为只能从家庭连接的 IP 地址访问。
您可以通过编辑 /etc/httpd/conf.d/phpmyadmin.conf 文件来配置它:
nano /etc/httpd/conf.d/phpmyadmin.conf
找到以下几行:
<RequireAny> Require all granted </RequireAny>
并且,将它们替换为以下内容:
<RequireAny> Require ip your-home--connection-ip-address Require ip ::1 </RequireAny>
完成后保存并关闭文件。
配置额外的身份验证层
通过设置基本身份验证来密码保护您的 phpmyadmin 目录是个好主意。
为此,使用 htpasswd 工具创建一个新的身份验证文件,如下所示:
mkdir /etc/phpmyadmin
htpasswd -c /etc/phpmyadmin/.htpasswd admin系统将要求您提供管理员密码,如下所示:
New password: Re-type new password: Adding password for user admin
接下来,您需要配置 Apache 以使用 .htpasswd 文件。您可以通过编辑文件 /etc/httpd/conf.d/phpmyadmin.conf 来完成此操作。
nano /etc/httpd/conf.d/phpmyadmin.conf
在“AddDefaultCharset UTF-8”行下方添加以下行:
Options +FollowSymLinks +Multiviews +Indexes AllowOverride None AuthType basic AuthName "Authentication Required" AuthUserFile /etc/phpmyadmin/.htpasswd Require valid-user
保存文件并重启 Apache 服务以使更改生效:
systemctl restart httpd
访问 phpMyAdmin
现在,您的 phpMyAdmin 实例受到额外安全层的保护。打开您的 Web 浏览器并输入 URL http://your-server-ip/phpmyadmin。您将被要求输入您之前创建的用户的登录凭据,如下所示:
提供您的管理员用户名和密码,然后单击“确定”按钮。您将被重定向到 phpMyAdmin 登录页面:
现在,提供您的 MySQL 管理用户登录凭据并单击 Go 按钮。您应该会看到以下页面:
结论
恭喜!您已经在 CentOS 8 服务器上成功安装并保护了 phpMyAdmin。您现在可以创建数据库、用户、表并从基于 Web 的界面管理它们。如果您有任何问题,请随时问我。