You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync访问指定目录权限被拒,如何实现特定用户仅下载Web服务器指定目录文件

rsync访问指定目录权限被拒,如何实现特定用户仅下载Web服务器指定目录文件

我来帮你梳理问题并解决这个权限和访问限制的问题:

问题根源分析

你遇到的第一个错误(Permission denied)核心原因是Linux文件系统的路径遍历机制:要访问/var/www/example.com/Downloader,用户Downloader必须对路径上的每一级父目录(/var、/var/www、/var/www/example.com)拥有执行权限(x)(目录的x权限代表“可遍历进入”,而非执行文件)。

当前/var/www/example.com的权限是750,其他用户(包括Downloader)没有任何权限,所以Downloader连进入这个父目录都做不到,更别说访问里面的子目录了。而你发现的rsync拉取根目录问题,是因为没有限制Downloader用户的ssh操作范围,导致它可以随意指定路径。


分步解决方案

1. 修复父目录的遍历权限

给/var/www/example.com添加其他用户的执行权限,这样Downloader能进入父目录,但无法列出目录内容(因为没有读权限),既满足遍历需求,又不会泄露其他文件:

sudo chmod o+x /var/www/example.com

此时你可以切换到Downloader用户测试:

su - Downloader
cd /var/www/example.com/Downloader
# 应该能正常进入,不会报错

2. 限制Downloader仅能访问指定目录(防止拉取根目录)

单纯修复权限还不够,我们需要通过SSH强制命令限制Downloader只能用rsync访问目标目录,不能执行其他操作。这里用rsync官方提供的rrsync脚本实现:

第一步:安装rrsync脚本

Debian 11默认可能没有这个脚本,执行以下命令安装:

sudo cp /usr/share/doc/rsync/examples/rrsync /usr/bin/
sudo chmod +x /usr/bin/rrsync
第二步:修改SSH配置

编辑sshd_config,添加针对Downloader的限制规则:

sudo nano /etc/ssh/sshd_config

在文件末尾添加:

Match User Downloader
    PasswordAuthentication no  # 禁止密码登录,强制用密钥更安全
    PubkeyAuthentication yes
    ForceCommand /usr/bin/rrsync /var/www/example.com/Downloader/
第三步:重启SSH服务使配置生效
sudo systemctl restart sshd

测试验证

现在执行你的rsync命令,无论是指定完整路径还是写根路径,都会被限制到目标目录:

rsync -arzvP Downloader@example.com:/var/www/example.com/Downloader/ ./
# 或者即使写根路径,也只会拉取指定目录内容
rsync -arzvP Downloader@example.com:/ ./

此时应该能正常下载文件,且无法访问目标目录以外的任何内容。


额外说明

  • 为什么设置家目录没用?家目录只是用户登录后的默认工作目录,但要到达家目录,必须先能遍历所有父目录,所以父目录的权限是前提。
  • rrsync的作用是严格限制rsync的访问路径,即使用户尝试指定其他目录,也会被强制映射到你设置的目标目录,彻底杜绝越权访问。

备注:内容来源于stack exchange,提问作者Chiwda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:43:04