Kali Linux 2023.4+默认不预装MySQL,而是预装mariadb-server;运行mysql -u root -p报错2002说明服务未安装或未启动,需先确认dpkg -l | grep mariadb,再按需安装/启动并执行mysql_secure_installation加固。

MySQL服务是否已预装?检查Kali默认状态
Kali Linux 2023.4 及之后版本默认不启动 MySQL,也不预装 mysql-server;它用的是 mariadb-server(兼容 MySQL 协议,但非 Oracle 官方 MySQL)。直接运行 mysql -u root -p 很可能报错 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'——这不是密码错,是服务根本没装或没启。
- 先确认:运行
dpkg -l | grep mariadb,若输出含mariadb-server,说明已装 MariaDB - 若想用官方 MySQL(如需特定漏洞模块、审计工具依赖),必须手动卸载 MariaDB 并添加 Oracle APT 源,否则
apt install mysql-server仍会装 MariaDB - 启动服务统一用:
sudo systemctl start mariadb或sudo systemctl start mysql(取决于你装的是哪个)
初始化安全配置:别跳过 mysql_secure_installation
新装的 MariaDB/MySQL 默认 root 用户无密码、允许空密码登录、开放匿名用户、允许任意主机远程连接——这对渗透测试环境是高危配置,哪怕只在本地用。必须立即运行 mysql_secure_installation。
- 执行后按提示操作:设 root 密码(务必记牢)、删匿名用户、禁用远程 root 登录、删 test 数据库、重载权限表
- 注意:Kali 中该脚本可能因 systemd socket 激活机制失败,报错
Failed! Error: Access denied for user 'root'@'localhost'。此时先用sudo mysql -u root(不加 -p)进库,再执行ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_strong_pass'; FLUSH PRIVILEGES;,再退出重试脚本 - 该步骤不是“可选优化”,而是防止靶机数据库被反向利用的关键防线
创建渗透专用数据库与低权限用户
绝不直接用 root 操作测试数据。应为每个靶机或项目建独立数据库,并分配仅具备必要权限的用户。
- 进库后执行:
CREATE DATABASE dvwa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 创建用户:
CREATE USER 'dvwa_user'@'localhost' IDENTIFIED BY 'p4ssw0rd!'; - 授最小权限:
GRANT SELECT, INSERT, UPDATE, DELETE ON dvwa.* TO 'dvwa_user'@'localhost'; - 禁止远程访问(除非明确需要):
REVOKE ALL PRIVILEGES ON *.* FROM 'dvwa_user'@'%'; - 验证权限是否生效:
SHOW GRANTS FOR 'dvwa_user'@'localhost';
监听地址与防火墙:本地测试务必绑定 127.0.0.1
默认 MariaDB/MySQL 配置中 bind-address = 127.0.0.1 是安全的,但有人为“方便调试”改成 0.0.0.0,这会让数据库暴露在局域网甚至公网——Kali 常作为攻击机直连靶机网络,极易被反扫。
- 检查配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf(MariaDB)或/etc/mysql/mysql.conf.d/mysqld.cnf(官方 MySQL) - 确认
bind-address行未被注释且值为127.0.0.1;若存在skip-networking,需删除或注释掉,否则本地 socket 也无法连接 - UFW 若启用,确保没开 3306 端口:
sudo ufw status;如有,执行sudo ufw deny 3306 - 改完重启服务:
sudo systemctl restart mariadb(或mysql)
实际搭建中,最常被忽略的是配置文件里多个 bind-address 出现在不同 conf 片段中,systemd 加载时以最后一个为准——务必全局搜索确认。


















