温馨提示×

ubuntu sftp如何限制目录

小樊
33
2026-09-02 06:55:53
栏目: 智能运维

在 Ubuntu 上限制 SFTP 用户只能访问指定目录(不能访问系统其他目录),通常通过 OpenSSH 的 ChrootDirectory 来实现。下面给你一套常用、可靠、可操作的做法。


一、核心思路

  • 使用 SFTP 子系统(internal-sftp)
  • 通过 ChrootDirectory 把用户“锁”在某个目录
  • 用户不能 SSH 登录,只能 SFTP
  • 目录权限必须严格符合要求(否则无法登录)

二、创建 SFTP 用户和目录

1. 创建用户(不允许登录 shell)

sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser

2. 创建目录结构

sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser

⚠️ Chroot 目录必须属于 root,且其他用户不能有写权限

3. 创建可写子目录

sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload

三、配置 SSH(关键)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1. 确认 SFTP 子系统存在

Subsystem sftp internal-sftp

2. 在文件末尾添加

Match User sftpuser
    ChrootDirectory /sftp/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

如果有多个用户,可以:

Match Group sftp

并:

sudo groupadd sftp
sudo usermod -aG sftp sftpuser

四、重启 SSH

sudo systemctl restart ssh

五、测试 SFTP

sftp sftpuser@your_server_ip

登录后:

  • ✅ 只能看到 / 实际是 /sftp/sftpuser
  • ✅ 可在 upload 目录上传/下载
  • ❌ 无法访问 /home/etc 等系统目录

六、常见错误排查

❌ 登录失败 / 立刻断开

查看日志:

sudo tail -f /var/log/auth.log

常见原因:

  • ChrootDirectory 不是 root 所有
  • 权限不是 755
  • 用户有写权限在 chroot 目录

七、进阶(可选)

1. 多用户共享目录

/sftp/
 ├── user1
 │    └── upload
 ├── user2
      └── upload

2. 只读用户

chmod 555 /sftp/sftpuser

3. 限制 IP(可选)

Match User sftpuser
    ChrootDirectory /sftp/sftpuser
    AllowUsers sftpuser@192.168.1.0/24

八、总结

✅ 最推荐方式:
internal-sftp + ChrootDirectory

✅ 安全、简单、官方支持
❌ 不要用第三方 FTP 服务(除非必要)


如果你愿意,可以告诉我:

  • Ubuntu 版本
  • 单用户 / 多用户
  • 是否需要写权限 / 只读

我可以帮你写一份完整可直接用的配置

0