在 Ubuntu 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能越权),常用且安全的做法是使用 OpenSSH 的 internal-sftp + chroot。下面按“最常用方案”给你讲。
ChrootDirectory 将其“锁”在某个目录sudo adduser sftpuser
(密码自己设)
禁止 SSH 登录(可选但推荐):
sudo usermod -s /usr/sbin/nologin sftpuser
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp /sftp/sftpuser
sudo chmod 755 /sftp /sftp/sftpuser
⚠️ 重点:
/sftp/sftp/sftpuser都必须是 root:root,755
chroot 目录本身不能写,所以要建子目录:
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
用户登录后只能看到 upload
编辑:
sudo nano /etc/ssh/sshd_config
注释或删除:
# Subsystem sftp /usr/lib/openssh/sftp-server
添加:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果是多个用户,可用:
Match Group sftp
sudo systemctl restart ssh
sftp sftpuser@服务器IP
登录后:
pwd
# 显示 /upload
✅ 无法访问 /home、/ 等
检查:
sudo ls -ld /sftp /sftp/sftpuser
必须是:
drwxr-xr-x root root
确认:
/sftp/sftpuser 不能写
/sftp/sftpuser/upload 可写
Match Group sftpchmod 555ForceCommand internal-sftp -l INFO如果你愿意,可以告诉我:
我可以直接给你一份「可复制的配置」。