在 CentOS 上限制 SFTP 用户只能访问指定目录(即 chroot 限制),通常使用 OpenSSH 自带的 internal-sftp + ChrootDirectory 方式。下面以 CentOS 7/8 为例说明。
# 创建用户(不允许 shell 登录)
useradd -m -s /sbin/nologin sftpuser
# 设置密码
passwd sftpuser
Chroot 目录必须由 root 拥有,且其他用户不可写。
# 根 chroot 目录
mkdir -p /sftp/sftpuser
# 实际可写目录
mkdir -p /sftp/sftpuser/upload
# 修改权限
chown root:root /sftp/sftpuser
chmod 755 /sftp/sftpuser
chown sftpuser:sftpuser /sftp/sftpuser/upload
✅ 说明:
/sftp/sftpuser:root 拥有,用户不能写/sftp/sftpuser/upload:sftpuser 可写编辑配置文件:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /sftp/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
如果有多个用户,可用组方式:
Match Group sftp
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
systemctl restart sshd
sftp sftpuser@服务器IP
登录后:
//upload查看日志:
journalctl -u sshd
常见原因:
setsebool -P ssh_chroot_rw_homedirs on
groupadd sftp
useradd -g sftp -s /sbin/nologin user1
mkdir -p /sftp/user1/upload
chown root:root /sftp/user1
chown user1:sftp /sftp/user1/upload
如果你需要:
可以告诉我具体需求。