在 CentOS 上配置 SFTP 的根目录(chroot 根目录),通常是指把某个用户 限制在其家目录或指定目录中,不能访问系统其他路径。最常见做法是使用 OpenSSH 自带的 internal-sftp + ChrootDirectory。
下面给你一个标准、可用的配置步骤。
useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /data/sftp
chown root:root /data/sftp
chmod 755 /data/sftp
⚠️ ChrootDirectory 必须属主是 root,且其他用户不可写
mkdir /data/sftp/upload
chown sftpuser:sftpuser /data/sftp/upload
chmod 755 /data/sftp/upload
编辑:
vi /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果你想限制一组用户,可以用:
Match Group sftp
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
sftp> pwd
Remote working directory: /
sftp> ls
upload
此时用户 只能看到 /data/sftp 作为根目录
fatal: bad ownership or modes for chroot directory
原因:
✅ 正确示例:
chown root:root /data/sftp
chmod 755 /data/sftp
Match Group sftp
ChrootDirectory /data/sftp
ForceCommand internal-sftp
groupadd sftp
usermod -aG sftp sftpuser
如果你愿意,可以告诉我:
我可以给你更精确的配置。