From:https://www.cnblogs.com/sqsgoodluck/p/17536483.html
使用
apt install phpmyadmin总会报错AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Error: Call to undefined function Symfony\\Component\\DependencyInjection\\array_is_list()。查询资料显示array_is_list()是PHP8.1的特性,但phpMyAdmin官方明确5.2.1版本支持PHP7.4及以上。因此尝试源码安装
|
1 2 |
# 运行环境 Debian 12 + apache2.4 + php8.0 + mysql5.7 |
1. 源码包下载
|
1 2 3 4 5 6 7 8 9 10 11 |
# 1. 下载 cd ~ mkdir download cd download wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.tar.gz # 2. 解压 tar -zxvf phpMyAdmin-5.2.1-all-languages.tar.gz # 3. 复制文件夹到指定目录(apt安装会将其安到/usr/share/phpmyadmin) sudo mv phpMyAdmin-5.2.1-all-languages/ /usr/share/phpmyadmin |
2. 在MySQL中创建超级用户
|
1 2 3 4 5 6 7 8 9 |
# 登录mysql mysql -u root -p # 1. 添加用户pma(配置文件时用) # % 符号告诉MySQL允许该用户从远程的任何地方登录。如果你想提高安全性,你可以用一个IP地址来代替它。密码更换为自己的 CREATE USER 'pma'@'%' IDENTIFIED BY 'password_here'; # 2. 赋予超级用户权限 GRANT ALL PRIVILEGES ON *.* TO 'pma'@'%' WITH GRANT OPTION; |
3. 创建临时文件夹
|
1 2 3 |
sudo mkdir -p /var/lib/phpmyadmin/tmp # 将www-data(Apache 等 Web 服务器默认用于 Ubuntu 和 Debian 系统中的正常操作的 Linux 用户配置文件)设置为该目录的所有者 sudo chown -R www-data:www-data /var/lib/phpmyadmin |
4. PHPMyAdmin配置
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# 1. 复制实例配置文件并重命名为config.inc.php sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php # 2. 编辑配置 sudo vim /usr/share/phpmyadmin/config.inc.php # 2.1 phpMyAdmincookie默认使用身份验证方法,它允许您在cookie的帮助下以任何有效的 MySQL 用户身份登录到 phpMyAdmin 。在这种方法中,MySQL 用户密码存储在临时 cookie 中,并使用高级加密标准 (AES) 算法进行加密。历史上,phpMyAdmin 曾为此使用Blowfish 密码,这仍然反映在其配置文件中。向下滚动到以 开头的行$cfg['blowfish_secret'] # 在''中输入一个32位的随机字符;shell中可使用pwgen -s 32 1命令创建,然后复制进来 $cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ # 2.2 配置/* User used to manipulate with storage */ ## 在只有一个用户访问phpMyAdmin的情况下不需要这个特殊的用户帐户,但在多用户场景中推荐使用。通过删除前面的斜杠来取消对controluserandcontrolpass指令的注释。然后更新controlpass指令以指向您选择的安全密码。如果您不这样做,默认密码将保持不变,未知用户可以通过 phpMyAdmin 界面轻松访问您的数据库。 . . . /* User used to manipulate with storage */ // $cfg['Servers'][$i]['controlhost'] = ''; // $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'password'; // 密码为之前创建的用户密码 . . . # 2.3 配置/* Storage database and tables */ ## 本节包括许多定义phpMyAdmin 配置存储、数据库和管理pma数据库用户使用的几个表的指令。这些表启用了 phpMyAdmin 中的许多功能,包括书签、评论、PDF 生成等。取消本节参数的注释 . . . /* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; . . . # 2.4 配置临时文件路径 # 在配置文件末尾添加: $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp'; # 2.5 在MySQL中创建phpMyAdmin的数据库和表(储存其自身的配置) sudo mysql -u root -p < /usr/share/phpmyadmin/sql/create_tables.sql |
5. 配置Apache支持phpMyAdmin
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# 1. 创建phpMyAdmin Apache2配置文件 sudo vim /etc/apache2/conf-available/phpmyadmin.conf # phpMyAdmin default Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php <IfModule mod_php5.c> <IfModule mod_mime.c> AddType application/x-httpd-php .php </IfModule> <FilesMatch ".+\.php$"> SetHandler application/x-httpd-php </FilesMatch> php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/ php_admin_value mbstring.func_overload 0 </IfModule> <IfModule mod_php.c> <IfModule mod_mime.c> AddType application/x-httpd-php .php </IfModule> <FilesMatch ".+\.php$"> SetHandler application/x-httpd-php </FilesMatch> php_value include_path . php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp php_admin_value open_basedir /usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/php/php-php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/ php_admin_value mbstring.func_overload 0 </IfModule> </Directory> # Authorize for setup <Directory /usr/share/phpmyadmin/setup> <IfModule mod_authz_core.c> <IfModule mod_authn_file.c> AuthType Basic AuthName "phpMyAdmin Setup" AuthUserFile /etc/phpmyadmin/htpasswd.setup </IfModule> Require valid-user </IfModule> </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/templates> Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries> Require all denied </Directory> <Directory /usr/share/phpmyadmin/setup/lib> Require all denied </Directory> # 2. 启用phpMyAdmin配置文件 sudo a2enconf phpmyadmin.conf sudo systemctl reload apache2 # 3.浏览器访问测试 http://<域名>/phpmyadmin |
6. 安全性控制
phpMyAdmin 是攻击者的热门目标,您应该格外小心以防止未经授权的访问。
6.1 为phpMyAdmin设置别名
机器人和攻击者不断扫描web服务器,寻找默认的phpMyAdmin登录页面,因此建议您将URL更改为其他内容。
在本例中,我们将把它从example.com/phpmyadmin更改为example.com/pmahidden。
|
1 2 3 4 5 6 |
# 通过更改phpMyAdmin配置文件实现 sudo vim /etc/apache2/conf-available/phpmyadmin.conf Alias pmahidden /usr/share/phpmyadmin # 浏览器测试访问 http://<域名>/pmahidden |
6.2 允许. htaccess 覆盖
使用 Apache 的内置
.htaccess身份验证和授权功能在整个应用程序前面放置一个网关。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# 1. 编辑 Apache 配置文件来启用文件覆盖的使用 sudo vim /etc/apache2/conf-available/phpmyadmin.conf <Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php AllowOverride All # 新增 <IfModule mod_php5.c> . . . # 2. 重启Apache sudo systemctl restart apache2 # 3. 设置 .htpasswd ## 在 phpMyAdmin 安装目录中创建一个新的 .htaccess 文件 sudo vim /usr/share/phpmyadmin/.htaccess # >>>添加: AuthType Basic # 此行指定您正在实施的身份验证类型。此类型将使用密码文件实现密码认证 AuthName "Restricted Files" # 这将设置身份验证对话框的消息。您应该保持这种通用性,以便未经授权的用户不会获得有关受保护内容的任何信息。 AuthUserFile /usr/share/phpmyadmin/.htpasswd # 这设置将用于身份验证的密码文件的位置。这应该在正在提供服务的目录之外。我们很快就会创建这个文件。 Require valid-user # 这指定只有经过身份验证的用户才能访问此资源。这实际上是阻止未经授权的用户进入。 # 4. 密码文件选择的位置是/usr/share/phpmyadmin/.htpasswd. 您现在可以创建此文件并将其传递给该htpasswd实用程序的初始用户 sudo htpasswd -c /usr/share/phpmyadmin/.htpasswd username # 系统将提示您为正在创建的用户选择并确认密码。之后,将使用您输入的散列密码创建该文件。 |
