尝试设置 chroot 的 rsync

Mar*_* R. 12 backup ssh rsync chroot sftp

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

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

然后我发现 rsync 需要 ssh 才能在另一台机器上生成自己,而 sftp 是不够的。给每个用户一个 ssh 登录是我首先想避免的。

谁能想到一些可能的解决方案?

谢谢,

标记

lar*_*sks 12

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

事实上,如果您选择基于密钥的身份验证,而不是密码身份验证(您应该这样做),那么您可以在一个用户帐户下运行所有​​内容,而不需要多个帐户。您将使用密钥来识别远程用户,并将 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
Run Code Online (Sandbox Code Playgroud)

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


Arn*_*aga 7

通常rsync从客户端到远程服务器执行,但添加额外的详细 switch: SSH -v,然后 grep for 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"
Run Code Online (Sandbox Code Playgroud)

就我而言,它是

rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path
Run Code Online (Sandbox Code Playgroud)

如@larsks 所述,将此添加command="..."到远程服务器/home/USER/.ssh/authorized_keys文件。如有必要,添加其他安全设置:

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
Run Code Online (Sandbox Code Playgroud)

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