在 Ubuntu 上配置 SFTP 根目录(即用户只能访问指定目录,不能越界),最常用、最安全的方式是使用 OpenSSH 的 internal-sftp + chroot。
下面按步骤说明。
Subsystem sftp internal-sftpChrootDirectorysudo adduser sftpuser
(可不设置 shell,后面会改)
假设根目录为 /sftp:
sudo mkdir -p /sftp
sudo chown root:root /sftp
sudo chmod 755 /sftp
用户实际可写目录:
sudo mkdir /sftp/upload
sudo chown sftpuser:sftpuser /sftp/upload
编辑配置文件:
sudo nano /etc/ssh/sshd_config
找到或替换为:
Subsystem sftp internal-sftp
在文件末尾添加:
Match User sftpuser
ChrootDirectory /sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
如果是 一组用户:
Match Group sftp
ChrootDirectory /sftp
ForceCommand internal-sftp
然后建组并把用户加入:
sudo groupadd sftp
sudo usermod -aG sftp sftpuser
sudo usermod -s /usr/sbin/nologin sftpuser
sudo systemctl restart ssh
sftp sftpuser@服务器IP
登录后:
/sftp/sftp/upload/home、/etc 等原因通常是:
ChrootDirectory 不是 root 拥有/sftp 直接写/sftp/uploadMatch User user1
ChrootDirectory /sftp/user1
Match User user2
ChrootDirectory /sftp/user2
如果你愿意,我可以: