在 Ubuntu 上配置 SFTP 用户(通常是为了限制用户只能通过 SFTP 访问,而不能 SSH 登录),可以按照下面的步骤来操作。
sudo adduser sftpuser
按提示设置密码和用户信息(可一路回车)。
推荐目录结构(安全做法):
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
⚠️ 注意:
SFTP 根目录(/sftp/sftpuser)必须属于 root,否则 Chroot 会失败。
创建用户可写目录:
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
X11Forwarding no
AllowTcpForwarding no
如果你想 限制一组用户,可以用:
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
然后:
sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser
sudo systemctl restart ssh
在本地或另一台机器:
sftp sftpuser@服务器IP
✅ 成功登录
❌ 如果报错 broken pipe,通常是目录权限问题(不是 root 拥有)
sudo usermod -s /usr/sbin/nologin sftpuser
fatal: bad ownership or modes for chroot/sftp/sftpuser 必须是 root:root755upload 这类子目录中上传adduser sftpuser
mkdir -p /sftp/sftpuser/upload
chown root:root /sftp/sftpuser
chown sftpuser:sftpuser /sftp/sftpuser/upload
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
systemctl restart ssh
如果你需要:
可以告诉我,我可以直接给你一份完整配置。