SSH上的RSync – 即使用户位于根组中,权限也会被拒绝

我需要通过networking在服务器之间复制文件。 我通过SSH使用RSYNC来做到这一点。 问题是,我需要能够传输文件,无论文件在哪里。

我创build了一个用户rsync和: usermod -G root -a rsync ,使他有权在两台服务器上的任何地方读/写。

在传输过程中,我看到这个错误:

rsync: mkstemp "/root/.myFile.RDr2HY" failed: Permission denied (13) 

我不明白发生了什么事。

编辑:我刚刚发现目标文件夹没有根组的写入权限。 我将如何给这个rsync用户100%的访问权限? 如果我将其uid更改为0,rsync停止工作。

你所做的是, usermod -G root -a rsync ,是将rsync用户添加到根组。 这对大多数系统没有任何影响,因为根组不是特殊的。 有一些系统需要将root用户升级到root用户,但是永远不够(根用户组是可以使用sudo的用户组,或者一些等同的设置)。

就安全性而言,赋予用户在任何位置写入文件的权限,完全等同于赋予该用户权力。 (用户可以覆盖/bin/su/etc/passwd/usr/sbin/sshd ,或其他任何可以让她为自己设置后门的程序和数据库。

如果您需要通过ssh访问任意文件,请以root用户身份loginsshlogin名。 没有密码(或者是一个长的随机产生的密码),只需要一个密钥(当然你需要仔细保护)。 在/etc/sshd_config ,放

 PermitRootLogin yes 

允许任意文件访问的另一种方法是通过文件系统上的POSIX ACL向您的rsync用户授予适当的权限。 我在这里写了一个inheritanceACL的快速总结。

如果您的要求允许用户写入任何文件是准确的,那么可能会有更大的安全问题,可能更谨慎,做别人的build议,只是允许rootlogin – 简单的设置将节省您的时间在未来。

不过,我强烈怀疑你实际上不需要在系统中的任何地方放置文件的能力。 如果是这样的话,你实际上只需要把它们放在一些任意的地方,那么POSIX ACL就可以帮你。

如果你真的需要能够通过这个机制覆盖,例如/ etc / passwd,那么你应该考虑一个不同的方法。 如果您推出包括帐户在内的configuration更改,那么如果您使用像puppet或cfengine这样的configurationpipe理系统,则可以获得更好的时间。 这些将允许您指定configuration更改,然后将其推送到远程系统。