在 Ubuntu 上限制 SFTP 只能访问指定目录(不能 SSH 登录、不能访问其他目录),最常用、最安全的方法是使用 OpenSSH 自带的 ChrootDirectory 机制。下面给你一套标准、可落地的做法。
/home/sftp/用户名)ssh -V
一般 Ubuntu 18.04+ 都支持。
sudo useradd -m -s /usr/sbin/nologin sftpuser
-m:创建家目录/usr/sbin/nologin:禁止 SSH 登录sudo passwd sftpuser
⚠️ Chroot 目录必须归 root 所有,且不能被其他用户写入
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
✅ 用户登录后:
/sftp/sftpuser 是 根目录 /upload编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
❗ 不要用
Subsystem sftp /usr/lib/openssh/sftp-server
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果你有多个用户,可以用组方式:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
sudo systemctl restart sshd
sftp sftpuser@服务器IP
✅ 成功表现:
pwd 显示 /upload/etc、/home 等bad ownership or modes for chroot directory
✅ 原因:
755✅ 修复:
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
Permission denied
✅ 原因:
✅ 解决:
mkdir upload
chown sftpuser:sftpuser upload
✅ 多用户使用 组管理
sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser
✅ 禁止 SFTP 用户查看系统用户
sudo chmod 750 /home/*
✅ 使用密钥登录(可选)
sudo mkdir /sftp/sftpuser/.ssh
sudo cp id_rsa.pub /sftp/sftpuser/.ssh/authorized_keys
sudo chown -R root:root /sftp/sftpuser/.ssh
| 项目 | 要求 |
|---|---|
| Chroot 目录 | root 所有 |
| 可写目录 | 用户所有 |
| SSH 登录 | nologin |
| SFTP | internal-sftp |
如果你需要:
可以直接告诉我你的使用场景,我可以给你定制方案。