在 Debian 上配置 SFTP 组(通常指“只允许 SFTP、禁止 SSH Shell 登录”的用户组),最常用、最安全的方式是使用 OpenSSH 的 internal-sftp + 匹配组配置。
下面给你一套标准可落地的配置步骤。
# 创建 sftp 组
groupadd sftp
# 创建用户(举例:sftpuser)
useradd -m -g sftp -s /usr/sbin/nologin sftpuser
# 设置密码
passwd sftpuser
/usr/sbin/nologin表示禁止登录 shell(只能 SFTP)
OpenSSH 对 SFTP 目录权限有严格要求:
# 假设根目录为 /srv/sftp
mkdir -p /srv/sftp/sftpuser
# 属主必须是 root
chown root:root /srv/sftp
chown root:root /srv/sftp/sftpuser
# 权限不能过于开放
chmod 755 /srv/sftp
chmod 755 /srv/sftp/sftpuser
如果用户需要上传文件,再建子目录:
mkdir /srv/sftp/sftpuser/upload
chown sftpuser:sftp /srv/sftp/sftpuser/upload
chmod 755 /srv/sftp/sftpuser/upload
编辑配置文件:
nano /etc/ssh/sshd_config
# Subsystem sftp /usr/lib/openssh/sftp-server
改为:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
说明:
ChrootDirectory:每个用户被限制在自己的目录%u:用户名(自动替换)ForceCommand internal-sftp:只能 SFTP,不能 SSHsystemctl restart ssh
sftp sftpuser@服务器IP
✅ 成功
❌ 如果失败,看日志:
journalctl -u ssh
# 或
tail -f /var/log/auth.log
bad ownership or modes for chroot原因:
root:root✅ 解决:
chown root:root /srv/sftp/sftpuser
chmod 755 /srv/sftp/sftpuser
检查:
getent passwd sftpuser
shell 必须是:
/usr/sbin/nologin
Match User 精细控制如果你需要:
可以继续问我,我按你的实际使用场景帮你配。