温馨提示×

debian sftp怎样配chroot

小樊
45
2026-10-27 02:49:16
栏目: 智能运维

在 Debian 上配置 SFTP 的 chroot(限制用户只能访问指定目录),通常使用 OpenSSH 内置的 internal-sftp,不需要额外安装 FTP 服务。

下面是一套常用且安全的配置方法。


一、前提说明

  • 使用系统用户(或专门创建的 sftp 用户)
  • 用户只能 SFTP,不能 SSH 登录
  • 被 chroot 的目录必须属于 root,且其他用户不可写

二、创建 SFTP 用户和目录

# 创建用户(禁止登录 shell)
useradd -m -s /usr/sbin/nologin sftpuser

# 设置密码
passwd sftpuser

创建 chroot 根目录:

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

如果用户需要上传文件,再建一个可写目录:

mkdir /srv/sftp/sftpuser/upload
chown sftpuser:sftpuser /srv/sftp/sftpuser/upload

三、配置 SSH(关键)

编辑配置文件:

nano /etc/ssh/sshd_config

1️⃣ 注释掉或确认原有 Subsystem

找到这一行(如果存在):

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

改为:

Subsystem sftp internal-sftp

2️⃣ 添加 chroot 配置(文件末尾)

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

✅ 说明:

  • ChrootDirectory:必须是 root 拥有
  • ForceCommand internal-sftp:禁止 shell
  • AllowTcpForwarding no:增强安全

四、重启 SSH

systemctl restart ssh

五、测试 SFTP

sftp sftpuser@服务器IP

登录后:

  • 根目录是 /(实际是 /srv/sftp/sftpuser)
  • 只能看到 upload
  • 无法访问系统其他目录

六、多用户通用配置(可选)

如果有很多 SFTP 用户:

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

然后:

groupadd sftp
usermod -aG sftp sftpuser
mkdir -p /srv/sftp/sftpuser
chown root:root /srv/sftp/sftpuser

七、常见问题

❌ 登录失败 / 闪退

检查:

journalctl -u ssh

常见原因:

  • Chroot 目录不是 root 拥有
  • 目录权限 > 755
  • 用户 shell 不是 nologin

如果你需要:

  • ✅ 用 密钥登录
  • ✅ 限制只读
  • ✅ Docker / Proxmox 环境
  • ✅ 日志审计

可以继续问我。

0 踩