我需要通过 Web 在服务器之间复制文件。我使用 RSYNC over ssh 来实现这一点。问题是,我需要能够传输文件,无论文件在哪里。
我创建了一个用户 rsync 并且:用户模式-G root-a rsync赋予他在两台服务器上任何位置进行读/写的权限。
在传输过程中,我看到此错误:
rsync: mkstemp "/root/.myFile.RDr2HY" failed: Permission denied (13)
我不明白发生了什么事。
编辑:我刚发现目标文件夹没有 root 组的写访问权限。我该如何授予此 rsync 用户 100% 的访问权限?如果我将其 uid 更改为 0,rsync 将停止工作。
答案1
您所做的usermod -G root -a rsync
就是将rsync
用户添加到 root 组。这在大多数系统上没有任何影响,因为 root 组并不特殊。有些系统要求用户属于 root 组必要的将权限升级到 root 用户,但这永远不够(root 组是可能使用sudo
或某些等效设置的用户组)。
从安全性角度来说,授予用户在任何地方写入文件的权限与授予该用户 root 权限完全相同。(用户可以覆盖/bin/su
、或/etc/passwd
、/usr/sbin/sshd
或或任何其他程序和数据库,从而为自己设置后门。)
如果您需要通过 ssh 访问任意文件,请允许 ssh 以 root 身份登录。不用密码(或者随机生成的长密码),只需使用密钥(当然,您需要小心保护密钥)。在 中/etc/sshd_config
输入
PermitRootLogin yes
答案2
允许任意文件访问的另一种方法是通过文件系统上的 POSIX ACL 授予 rsync 用户适当的权限。我写了一篇关于继承 ACL 的简要总结这里。
如果您允许用户写入任何文件的要求是准确的,那么可能会有更大的安全问题,并且按照其他人的建议去做并只允许根登录可能会更加谨慎 - 保持设置简单将节省您将来的时间。
然而,我强烈怀疑您实际上并不需要将文件放在系统上任何地方的能力。如果是这样,而您实际上只需要能够将它们放在任意数量的任意位置,那么 POSIX ACL 可能会帮助您。
如果您确实需要能够通过此机制覆盖 /etc/passwd 等文件,那么您应该考虑采用其他方法。如果您要推出包括帐户在内的配置更改,那么使用配置管理系统(例如木偶或者CF引擎。这些将允许您指定配置更改,然后将其推送到远程系统。