在 Debian 上设置 SFTP 权限,通常目标是:限制用户只能通过 SFTP 访问指定目录,不能 SSH 登录,且不能越权访问其他目录。下面按常见场景一步步说明。
sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser
/usr/sbin/nologin:禁止 SSH 登录sftpusers:用于统一管理的 SFTP 用户组⚠️ 重要规则:
Chroot 目录及其所有上级目录 必须属于 root,且其他用户不可写
sudo mkdir -p /sftp/sftpuser
sudo chown root:root /sftp
sudo chown root:root /sftp/sftpuser
sudo chmod 755 /sftp /sftp/sftpuser
为用户创建可写目录:
sudo mkdir /sftp/sftpuser/upload
sudo chown sftpuser:sftpusers /sftp/sftpuser/upload
sudo chmod 755 /sftp/sftpuser/upload
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
%u表示用户名,目录需与用户名一致
sudo systemctl restart ssh
sftp sftpuser@localhost
应只能看到:
/sftp/sftpuser
并且:
upload/home、/etc 等原因:Chroot 目录权限不对
✅ 解决:
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
ChrootDirectory /sftp/shared
并确保 /sftp/shared 属主为 root
如果你有具体需求(例如:只读、多用户隔离、Web 服务器目录映射),可以告诉我,我可以给你更精确的配置。