在 Ubuntu 上配置 SFTP 权限,通常分为几种常见场景。下面按最常用、最安全的方式给你讲清楚。
sudo groupadd sftpusers
sudo useradd -m -s /usr/sbin/nologin -g sftpusers sftpuser
sudo passwd sftpuser
⚠️ SFTP 根目录必须属主是 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:sftpusers /sftp/sftpuser/upload
编辑:
sudo nano /etc/ssh/sshd_config
注释或确保不是全局 SFTP:
# Subsystem sftp /usr/lib/openssh/sftp-server
在文件末尾添加:
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
sudo systemctl restart ssh
sftp sftpuser@服务器IP
✅ 只能访问 /sftp/sftpuser
✅ 无法 SSH 登录
✅ 只能上传到 upload
如果只是想让用户用 SFTP 访问自己家目录:
sudo useradd -m sftpuser
sudo passwd sftpuser
默认就支持 SFTP(只要 SSH 开着)
查看:
grep sftp /etc/ssh/sshd_config
通常是:
Subsystem sftp /usr/lib/openssh/sftp-server
✅ 简单
❌ 安全性较低
chmod 555 /sftp/sftpuser/upload
chmod 733 /sftp/sftpuser/upload
sudo chown -R root:sftpusers /sftp/shared
sudo chmod 775 /sftp/shared
原因:
✅ 解决:
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
✅ 上传目录必须:
| 场景 | 方案 |
|---|---|
| 安全对外 SFTP | Chroot + nologin |
| 内部用户 | 普通用户 |
| 只读/只写 | chmod 控制 |
如果你愿意,可以告诉我:
我可以直接给你一份完整配置文件。