在 CentOS 上配置 SFTP(基于 SSH 的文件传输)通常有两种常见需求:
下面分别说明,最常用的是 第 2 种(安全 SFTP 专用账号)。
CentOS 一般已默认安装 OpenSSH:
rpm -qa | grep openssh
如果没有:
yum install -y openssh-server
systemctl enable sshd
systemctl start sshd
groupadd sftp
useradd -g sftp -s /sbin/nologin sftpuser
passwd sftpuser
/sbin/nologin:禁止 SSH 登录mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftp /data/sftp/sftpuser/upload
✅ Chroot 目录必须属主是 root,且其他用户不可写
编辑配置文件:
vi /etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
改为:
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /data/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
说明:
%u 表示用户名systemctl restart sshd
sftp sftpuser@服务器IP
或 Windows 使用:
✅ 只能看到 /upload 目录
❌ 不能访问系统其他目录
原因:Chroot 目录不是 root 拥有或权限不对
解决:
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser
只需把用户加入 sftp 组:
usermod -aG sftp 用户名
firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload
那什么都不用改,只要:
useradd test
passwd test
然后:
sftp test@ip
即可(和 SSH 共用)
如果你告诉我:
我可以给你更精确的配置示例。