在 Ubuntu 20.04.3 LTS 上使用 apt 包管理版本的 MySQL 服务器,并默认安装 MySQL。
netstat
显示 MySQL 服务器绑定到公共 IPv6 接口:
tcp6 0 0 :::33060 :::* LISTEN 2485/mysqld
tcp6 0 0 :::3306 :::* LISTEN 2485/mysqld
但是,/etc/mysql/mysql.conf.d/mysqld.cnf
显示(为简洁起见删除了注释行):
[mysqld]
user = mysql
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
我已经设置了 iptables 和上游防火墙规则,拒绝外部访问未经批准的端口(如 MySQL),但我希望 MySQL 本身根据配置文件绑定到系统上的正确接口。
在另一个今年升级到 20.04.3 的系统上,配置文件几乎相同,并netstat
显示:
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN 1349/mysqld
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1349/mysqld
答案1
通过将权限更改为/etc/mysql.cnf
0644 解决了这个问题。我猜 MySQL 服务器不喜欢将该文件标记为全球可写/可执行。它被标记为 0777,而我绝对没有这样做。它是通过 apt 包以这种方式安装在系统上的mysql-server
。
这可能意味着目前(截至 2021 年 12 月)有许多 Ubuntu Server 20.04.3 LTS 系统通过 apt 安装 MySQL,并意外向外界开放了 3306 端口。由于默认情况下没有 root 密码,这也可能意味着 MySQL 可能很快从远程系统受到攻击。