在 CentOS 上配置 SFTP chroot(限制用户只能访问指定目录),通常使用 OpenSSH 内置的 internal-sftp + ChrootDirectory,不需要额外安装 vsftpd。
下面以 CentOS 7 / 8 / Stream 为例说明。
Subsystem sftp internal-sftpsshd_config 中对指定用户/组启用 ChrootDirectoryupload)进行读写# 创建 sftp 组
groupadd sftp
# 创建用户(不允许 shell 登录)
useradd -g sftp -s /sbin/nologin sftpuser
# 设置密码
passwd sftpuser
mkdir -p /data/sftp/sftpuser
mkdir -p /data/sftp/sftpuser/upload
# 设置所有者
chown root:root /data/sftp/sftpuser
chown sftpuser:sftp /data/sftp/sftpuser/upload
# 设置权限
chmod 755 /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser/upload
✅ 注意
/data/sftp/sftpuser 必须是 root:rootupload编辑 SSH 配置:
vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
%u表示用户名,自动对应/data/sftp/sftpuser
# CentOS 7
systemctl restart sshd
# CentOS 6
service sshd restart
sftp sftpuser@服务器IP
登录后:
sftp> pwd
Remote working directory: /
sftp> cd upload
sftp> put test.txt
查看日志:
tail -f /var/log/secure
常见错误:
chroot directory does not existchroot directory writable by group/otherroot 拥有upload 目录归属正确semanage fcontext -a -t ssh_home_t "/data/sftp(/.*)?"
restorecon -Rv /data/sftp
如果你告诉我:
我可以给你一份可直接用的配置模板。