温馨提示×

怎样配置linux sftp

小樊
46
2026-09-05 03:15:53
栏目: 智能运维

下面按常见场景给你说明如何在 Linux 上配置 SFTP(基于 SSH 的安全文件传输)。SFTP 通常不需要额外安装服务,而是使用 OpenSSH 的 subsystem


一、最基础的 SFTP(系统用户)

1. 确认 OpenSSH 已安装

ssh -V

一般系统自带。如未安装:

# CentOS / RHEL
yum install -y openssh-server

# Ubuntu / Debian
apt install -y openssh-server

2. 启动 SSH 服务

systemctl enable sshd
systemctl start sshd

3. 确认 SFTP 子系统已启用

编辑配置文件:

vim /etc/ssh/sshd_config

确保有这一行(默认一般都有):

Subsystem sftp internal-sftp

4. 创建用户并测试

useradd sftpuser
passwd sftpuser

本地或远程测试:

sftp sftpuser@服务器IP

✅ 这是最简单、最常用的方式。


二、限制用户只能使用 SFTP(禁止 SSH 登录)

1. 创建用户

useradd -m sftpuser
passwd sftpuser

2. 修改 sshd_config

vim /etc/ssh/sshd_config

在文件末尾添加:

Match User sftpuser
    PasswordAuthentication yes
    ChrootDirectory /home/sftpuser
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

3. 设置目录权限(非常重要)

chown root:root /home/sftpuser
chmod 755 /home/sftpuser

mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload

⚠️ Chroot 目录必须 root 拥有,且其他用户不可写

4. 重启 SSH

systemctl restart sshd

三、多用户 SFTP(统一目录结构)

Match Group sftp
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp
groupadd sftp
useradd -g sftp -s /sbin/nologin user1
mkdir -p /data/sftp/user1
chown root:root /data/sftp/user1

四、使用密钥登录(更安全)

ssh-keygen -t rsa

把公钥写入:

/home/sftpuser/.ssh/authorized_keys
chmod 600 authorized_keys

sshd_config 中:

PubkeyAuthentication yes

五、常见问题排查

1. 登录失败

journalctl -u sshd

2. 报 broken pipe

通常是 Chroot 目录权限错误

3. 无法上传

  • Chroot 目录不能写
  • 子目录需单独授权

六、总结

需求 方案
普通 SFTP 直接用系统用户
禁止 SSH Match User + ForceCommand
多用户 Match Group
安全 密钥登录

如果你告诉我:

  • 系统版本(CentOS / Ubuntu)
  • 单用户还是多用户
  • 是否需要隔离目录

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

0