应使用专用低权用户执行备份脚本,严格限制其权限:脚本与配置文件隔离且不可写,定时任务显式指定执行用户,备份路径启用安全挂载选项并生成校验码。

限制备份脚本的系统权限,关键不是让它“能运行”,而是确保它“只能做该做的事”——不越权读取、不擅自修改、不暴露凭证、不被篡改。核心落在执行主体、脚本自身、调度机制、存储路径四个环节的权限收敛。
用专用低权用户替代 root 执行
root 运行备份脚本等于把整台服务器的钥匙交给它。应创建无登录能力的专用用户,仅授予最小必要权限:
- 运行
useradd -r -s /usr/sbin/nologin backupuser创建系统级低权账户 - 用
chown -R backupuser:backupuser /opt/backup/scripts/ /backup/dest/归属脚本与目标路径 - 若需读取 root 拥有的数据库配置,用
setfacl -m u:backupuser:r-- /etc/db.conf授予只读,而非 chmod 644 或加到 root 组 - 禁止该用户任何 shell 交互、sudo 权限或网络连接能力
脚本与配置文件必须隔离且不可写
攻击者一旦改写脚本,就能跳过加密、删除校验、回传数据。防护重点是“防改”而非“防读”:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 脚本文件设为
chmod 600 /opt/backup/backup.sh,所在目录权限为755且属主为 root(非 backupuser) - 含密码或密钥的配置文件(如
cred.conf)必须与脚本分离存放,同样设600,属主为 backupuser - 禁用
/tmp或/var/tmp存放临时配置;确需生成临时文件,用mktemp -d创建后立即chmod 700
定时任务必须显式声明执行上下文
crontab 或 systemd 若未指定用户,会默认以当前编辑者或 root 身份运行,直接绕过前面所有权限设计:
- 避免使用用户级 crontab(
crontab -e),统一走系统级调度:/etc/cron.d/backup-job - 文件首行注明
SHELL=/bin/bash,任务行明确指定用户:0 2 * * * backupuser /opt/backup/backup.sh > /var/log/backup.log 2>&1 - systemd 更推荐:在
.service文件中设置User=backupuser、NoNewPrivileges=true、ProtectSystem=strict - 日志路径
/var/log/backup.log需由 root 提前创建并chown backupuser:backupuser,权限设为644或600
备份输出路径需写保护与介质隔离
备份数据本身若可被覆盖或误删,再完善的脚本也失去意义。输出路径要兼顾防篡改与防共用:
- 目标目录(如
/backup/)挂载时启用noexec, nosuid, nodev选项,防止意外执行或提权 - 每日增量备份使用硬链接复用全量基础,避免重复占用空间,同时通过
--link-dest保证路径权限继承一致 - 每个备份集生成 SHA256 校验码:
sha256sum full_20260615.tar.gz > full_20260615.sha256,校验文件权限也设为600 - 备份介质物理隔离:挂载远程 NFS 或对象存储时,使用只读挂载(
ro)或定期 umount,避免在线写入风险










