温馨提示×

怎样设置debian sftp用户

小樊
37
2026-09-27 19:13:23
栏目: 智能运维

在 Debian 上设置 SFTP 用户(只能使用 SFTP,不能 SSH 登录)通常推荐使用 OpenSSH 自带的 internal-sftp + Chroot 方式。下面给你一套安全、常用、可直接操作的步骤。


一、创建 SFTP 用户

sudo adduser sftpuser

按提示设置密码(可留空或用密码)。

如果你想禁止 SSH 登录,只用 SFTP,后面会处理。


二、创建 SFTP 根目录(Chroot 目录)

⚠️ Chroot 目录必须由 root 拥有,且其他用户不可写

sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser

三、创建用户可写目录

sudo mkdir -p /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload

用户登录后只能在 upload 目录里写文件。


四、配置 SSH(关键)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1️⃣ 注释或确认这一行存在

Subsystem sftp internal-sftp

2️⃣ 在文件末尾添加

Match User sftpuser
    ChrootDirectory /sftp/sftpuser
    ForceCommand internal-sftp
    X11Forwarding no
    AllowTcpForwarding no
    PasswordAuthentication yes

保存后退出。


五、重启 SSH 服务

sudo systemctl restart ssh

六、测试 SFTP 登录

在另一台机器或本机:

sftp sftpuser@服务器IP

登录后:

  • ✅ 可以 put / get
  • ❌ 不能 ssh sftpuser@ip
  • ❌ 不能访问 /sftp/sftpuser 以外目录

七、可选:禁止用户 Shell 登录(更保险)

sudo usermod -s /usr/sbin/nologin sftpuser

八、常见问题

❓ 登录报错:broken pipe / chroot failed

原因:

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

✅ 正确示例:

ls -ld /sftp/sftpuser
# drwxr-xr-x root root

❓ 想多个 SFTP 用户?

  • 每个用户一个目录:/sftp/user1、/sftp/user2
  • 使用 Match Group sftp 更方便

九、(进阶)使用用户组管理多个 SFTP 用户

sudo groupadd sftp
sudo usermod -G sftp sftpuser

sshd_config:

Match Group sftp
    ChrootDirectory /sftp/%u
    ForceCommand internal-sftp

如果你需要:

  • ✅ 只允许密钥登录
  • ✅ 限制带宽
  • ✅ 配合 nginx / ftp 客户端
  • ✅ Docker 环境

可以继续问我。

0 踩