温馨提示×

Ubuntu SFTP如何配置Chroot

小樊
49
2026-08-17 02:27:04
栏目: 智能运维

在 Ubuntu 上配置 SFTP + Chroot(限制用户只能访问指定目录),通常使用 OpenSSH 内置的 ChrootDirectory 功能,而不是传统的 FTP。下面给你一套完整、可落地、安全的配置步骤。


一、核心思路

  • 使用 OpenSSH 自带的 sftp-server
  • 通过 ChrootDirectory 限制用户根目录
  • Chroot 目录必须由 root 拥有,且其他用户不可写
  • 在 Chroot 目录内再创建可写子目录

二、安装 OpenSSH(一般已安装)

sudo apt update
sudo apt install openssh-server

检查状态:

systemctl status sshd

三、创建 SFTP 用户和目录

1️⃣ 创建用户(不允许 SSH 登录)

sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser

2️⃣ 创建 Chroot 根目录

Chroot 目录必须属于 root,且权限 ≤ 755

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

3️⃣ 创建可写目录

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

用户登录后:

  • //sftp/sftpuser
  • 只能写 upload

四、配置 SSH(关键)

编辑配置文件:

sudo nano /etc/ssh/sshd_config

1️⃣ 确保 SFTP 子系统启用

(通常已有)

Subsystem sftp internal-sftp

2️⃣ 添加 Chroot 配置(推荐放文件末尾)

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

如果你要 限制一组用户

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

五、重启 SSH 服务

sudo systemctl restart sshd

六、测试 SFTP

sftp sftpuser@服务器IP

登录后:

pwd
# 显示 /
ls
# 只能看到 upload

七、常见问题排查

❌ 登录失败 / 无法 chroot

常见原因:

问题 原因
chroot 目录不是 root 拥有 必须 root:root
chroot 目录权限 > 755 必须 ≤ 755
家目录在 chroot 外 用户家目录应指向 chroot
SELinux Ubuntu 默认无,除非你启用了

查看日志:

sudo journalctl -u sshd -f

八、推荐安全配置(可选)

禁止密码登录(仅密钥)

PasswordAuthentication no

限制 IP 访问

Match User sftpuser
    ChrootDirectory /sftp/sftpuser
    ForceCommand internal-sftp
    AllowUsers sftpuser

九、总结(速查)

✅ 必须记住的 3 个关键点:

  1. Chroot 目录 = root 拥有 + 755
  2. 用户只能写子目录
  3. 使用 internal-sftp

如果你需要:

  • 多用户 Chroot
  • 只读 SFTP
  • 结合 Nginx / Web 目录
  • Docker / 云服务器配置

可以直接告诉我你的使用场景,我可以给你定制方案。

0