在 Linux 上配置 SFTP 账号,常见且安全的做法是 使用系统用户 + OpenSSH 的 SFTP Chroot(内部 SFTP),而不是给账号 SSH Shell 权限。下面按生产环境常用方案一步一步说明。
# 创建用户
sudo useradd -m -s /sbin/nologin sftpuser
# 设置密码
sudo passwd sftpuser
-s /sbin/nologin:禁止 SSH 登录
-m:自动创建 home 目录
⚠️ Chroot 目录必须归 root 所有,且不能被用户写入
sudo mkdir -p /data/sftp/sftpuser
sudo chown root:root /data/sftp/sftpuser
sudo chmod 755 /data/sftp/sftpuser
sudo mkdir /data/sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /data/sftp/sftpuser/upload
sudo chmod 755 /data/sftp/sftpuser/upload
用户登录后只能操作 upload 目录。
编辑:
sudo vi /etc/ssh/sshd_config
✅ 确认以下配置存在(不要重复)
Subsystem sftp internal-sftp
✅ 添加 SFTP 用户限制
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果使用多个用户,可用
Match Group sftpusers
sudo systemctl restart sshd
sftp sftpuser@服务器IP
/data/sftp/sftpuser
├── upload ← 可写
sudo groupadd sftpusers
sudo usermod -aG sftpusers sftpuser
Match Group sftpusers
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
目录结构:
/data/sftp/user1
/data/sftp/user2
bad ownership or modes for chroot directory
✅ 解决:
chown root:root /data/sftp/user
chmod 755 /data/sftp/user
✅ 确保:
✅ 禁止 SFTP 用户 SSH
✅ 使用非 22 端口
✅ 使用密钥登录(可选)
✅ 配合 fail2ban 防暴力破解
✅ 不同用户隔离目录
如果你愿意,可以告诉我:
我可以给你一份 完全可直接执行的一键配置脚本。