温馨提示×

centos怎么配置sftp

小樊
49
2026-10-14 19:06:23
栏目: 智能运维

在 CentOS 上配置 SFTP(基于 SSH 的文件传输)通常有两种常见需求:

  1. 普通用户使用 SFTP(和 SSH 登录共存)
  2. 限制用户只能 SFTP,不能 SSH 登录(Chroot jail)

下面分别说明,最常用的是 第 2 种(安全 SFTP 专用账号)。


一、基础环境确认

CentOS 一般已默认安装 OpenSSH:

rpm -qa | grep openssh

如果没有:

yum install -y openssh-server
systemctl enable sshd
systemctl start sshd

二、创建 SFTP 专用用户(不能 SSH 登录)

1. 创建用户和组

groupadd sftp
useradd -g sftp -s /sbin/nologin sftpuser
passwd sftpuser
  • /sbin/nologin:禁止 SSH 登录
  • 用户只能使用 SFTP

2. 创建目录结构(非常重要)

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,且其他用户不可写


三、配置 SSH(核心)

编辑配置文件:

vi /etc/ssh/sshd_config

1. 注释或确认这一行

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

改为:

Subsystem sftp internal-sftp

2. 在文件末尾添加

Match Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

说明:

  • %u 表示用户名
  • 用户被限制在自己目录中
  • 无法执行 shell 命令

四、重启 SSH 服务

systemctl restart sshd

五、测试 SFTP 登录

sftp sftpuser@服务器IP

或 Windows 使用:

  • FileZilla
  • WinSCP

✅ 只能看到 /upload 目录
❌ 不能访问系统其他目录


六、常见问题

1. 登录报错:bad ownership or modes

原因:Chroot 目录不是 root 拥有或权限不对
解决:

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

2. 想允许多个用户

只需把用户加入 sftp 组:

usermod -aG sftp 用户名

3. 开放防火墙(如有)

firewall-cmd --add-service=ssh --permanent
firewall-cmd --reload

七、如果你只是“普通用户用 SFTP”

那什么都不用改,只要:

useradd test
passwd test

然后:

sftp test@ip

即可(和 SSH 共用)


如果你告诉我:

  • CentOS 版本(7 / 8 / Stream)
  • 是否要 多用户 / 只读 / 多目录
  • 是否用 密钥登录

我可以给你更精确的配置示例。

0 踩