必须用umask 0077而非0027或0022,因其使备份文件权限为-rw-------,仅属主可读写,彻底阻断同组或其他用户横向读取敏感数据;而0022和0027分别允许其他用户或同组用户读取,存在泄露风险。

要让新生成的数据库备份文件无法被横向读取,核心是让文件创建时就只对属主可读写、组和其他用户完全无权访问。这靠 umask 0077 实现——它会屏蔽掉组和其他用户的全部权限位。
为什么必须用 umask 0077 而不是 0027 或 0022
横向读取风险主要来自同服务器上其他普通用户(尤其是共用数据库服务账号或运维账号的场景):
-
umask 0022 → 文件权限为
-rw-r--r--:其他用户仍可读,备份内容(含密码、结构、敏感字段)直接暴露 -
umask 0027 → 文件权限为
-rw-r-----:同组用户可读,若数据库服务与备份脚本同属dbadmin组,组内其他成员仍可能读取 -
umask 0077 → 文件权限为
-rw-------:仅属主可读写,彻底阻断非属主用户的任何访问路径
精准配置到备份执行环境(不止改 ~/.bashrc)
数据库备份通常由定时任务(cron)、服务账户(如 postgres 用户)或自动化脚本触发,这些环境往往不加载用户 shell 配置。只改 ~/.bashrc 无效:
- 对 cron 任务:在 crontab 条目开头显式设置,例如:
0 2 * * * umask 0077; /usr/local/bin/backup-db.sh - 对 systemd 服务:在 service 单元文件中添加
UMask=0077(推荐),或在ExecStart前加umask 0077 && - 对专用备份用户(如
backup):全局生效需通过 PAM,在/etc/pam.d/common-session添加session optional pam_umask.so umask=0077
配合属主与目录权限做双重隔离
仅靠 umask 不足——如果备份目录本身权限宽松(如 drwxr-xr-x),攻击者仍可列出文件名、猜测备份时间、甚至利用竞态条件劫持写入。必须同步加固:
- 备份目录设为
700:mkdir -p /backup/db && chown backup:backup /backup/db && chmod 700 /backup/db - 确保备份脚本以最小权限账户运行(避免用 root 直接执行),且该账户的家目录、shell 配置也已统一设 umask 0077
- 若使用压缩(如 gzip),确认压缩工具不覆盖权限:部分版本 tar 默认保留源权限,但建议显式加
--mode=600参数
验证是否真正生效
别只信配置文件,必须实测:
- 切换到备份用户:
sudo -u backup bash - 执行一次手动备份(或 touch 测试文件):
touch /backup/db/test-$(date +%s) - 检查权限:
ls -l /backup/db/test-*—— 输出必须是-rw------- - 再切另一个普通用户:
sudo -u nobody ls /backup/db/→ 应返回Permission denied











