在 Ubuntu 上限制 SFTP 用户只能访问指定目录(即 chroot SFTP),通常使用 OpenSSH 自带的 internal-sftp + ChrootDirectory 来实现,不需要额外安装 FTP 服务。
下面是一套标准、可用、安全的做法。
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
说明:
/usr/sbin/nologin:禁止 SSH 登录,仅允许 SFTPsftpusers:用于统一管理的 SFTP 用户组假设限制目录为 /sftp/sftpuser
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
⚠️ 重要规则:
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpusers /sftp/sftpuser/upload
用户登录后只能看到 upload 目录并可写入。
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
%u会自动替换为用户名(如 sftpuser)
sudo systemctl restart ssh
sftp sftpuser@localhost
登录后:
//sftp/sftpuserupload原因:
✅ 解决:
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
原因:
✅ 解决:
upload 子目录如果你需要 多用户共享目录 / 只读 SFTP / 密钥登录 / Docker 环境,可以继续问我。