温馨提示×

ubuntu sftp怎样限制目录

小樊
49
2026-10-16 23:50:01
栏目: 智能运维

在 Ubuntu 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能跳出目录),通常使用 OpenSSH 的 internal-sftp + Chroot 方式。下面是最常见、最稳妥的做法。


一、准备工作

假设:

  • 用户名:sftpuser
  • 限制目录:/data/sftp/sftpuser
  • 该用户只能通过 SFTP 访问,不能 SSH

二、创建用户和目录

sudo mkdir -p /data/sftp/sftpuser
sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser

-s /usr/sbin/nologin 禁止 SSH 登录


三、设置目录权限(非常关键)

Chroot 目录必须归 root 所有,且其他用户不可写

sudo chown root:root /data/sftp
sudo chmod 755 /data/sftp

sudo chown root:root /data/sftp/sftpuser
sudo chmod 755 /data/sftp/sftpuser

如果你想让用户能上传文件,需要再建一个子目录:

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

四、修改 SSH 配置

编辑配置文件:

sudo nano /etc/ssh/sshd_config

1. 注释或确认这一行

# Subsystem sftp /usr/lib/openssh/sftp-server

2. 添加 internal-sftp

Subsystem sftp internal-sftp

3. 在文件末尾添加

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

如果有多个用户,可以用组:

Match Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp

五、重启 SSH

sudo systemctl restart ssh

六、测试 SFTP

sftp sftpuser@服务器IP

✅ 成功限制在该目录
❌ 无法 cd / 或 SSH 登录


七、常见问题

1. 登录报错

fatal: bad ownership or modes for chroot

原因:Chroot 目录不是 root 拥有,或权限太大
解决:确保 /data/sftp/sftpuser 是 root:root,权限 755


2. 用户不能上传

  • Chroot 目录本身不能写
  • 只能在子目录(如 upload)中写

3. 想限制多个用户

  • 建一个组 sftp
  • 把用户加入组
  • 用 Match Group sftp

如果你告诉我:

  • 是 单用户 / 多用户
  • 是否允许 写权限
  • 是否用 密码 / 密钥

我可以给你更精确的配置。

0 踩