试图设置chroot的rsync

我正在尝试build立一个备份服务器。 我想chroot每个用户(客户端)到其主目录,只允许它使用sftprsync

我很快发现,我并不是唯一一个试图做这样的事情,我发现这个指南,并遵循它。 所以现在我只有使用sftp的chroot用户。

然后我发现rsync需要ssh在其他机器上产生,而sftp是不够的。 给每个用户一个sshlogin是我想要避免的东西。

谁能想到一些可能的解决scheme?

谢谢,

标记

sftp解决scheme需要每个人都有一个sshlogin,所以你没有真正在这里丢失任何东西。 授予ssh访问权限并不一定意味着完全的shell访问,例如, 这显示了如何使用ssh authorized_keys文件来允许通过rsync进行备份,同时将可用命令限制在rsync接收器。

事实上,如果您select基于密钥的身份validation,而不是密码身份validation(您应该),那么您可以在一个用户帐户下运行所有​​内容,而不需要多个帐户。 您将使用密钥来识别远程用户,并将rsync接收器指向特定的目录。

像这样,在你的authorized_keys文件中:

 command="/usr/bin/rsync --server -a . /tmp/user1" ssh-rsa ... user1 command="/usr/bin/rsync --server -a . /tmp/user2" ssh-rsa ... user2 

使用user1私钥的user1将备份到/tmp/user1 ,使用user2私钥的用户将备份到/tmp/user2 。 等等…

执行从客户端到远程服务器的通常rsync ,但添加额外的详细交换机: SSH -v ,然后grep用于Sending command 。 你会看到确切的命令客户端正在发送到远程服务器:

 rsync -avz -e'ssh -v -i /ssh-keys/clientprivate.key' --bwlimit=8000 --delete root@server:/path/ /backup/myserver/ 2>&1 | grep "Sending command" 

就我而言,是的

 rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path 

将此作为command="..."到远程服务器/home/USER/.ssh/authorized_keys文件中作为@larsks提到。 添加附加的安全设置,如有必要:

no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server

全部一起:

 command="rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /backup/path",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAAB3NzaC1yc2..CPhIJ+LVULWz arnis@server 

(从非常好的教程http://en.positon.org/post/Rsync-command-restriction-over-SSH

您将需要提供某种forms的shell访问才能使用rsync,除非您直接连接到rsync服务器 – 默认端口是873(TCP)。

从rysnc手册页 :

有两种不同的方式可以联系远程系统:使用远程shell程序作为传输(如ssh或rsh)或直接通过TCP联系rsync守护进程。 只要源或目标path在主机规范之后包含单个冒号(:)分隔符,就使用远程shell传输。 当源或目标path在主机规范之后包含双冒号(::)分隔符时,或者当指定rsync:// URL时,直接联系rsync守护进程(另请参阅lqUSING RSYNC-DAEMON FEATURES VIA A REMOTE-SHELL CONNECTIONrq部分,对于后面的规则是个例外)。

要提供有限的shell访问权限,请考虑以下指南 。 (注:原来的链接已经死了)总结:

该设置结合了rsync,SSH和chroot的最佳function。 Rsync提供文件传输的灵活性和效率,SSH保护正在传输的数据,并且chroot保护服务器上的数据免受未经授权的访问。 dummysh只能限制对rsync的访问。

虽然rsync服务器实现了chroot,但它缺less通常需要的SSH保护。 此外,打开一个额外的rsync服务器端口存在安全风险,有时在技术上或政治上都是不可能的。 Sftp和scp缺乏rsync提供的灵活性和效率,尤其是在涉及目录树(如Web站点)时。

或者看看使用rssh (这里有一个设置rssh的指南):

rssh是与OpenSSH一起使用的受限shell,只允许scp和/或sftp。 它现在还包括对rdist,rsync和cvs的支持。 例如,如果您只有一台服务器,只允许用户通过scp复制文件,而不提供shell访问权限,则可以使用rssh来执行此操作。

你可以编写一个包装rsync的shell。

看看这里的一般想法: https : //sixohthree.com/1458/locking-down-rsync-using-ssh

在你的包装shell中,你可以做你想做的事情,也许chroot用户。

在我的情况下,我需要使用相同的* nix用户开启虚拟帐户。 我设法使用这种shell加上authorized_keys文件中的许多行。 我没有chrooted用户,但我已经在rsync服务器命令中添加了用户文件夹级别。

使用ssh密钥以不同的方式查看进程用户

具有Rsyncfunction的SFTP,没有shell

您可以在chroot环境中使用LFTP + SFTP,并获得与使用rsync相同的结果,无需向用户提供shell或使用包装器在ssh中执行任何重大定制。

这是更安全的,可以大大加快。