在 Ubuntu 上限制 SFTP 用户只能访问指定目录(不能访问系统其他目录),通常通过 OpenSSH 的 ChrootDirectory 来实现。下面给你一套常用、可靠、可操作的做法。
ChrootDirectory 把用户“锁”在某个目录sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
⚠️ Chroot 目录必须属于 root,且其他用户不能有写权限
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果有多个用户,可以:
Match Group sftp
并:
sudo groupadd sftp
sudo usermod -aG sftp sftpuser
sudo systemctl restart ssh
sftp sftpuser@your_server_ip
登录后:
/ 实际是 /sftp/sftpuserupload 目录上传/下载/home、/etc 等系统目录查看日志:
sudo tail -f /var/log/auth.log
常见原因:
ChrootDirectory 不是 root 所有755/sftp/
├── user1
│ └── upload
├── user2
└── upload
chmod 555 /sftp/sftpuser
Match User sftpuser
ChrootDirectory /sftp/sftpuser
AllowUsers sftpuser@192.168.1.0/24
✅ 最推荐方式:
internal-sftp + ChrootDirectory
✅ 安全、简单、官方支持
❌ 不要用第三方 FTP 服务(除非必要)
如果你愿意,可以告诉我:
我可以帮你写一份完整可直接用的配置。