You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SFTP服务器只读用户指定文件夹权限配置失效问题排查

SFTP服务器只读用户指定文件夹权限配置失效问题排查

看起来你踩了几个SFTP配置里的常见小坑,我来帮你一步步梳理和解决:

1. 最明显的问题:匹配的用户名写错了!

你创建的只读用户是ro_user,但在sshd_config里写的是Match User gleam_ro——这两个名字完全不匹配,SFTP自然不会应用这个专属配置,还是沿用了sftp_only组的原有规则,导致用户能访问整个/srv/sftp/project_data目录。

修复方法:把配置里的gleam_ro改成ro_user;如果之后要加多个只读用户,也可以改成Match Group(比如新建一个ro_sftp组,把所有只读用户加进去,然后写Match Group ro_sftp)。

2. ChrootDirectory的权限不符合SFTP要求

SFTP的Chroot目录有非常严格的权限限制,这是很多人容易忽略的点:

  • 你指定的ChrootDirectory(也就是/srv/sftp/project_data/data)必须由root用户完全拥有
  • 目录权限不能开放写权限给组或其他用户(推荐设置为755
  • 它的所有上级目录(比如/srv/sftp/project_data/srv/sftp)也必须满足「所有者是root,无其他用户写权限」的要求

检查并修复权限的命令

# 查看目录权限和所有者
ls -ld /srv/sftp/project_data/data
ls -ld /srv/sftp/project_data

# 如果所有者不是root,修改所有者
sudo chown root:root /srv/sftp/project_data/data
sudo chown root:root /srv/sftp/project_data

# 设置正确的权限
sudo chmod 755 /srv/sftp/project_data/data
sudo chmod 755 /srv/sftp/project_data

3. 确保用户真的只有只读权限

即使Chroot到指定目录,还要保证用户对该目录下的内容只有读权限。因为你把ro_user加入了sftp_only组,需要检查目录的组权限:

# 递归设置目录及所有子内容的组权限为只读
sudo chmod -R g=r /srv/sftp/project_data/data
# 如果需要其他用户也只读,也可以设置o=r,但通常组权限足够

4. 验证配置并重启服务

修改完sshd_config后,先别着急重启,先检查配置有没有语法错误:

sudo sshd -t

如果没有输出任何错误信息,再重启sshd服务:

# 系统d环境(比如Ubuntu 16.04+、CentOS 7+)
sudo systemctl restart sshd
# 老版本SysVinit环境
sudo service ssh restart

最后提醒你:当用户通过SFTP登录后,他看到的「根目录/」其实就是你指定的/srv/sftp/project_data/data,这是Chroot的正常效果,不是配置错误哦。

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

火山引擎 最新活动