温馨提示×

ubuntu sftp如何设根目录

小樊
57
2026-09-20 14:55:18
栏目: 智能运维

在 Ubuntu 上配置 SFTP 根目录(即用户只能访问指定目录,不能越界),最常用、最安全的方式是使用 OpenSSH 的 internal-sftp + chroot。

下面按步骤说明。


一、核心思路

  • 使用 Subsystem sftp internal-sftp
  • 对用户(或用户组)使用 ChrootDirectory
  • 被 chroot 的目录必须:
    • 属主是 root
    • 权限是 755
    • 用户不能直接写根目录(需再建子目录)

二、创建 SFTP 用户

sudo adduser sftpuser

(可不设置 shell,后面会改)


三、创建 SFTP 根目录

假设根目录为 /sftp:

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

用户实际可写目录:

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

四、修改 SSH 配置

编辑配置文件:

sudo nano /etc/ssh/sshd_config

1. 修改 SFTP 子系统

找到或替换为:

Subsystem sftp internal-sftp

2. 添加 SFTP 限制配置

在文件末尾添加:

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

如果是 一组用户:

Match Group sftp
    ChrootDirectory /sftp
    ForceCommand internal-sftp

然后建组并把用户加入:

sudo groupadd sftp
sudo usermod -aG sftp sftpuser

五、禁止 SFTP 用户登录 Shell(可选但推荐)

sudo usermod -s /usr/sbin/nologin sftpuser

六、重启 SSH

sudo systemctl restart ssh

七、测试 SFTP

sftp sftpuser@服务器IP

登录后:

  • 根目录就是 /sftp
  • 只能访问 /sftp/upload
  • 不能访问 /home、/etc 等

八、常见问题

❌ 登录失败(permission denied)

原因通常是:

  • ChrootDirectory 不是 root 拥有
  • 权限不是 755

❌ 无法上传文件

  • 不能往 /sftp 直接写
  • 必须上传到 /sftp/upload

九、多用户不同根目录(进阶)

Match User user1
    ChrootDirectory /sftp/user1

Match User user2
    ChrootDirectory /sftp/user2

如果你愿意,我可以:

  • 给你一个 完整可直接用的配置模板
  • 或针对 Docker / 云服务器 / 多用户隔离 场景说明

0 踩