温馨提示×

如何配置centos sftp

小樊
48
2026-10-11 20:54:12
栏目: 智能运维

在 CentOS 上配置 SFTP(基于 SSH 的文件传输)通常有几种方式,最常见、最安全的是使用系统账户 + 限制到指定目录(Chroot)。下面我按最常用场景给你一个完整、可操作的配置教程。


一、前提条件

  • 已安装并运行 openssh-server
  • 有 root 权限
  • CentOS 7 / 8 / Stream 均适用

检查 SSH 服务:

systemctl status sshd

二、创建 SFTP 用户(不使用系统登录)

1. 创建用户

useradd -m -s /sbin/nologin sftpuser
passwd sftpuser

/sbin/nologin 表示该用户不能 SSH 登录,只能 SFTP


三、配置 SFTP 根目录(Chroot)

1. 创建目录结构

mkdir -p /data/sftp/sftpuser
chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

mkdir /data/sftp/sftpuser/upload
chown sftpuser:sftpuser /data/sftp/sftpuser/upload

⚠️ 注意:

  • Chroot 目录必须属主为 root
  • 用户只能在子目录中写文件

四、修改 SSH 配置

编辑:

vim /etc/ssh/sshd_config

1. 注释掉这一行(如果存在)

# Subsystem sftp /usr/libexec/openssh/sftp-server

2. 添加以下内容

Subsystem sftp internal-sftp

Match User sftpuser
    ChrootDirectory /data/sftp/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

如果是多个用户,可用:

Match Group sftp

五、重启 SSH 服务

systemctl restart sshd

六、测试 SFTP 连接

本地测试

sftp sftpuser@localhost

使用 FileZilla

  • 协议:SFTP
  • 主机:服务器 IP
  • 用户:sftpuser
  • 密码:你设置的密码

七、常见问题排查

1. 登录失败:broken pipe

原因:Chroot 目录权限不对
解决:

chown root:root /data/sftp/sftpuser
chmod 755 /data/sftp/sftpuser

2. 无法上传文件

  • 只能在 upload 目录写
  • 检查目录属主

3. 仍然能 SSH 登录

  • 确认 shell 是 /sbin/nologin

八、可选:使用密钥登录(更安全)

ssh-keygen -t rsa
mkdir -p /home/sftpuser/.ssh
cat id_rsa.pub >> /home/sftpuser/.ssh/authorized_keys
chown -R sftpuser:sftpuser /home/sftpuser/.ssh

并在 sshd_config 中禁用密码:

PasswordAuthentication no

如果你需要:

  • ✅ 多用户隔离
  • ✅ 只读 / 只写
  • ✅ 配合防火墙
  • ✅ Docker / 云服务器场景

告诉我你的使用场景,我可以给你更精准的配置方案。

0 踩