MySQL数据目录安全不靠限制用户组,而是通过属主属组为mysql:mysql、权限750、清理mysql组冗余成员、配置SELinux/AppArmor上下文及管控tmpdir/socket日志等协同实现。
mysql 数据目录(如 /var/lib/mysql)不是靠“限制用户组”实现隔离的,而是靠 Unix 文件权限 + 进程运行身份 + 安全模块协同控制。只要配置稍有偏差,普通用户甚至能直接 cat 出 .ibd 文件或通过 mysqld 崩溃时残留的内存映射访问数据。
MySQL 服务以 mysql 用户身份运行,默认也属于 mysql 组。目录权限 750 意味着:属主可读写执行、属组可读执行、其他人无任何权限。
若设成 755 或 775,任意本地用户都能 ls /var/lib/mysql 查看库名,甚至用 strings 提取部分明文字段;设成 777 更是直接放弃防线。
mysql -e "SELECT @@datadir;" 或查 my.cnf 中 datadir 配置项sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod 750 /var/lib/mysql
mysql 组成员 ≠ “可读 datadir 的人”,而是“具备组权限”的所有本地账户。只要某人被加进 mysql 组,哪怕没密码、没 shell,也能 su -s /bin/sh -c 'ls /var/lib/mysql' mysql 成功执行——因为组权限生效不依赖登录态。
getent group mysql
sudo gpasswd -d deploy mysql、sudo gpasswd -d admin mysql 等mysql 用户本身,或为空(mysql:x:27:)usermod -aG mysql $USER 给运维账号加组——这是最常见误操作即使文件权限正确,SELinux(RHEL/CentOS)或 AppArmor(Ubuntu/Debian)若未放行,mysqld 进程可能因 denied 权限崩溃;反之,若策略宽松,攻击者可通过提权后的进程绕过文件权限读取数据。
sudo semanage fcontext -a -t mysqld_db_t "/var/lib/mysql(/.*)?",再 sudo restorecon -Rv /var/lib/mysql
sudo nano /etc/apparmor.d/usr.sbin.mysqld,确保含 /var/lib/mysql/** rwk,,然后 sudo systemctl reload apparmor
ls -Z /var/lib/mysql 应显示 mysqld_db_t 上下文(SELinux)或 aa-status | grep mysqld 显示 enforce 模式(AppArmor)datadir 安全了,不代表整个 MySQL 数据面就安全。攻击者常从旁路切入:
tmpdir(如 /tmp)若被设为全局可写,SELECT ... INTO OUTFILE 可能绕过 secure_file_priv 写出敏感内容——应设为 /var/tmp/mysql-tmp 并 chown mysql:mysql && chmod 700
mysql.sock 文件(如 /var/run/mysqld/mysqld.sock)若权限为 666,本地任意用户都能连接并执行 SHOW VARIABLES 获取配置细节——必须 chmod 660 且属主为 mysql:mysql
error.log、slow.log)若包含明文 SQL 或路径信息,也应 chmod 640 并归属 mysql:mysql
真正难的是持续性——mysqld 升级、备份脚本重置权限、运维人员手动 chown -R 到错误路径,都会瞬间击穿这层防线。每次变更后,都得跑一遍 ls -ld /var/lib/mysql 和 getent group mysql 确认。
小米路由器3G怎么恢复出厂设置(小米路由器3G该如何恢复出厂设置)
小米路由器3g和4a千兆版哪个好(小米路由器3g和4a千兆版对比区别)
Sensor Tower:ChatGPT全球份额跌破50%,Gemini与Claude加速追赶
OpenAI提速狂飙16倍!GPT-5.6多智能体V2上线,741轮怪物对话1秒打开
“十五五”时期 煤矿危险繁重岗位将由机器人替代
waytouniverse/ppt-generator:从 Markdown 大纲生成风格统一的 PPT 图片