温馨提示×

如何配置debian sftp

小樊
45
2026-10-21 03:40:17
栏目: 智能运维

下面按最常见、最安全的做法,给你一份 Debian 上配置 SFTP(仅 SFTP,禁止 SSH Shell) 的实用指南。


一、环境说明

  • 系统:Debian 10 / 11 / 12 均适用
  • 目标:
    • 用户只能通过 SFTP 传文件
    • 不能登录系统 Shell
    • 限制在其自己的目录中(chroot)

二、安装 OpenSSH(一般已安装)

sudo apt update
sudo apt install openssh-server

三、创建 SFTP 用户和目录

1. 创建用户(不允许登录 shell)

sudo adduser sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser

2. 创建 SFTP 根目录(必须 root 拥有)

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

3. 创建可写目录

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

目录结构示例:

/sftp/sftpuser/      (root:root, 755)
└── upload/          (sftpuser:sftpuser)

四、配置 SSH(关键)

编辑 SSH 配置:

sudo nano /etc/ssh/sshd_config

1. 注释或确认以下行

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

改为:

Subsystem sftp internal-sftp

2. 添加 SFTP 用户限制

在文件末尾添加:

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

如有多个用户,可用 Match Group sftp 方式


五、重启 SSH

sudo systemctl restart ssh

六、测试 SFTP

本地测试

sftp sftpuser@localhost

或使用 FileZilla

  • 协议:SFTP
  • 主机:服务器 IP
  • 用户:sftpuser
  • 端口:22

七、常见问题

❌ 登录失败 / 无法 chroot

错误示例:

fatal: bad ownership or modes for chroot directory

✅ 解决:

  • /sftp/sftpuser 必须是 root:root
  • 权限不能大于 755

❌ 能登录但无法上传

✅ 确认:

  • 上传目录属于该用户
  • 不在 chroot 根目录直接写

八、(可选)使用用户组管理多个 SFTP 用户

sudo groupadd sftp
sudo usermod -aG sftp sftpuser

sshd_config:

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

如果你需要:

  • 公钥登录
  • Docker 中的 SFTP
  • vsftpd / proftpd 方案
  • 多用户权限隔离

可以直接告诉我你的使用场景。

0 踩