我正在使用rsync --rsh "ssh"来推送镜像。 在镜像上设置必要的文件系统权限需要rsync以镜像上的root权限运行。 但是,镜像文件是在一个单一的层次结构,我想允许rsync只访问该层次结构,没有其他的镜像。
我将如何允许rsync设置权限,同时也限制访问?
有没有可能是一些rsync --rsh "???"组合 – rsync --rsh "???" 和command="???" authorized_keys中的选项可能会诀窍吗? rsync命令已经在authorized_keys使用了专用密钥。
或者是有没有办法让rsync作为非特权用户连接,被监禁,然后获得设置文件系统权限的权限? 监狱的进程很简单,但允许远程rsync获得特权似乎很困难,并允许一个被监禁的进程获得任何权限似乎有风险。 (当然,现在这个过程有根源,任何程度的限制都是一个改进,即使只是为了减less事故。)
你应该从镜像中运行rsync作为源代码。
根据您的使用情况,您应该将其作为cronjob (周期性)或sshkey命令(按下发起的拉动,实际上是按下)来运行。
将远程位置同步到本地位置:
rsync -avze ssh user@source:/dir destination
将本地位置rsync同步到远程位置:
rsync -avz source -e ssh user@destination:/dir
从手册页( http://linux.die.net/man/1/rsync ):
-a archive mode; eg copies permissions -v verbose; in case you want to log what gets copied -z compress during transfer -e specify the remote shell to use; let's you use ssh
要让rsync在不提示input密码的情况下工作,您需要通过生成rsa密钥并将其input到其各自的授权密钥中来configuration源服务器和目标服务器之间的信任。 这是一个很好的教程:
在我的情况下,解决scheme是使用rsync --rsh "ssh" 作为应该拥有镜像文件的用户进行连接,并使用sshconfiguration将该用户chroot到正确的层次结构。
在目标服务器上像这样食谱:
useradd user mkdir /home/user/srv/service chown -R root:root /home/user Grant user write permission to /srv/service nano /etc/fstab /srv/service /home/user/srv/service none bind 0 0 mount /srv/service nano /etc/ssh/sshd_config Match User user ChrootDirectory %h service ssh reload nano /home/user/.ssh/authorized_keys Add public key for remote user.
最后,从远程系统,作为非特权用户,将数据推送到镜像:
rsync --archive --rsh "ssh" --compress /srv/service/ user@server:/srv/service/