在 Debian 上配置 SFTP 的 chroot(限制用户只能访问指定目录),通常使用 OpenSSH 内置的 internal-sftp,不需要额外安装 FTP 服务。
下面是一套常用且安全的配置方法。
# 创建用户(禁止登录 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
编辑配置文件:
nano /etc/ssh/sshd_config
找到这一行(如果存在):
# Subsystem sftp /usr/lib/openssh/sftp-server
改为:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /srv/sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
✅ 说明:
ChrootDirectory:必须是 root 拥有ForceCommand internal-sftp:禁止 shellAllowTcpForwarding no:增强安全systemctl restart ssh
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
常见原因:
如果你需要:
可以继续问我。