温馨提示×

debian sftp组怎么配置

小樊
45
2026-10-12 10:36:27
栏目: 智能运维

在 Debian 上配置 SFTP 组(通常指“只允许 SFTP、禁止 SSH Shell 登录”的用户组),最常用、最安全的方式是使用 OpenSSH 的 internal-sftp + 匹配组配置。

下面给你一套标准可落地的配置步骤。


一、创建 SFTP 用户和组

# 创建 sftp 组
groupadd sftp

# 创建用户(举例:sftpuser)
useradd -m -g sftp -s /usr/sbin/nologin sftpuser

# 设置密码
passwd sftpuser

/usr/sbin/nologin 表示禁止登录 shell(只能 SFTP)


二、准备 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

三、修改 SSH 配置(核心)

编辑配置文件:

nano /etc/ssh/sshd_config

1️⃣ 注释或确认这行(默认一般已存在)

# Subsystem sftp /usr/lib/openssh/sftp-server

改为:

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加 SFTP 组配置

Match Group sftp
    ChrootDirectory /srv/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

说明:

  • ChrootDirectory:每个用户被限制在自己的目录
  • %u:用户名(自动替换)
  • ForceCommand internal-sftp:只能 SFTP,不能 SSH

四、重启 SSH 服务

systemctl restart ssh

五、测试 SFTP 登录

sftp sftpuser@服务器IP

✅ 成功
❌ 如果失败,看日志:

journalctl -u ssh
# 或
tail -f /var/log/auth.log

六、常见问题排查

❌ bad ownership or modes for chroot

原因:

  • Chroot 目录不是 root:root
  • 权限大于 755

✅ 解决:

chown root:root /srv/sftp/sftpuser
chmod 755 /srv/sftp/sftpuser

❌ 能 SSH 登录

检查:

getent passwd sftpuser

shell 必须是:

/usr/sbin/nologin

七、可选增强

  • 限制磁盘配额
  • 使用 Match User 精细控制
  • 接入公钥登录(更安全)

如果你需要:

  • 多用户共享目录
  • 只读 SFTP
  • Docker / 云服务器场景
  • 用 vsftpd 而不是 sftp

可以继续问我,我按你的实际使用场景帮你配。

0 踩