在 Debian 上限制 SFTP 用户只能访问指定目录(通常称为 chroot SFTP),最常用、最安全的方式是使用 OpenSSH 自带的 internal-sftp + ChrootDirectory。
下面是一套标准可落地方案。
ChrootDirectory 限制根目录sudo useradd -m -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
❗ Chroot 目录所有者必须是 root,且其他用户不可写
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp/sftpuser
用户实际可写目录:
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpuser /sftp/sftpuser/upload
最终结构:
/sftp/sftpuser/ (root:root, 755)
└── upload/ (sftpuser:sftpuser)
编辑:
sudo nano /etc/ssh/sshd_config
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果是多个用户,可用:
Match Group sftp
sudo systemctl restart ssh
sftp sftpuser@你的IP
登录后:
pwd
应显示:
Remote working directory: /
并且无法访问 /sftp/sftpuser 之外
原因:
解决:
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
sudo groupadd sftp
sudo usermod -aG sftp sftpuser
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
chmod 555LogLevel VERBOSEmount --bind 映射真实数据目录如果你愿意,可以告诉我:
我可以给你一份完全定制的配置。