我正在使用rsync --rsh "ssh"
它来推送到镜像。在镜像上设置必要的文件系统权限需要rsync
在镜像上以 root 权限运行。但是,镜像文件位于单个层次结构下,我希望rsync
只允许访问该层次结构,而不访问镜像上的其他内容。
我如何才能rsync
设置权限并限制访问?
rsync --rsh "???"
是否有可能将和command="???"
中的选项组合起来authorized_keys
使用?该rsync
命令已使用 中的专用键authorized_keys
。
或者有没有办法以rsync
非特权用户身份连接,被监禁,然后获得设置文件系统权限的权限?监禁该进程很容易,但允许远程rsync
获得特权似乎很难,而允许被监禁的进程获得任何权限似乎很危险。(当然,现在该进程有 root 权限,任何程度的限制都是一个进步,即使只是为了减轻事故。)
答案1
你应该跑步rsync
从你的镜像以你的原件为源。
根据您的使用情况,您应该将其作为cronjob
(定期)或sshkey
命令(推送发起的拉取,实际上是推送)运行。
答案2
要将远程位置 rsync 到本地位置:
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; e.g. 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 工作而不提示输入密码,您需要通过生成 rsa 密钥并将其输入到各自的授权密钥中来配置源服务器和目标服务器之间的信任。这里有一个很好的教程:
答案3
我的具体情况的解决方案是rsync --rsh "ssh"
使用以拥有镜像文件的用户身份进行连接并使用 ssh 配置将该用户 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/