最安全做法是为备份账号授予 tar 和 rsync 的有限 sudo 权限:先创建 backup 用户并加入 sudo 或 wheel 组;再用 sudo visudo 添加精确白名单规则,如 backup ALL=(root) NOPASSWD: /bin/tar -cf , /bin/tar -czf , /usr/bin/rsync -a --delete *;务必用绝对路径、禁用危险参数,最后测试命令执行与日志审计。

直接给备份账号授予 tar 和 rsync 的有限 sudo 权限,是最安全、最符合最小权限原则的做法。不建议直接给 ALL 权限或长期使用 root 登录。
确认备份账号已存在并加入基础组
先确保该账号已创建,并加入系统默认的管理组(如 sudo 或 wheel),这是后续细粒度授权的前提:
- 添加用户(如名为
backup):sudo useradd -m -s /bin/bash backup - 设密码(可选,若仅用密钥或免密执行):
sudo passwd backup - 加入组(Ubuntu/Debian 用
sudo,RHEL/CentOS/Fedora 用wheel):sudo usermod -aG sudo backup(或wheel) - 验证:
su - backup -c "groups",输出中应含sudo或wheel
用 visudo 配置精确命令白名单
运行 sudo visudo,在文件末尾添加一行(注意:必须用绝对路径,避免路径欺骗):
backup ALL=(root) NOPASSWD: /bin/tar, /usr/bin/rsync
说明:
-
backup:用户名 -
ALL:适用于所有主机(单机环境可保留) -
(root):以 root 身份执行(因备份常需读取受限目录、保留权限等) -
NOPASSWD::免输密码(适合脚本自动调用;如需审计或增强安全,可去掉此项) -
/bin/tar和/usr/bin/rsync:务必用which tar和which rsync确认真实路径,不同发行版可能略有差异(如 CentOS 中 rsync 在/usr/bin/rsync,极少数旧系统可能在/usr/local/bin)
支持常用参数与安全限制
仅允许执行命令本身还不够,要让备份脚本能实际工作,需放宽对参数的限制(但不能过度开放)。推荐写法:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
backup ALL=(root) NOPASSWD: /bin/tar -cf *, /bin/tar -czf *, /bin/tar -xzf *, /usr/bin/rsync -a --delete *, /usr/bin/rsync -avz *
这样可覆盖典型场景:
-
tar -czf backup.tar.gz /data(打包压缩) -
tar -xzf backup.tar.gz -C /restore(解压还原) -
rsync -a --delete /src/ /dst/(带删除的归档同步) -
rsync -avz -e "ssh -p 2222" /src/ user@host:/dst/(远程压缩传输)
⚠️ 注意:
• 不要写成 /usr/bin/rsync *,否则可能被利用执行 rsync --rsync-path="sh -i" ... 等危险操作;
• 若需 SSH 远程同步,确保目标主机的 SSH 密钥已由 backup 用户配置好(如 ~backup/.ssh/id_rsa),且 rsync 命令中不包含任意 shell 注入点。
测试与验证权限是否生效
切换到备份账号,测试能否无密码执行关键命令:
-
su - backup -c "sudo -n tar --version"(-n表示不提示输密码,失败即报错) su - backup -c "sudo -n rsync --version"- 模拟一次小范围备份:
su - backup -c "sudo tar -czf /tmp/test-backup.tgz /etc/hostname 2>/dev/null && echo 'OK' || echo 'FAIL'"
若全部返回 OK,说明配置成功。日志可查 /var/log/auth.log 或 /var/log/secure 中 sudo 记录,用于审计。










