温馨提示×

如何在centos配置sftp

小樊
56
2026-09-06 03:02:32
栏目: 智能运维

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

  1. 直接用系统用户通过 SFTP(最简单)
  2. 限制用户只能 SFTP,不能 SSH 登录(推荐用于业务/客户用户)

下面我分别说明,并附完整操作步骤(以 CentOS 7/8/Stream 为例)。


一、最基础:使用系统用户 SFTP(可 SSH 也可 SFTP)

1. 安装并启动 SSH

CentOS 默认已安装:

systemctl status sshd

如未启动:

systemctl start sshd
systemctl enable sshd

2. 创建用户(示例)

useradd sftpuser
passwd sftpuser

3. 测试 SFTP

sftp sftpuser@服务器IP

✅ 到这一步,SFTP 已经可用。


二、推荐方式:限制用户只能 SFTP(不能 SSH)

1. 创建 SFTP 用户和目录

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

/sbin/nologin 禁止 SSH 登录

2. 创建 SFTP 根目录

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

⚠️ 注意:

  • SFTP 根目录必须由 root 拥有
  • 用户只能在子目录中写文件

3. 配置 SSH(关键)

编辑:

vi /etc/ssh/sshd_config

注释掉这一行(很重要)

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

在文件末尾添加

Subsystem sftp internal-sftp

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

如有多个用户,可改成:

Match Group sftpusers

4. 重启 SSH

systemctl restart sshd

5. 测试 SFTP

sftp sftpuser@服务器IP

登录后:

cd upload
put test.txt

✅ 成功说明配置正确


三、防火墙设置(如开启)

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

四、常见问题排查

❌ 登录失败 / 权限错误

检查:

ls -ld /data/sftp/sftpuser

必须是:

drwxr-xr-x root root

❌ 能登录但无法写文件

  • 写目录必须是用户自己的
  • 根目录不能给用户写权限

五、可选增强(进阶)

  • 使用 SFTP 多用户 + Group 限制
  • 使用 密钥登录(更安全)
  • 使用 日志审计
  • 结合 fail2ban 防爆破

如果你愿意,可以告诉我:

  • CentOS 具体版本
  • 是否要 多用户
  • 是否 禁止 SSH 登录
  • 是否用于 生产环境

我可以直接给你一份可直接用的配置模板。

0 踩