我正在尝试设置备份服务器。我想chroot每个用户(客户端)到其主目录,并且只允许它使用安全FTP和同步。
我很快发现,我并不是唯一一个尝试做这样的事情的人,我发现本指南并遵循它。所以现在我只有使用 sftp 的 chroot 用户。
然后我发现 rsync 需要 ssh 才能在另一台机器上启动,而 sftp 是不够的。我本来就不想让每个用户都使用 ssh 登录。
谁能想到一些可能的解决方案?
谢谢你,
标记
答案1
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
使用私钥的人user1
会将备份到/tmp/user1
,使用user2
私钥的人会将备份到/tmp/user2
。 依此类推...
答案2
执行rsync
从客户端到远程服务器的常规操作,但添加额外的详细开关: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"
就我而言,
rsync --server -vvlogDtprze.iLsf --bwlimit=8000 --delete . /path
按照@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
(摘自非常好的教程http://en.positon.org/post/Rsync-command-restriction-over-SSH)
答案3
您将需要提供某种形式的 shell 访问权限才能使用 rsync,除非您直接连接到 rsync 服务器 - 默认端口为 873(TCP)。
来自rysnc 手册页:
rsync 有两种不同的方式联系远程系统:使用远程 shell 程序作为传输(例如 ssh 或 rsh)或直接通过 TCP 联系 rsync 守护程序。只要源路径或目标路径在主机规范后包含单个冒号 (:) 分隔符,就会使用远程 shell 传输。如果源路径或目标路径在主机规范后包含双冒号 (::) 分隔符,或者指定了 rsync:// URL,就会直接联系 rsync 守护进程(另请参阅 lq通过远程 shell 连接使用 RSYNC-DAEMON 功能rq 部分,了解后一条规则的例外情况)。
要提供有限的 shell 访问权限,请考虑以下内容指导.(注:原链接已失效)摘要:
此设置结合了 rsync、SSH 和 chroot 的最佳功能。Rsync 提供文件传输的灵活性和效率,SSH 保护正在传输的数据,chroot 保护服务器上的数据免受未经授权的访问。dummysh 仅限制对 rsync 的访问。
虽然 rsync 服务器实现了 chroot,但它缺乏通常需要的 SSH 保护。此外,打开额外的 rsync 服务器端口会带来安全风险,有时在技术上或政策上都是不可能的。sftp 和 scp 缺乏 rsync 提供的灵活性和效率,尤其是在涉及目录树(例如网站)时。
rssh 是用于 OpenSSH 的受限 shell,仅允许 scp 和/或 sftp。它现在还支持 rdist、rsync 和 cvs。例如,如果您有一台服务器,您只希望允许用户通过 scp 复制文件,而不提供 shell 访问权限,则可以使用 rssh 来执行此操作。
答案4
您可以编写一个包装 rsync 的 shell。
看看这里的总体思路:https://sixohthree.com/1458/locking-down-rsync-using-ssh
在您的包装外壳中,您可以做您想做的事情,甚至可以 chroot 用户。
在我的例子中,我需要使用相同的 *nix 用户来打开虚拟帐户。我设法使用这种 shell 以及 authorized_keys 文件中的许多行来实现这一点。我没有 chroot 用户,但我在 rsync 服务器命令中添加了一个用户文件夹级别。