温馨提示×

linux sftp如何设置

小樊
47
2026-07-16 23:49:45
栏目: 智能运维

在 Linux 上设置 SFTP(SSH File Transfer Protocol),本质上是通过 OpenSSH 来提供安全文件传输服务。下面按最常见、最实用的方式一步步说明。


一、确认环境

大多数 Linux 发行版默认已安装 OpenSSH:

ssh -V

如果没有,可安装:

Ubuntu / Debian

sudo apt update
sudo apt install openssh-server

CentOS / Rocky / Alma / RHEL

sudo yum install -y openssh-server
# 或
sudo dnf install -y openssh-server

二、启动并设置开机自启

sudo systemctl enable sshd
sudo systemctl start sshd

检查状态:

sudo systemctl status sshd

三、默认 SFTP 是否可用?

默认情况下,SSH 用户即可使用 SFTP

测试:

sftp username@server_ip

只要用户能 SSH 登录,就能 SFTP。


四、推荐配置:限制 SFTP 用户(Chroot)

常用于:只允许 SFTP,禁止 SSH 登录

1️⃣ 创建 SFTP 用户

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

2️⃣ 创建 SFTP 根目录(非常关键)

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

3️⃣ 创建用户可写目录

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

4️⃣ 修改 SSH 配置

编辑:

sudo vi /etc/ssh/sshd_config

在文件末尾添加:

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

⚠️ ChrootDirectory 必须归 root 所有,且不能被用户写


5️⃣ 重启 SSH

sudo systemctl restart sshd

五、测试 SFTP

sftp sftpuser@server_ip

登录后:

pwd
ls
cd upload
put test.txt

六、防火墙设置

firewalld

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

ufw(Ubuntu)

sudo ufw allow 22

七、常见问题排查

❌ 登录失败 / 连接被拒绝

# 查看日志
sudo journalctl -u sshd -f
# 或
sudo tail -f /var/log/secure

❌ chroot 目录权限错误

  • Chroot 目录 不能 是用户可写
  • 正确结构:
/data/sftp        (root:root 755)
/data/sftp/upload (sftpuser:sftpuser)

八、可选增强

✅ 禁用密码,使用密钥登录
✅ 限制 IP 访问
✅ 多用户 SFTP 组管理
✅ 配合 Fail2ban 防暴力破解


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

  • ✅ 是 单用户 / 多用户
  • ✅ 是否 禁止 SSH
  • ✅ 使用的 Linux 发行版

我可以给你一份完全贴合你环境的配置方案

0