在 CentOS 上限制 SFTP 用户只能访问指定目录(不能 SSH 登录、不能越界),最常用、最安全的做法是使用 OpenSSH 自带的 internal-sftp + Chroot。
下面按实战步骤说明(CentOS 7 / 8 / Stream 通用)。
internal-sftpChrootDirectory 限制根目录useradd -m -s /sbin/nologin sftpuser
passwd sftpuser
mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
✅ Chroot 目录 必须 root 拥有
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload
编辑:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
sftp> pwd
Remote working directory: /
sftp> cd /upload
✅ 用户看不到系统其他目录
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
groupadd sftp
useradd -g sftp -s /sbin/nologin user1
目录:
mkdir -p /data/sftp/user1/upload
chown root:root /data/sftp/user1
chown user1:sftp /data/sftp/user1/upload
原因:
✅ 解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
原因:
✅ 解决:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /data/sftp/sftpuser
ForceCommand internal-sftp
如果你需要:
可以继续问我。