当前位置: 首页 > news >正文

在 Linux 服务器上配置 SFTP 的完整指南(2025 最新安全实践)

适用对象:需要在 Linux 服务器上为团队、客户或应用安全传输文件的开发者与系统管理员。
适用系统:Ubuntu / Debian / CentOS / Rocky / AlmaLinux / RHEL 等。
更新时间:2025 年 10 月。


一、为什么要使用 SFTP?

SFTP(SSH File Transfer Protocol) 是一种基于 SSH 的安全文件传输协议。
与传统 FTP 不同,它:

  • 只使用 22 端口(无需额外开放端口);
  • 传输过程 全程加密
  • 可以直接复用现有的 SSH 用户体系;
  • 支持目录隔离(Chroot)、日志审计、密钥认证等安全机制。

SFTP 是企业和个人服务器最常用、最安全的文件上传方式之一。


二、准备工作:安装并启动 OpenSSH

SFTP 依赖于 OpenSSH Server,一般系统已自带。若未安装,可手动安装:

Ubuntu / Debian

sudo apt update && sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

CentOS / RHEL / Rocky / AlmaLinux

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

检查状态:

sudo systemctl status ssh  # 或 sshd

三、创建 SFTP 专用用户与组

为避免安全风险,不应让普通 SSH 用户直接使用 SFTP。
我们新建一个受限用户组和用户:

sudo groupadd sftpusers
sudo useradd -m -g sftpusers -s /usr/sbin/nologin sftpuser
sudo passwd sftpuser

说明:

  • -s /usr/sbin/nologin 禁止该用户获得 shell 登录权限;
  • sftpusers 组将作为 SFTP 登录的唯一匹配组。

四、配置文件存储目录与权限

为了实现安全隔离,我们使用 Chroot 限制用户访问范围。

sudo mkdir -p /data/sftp/uploads
sudo chown root:root /data/sftp
sudo chmod 755 /data/sftpsudo chown sftpuser:sftpusers /data/sftp/uploads
sudo chmod 700 /data/sftp/uploads

🔒 权限说明

路径拥有者权限说明
/data/sftproot:root755Chroot 根目录,必须为 root 拥有
/data/sftp/uploadssftpuser:sftpusers700用户实际可写目录

五、修改 SSH 配置文件(关键步骤)

编辑 /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

确认或添加以下配置:

Subsystem sftp internal-sftpPasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes

然后在文件底部添加以下段落:

Match Group sftpusersChrootDirectory /data/sftpForceCommand internal-sftpAllowTcpForwarding noX11Forwarding noPermitTunnel no

✅ 配置解读

配置项含义
Subsystem sftp internal-sftp启用内置 SFTP 服务
ChrootDirectory /data/sftp限制用户在该路径内活动
ForceCommand internal-sftp禁止执行任何 shell 命令
AllowTcpForwarding no禁止端口转发
PermitTunnel no禁止隧道连接
X11Forwarding no禁止图形界面转发

保存并退出。


六、重启 SSH 服务

应用配置:

sudo systemctl restart ssh   # Ubuntu / Debian
sudo systemctl restart sshd  # CentOS / RHEL

七、测试连接

在本地客户端使用命令行或图形工具测试:

sftp sftpuser@your_server_ip

输入密码后,应出现:

sftp>

在交互模式下可执行:

sftp> pwd
sftp> cd uploads
sftp> put test.txt
sftp> get test.txt

上传与下载应都能正常工作。


八、安全强化(2025 推荐做法)

1. 使用 SSH 密钥认证(推荐)

在客户端生成密钥:

ssh-keygen -t ed25519

将公钥复制到服务器:

mkdir -p /home/sftpuser/.ssh
echo "你的公钥内容" | sudo tee /home/sftpuser/.ssh/authorized_keys
sudo chmod 700 /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
sudo chown -R sftpuser:sftpusers /home/sftpuser/.ssh

然后编辑 sshd_config 禁用密码登录:

PasswordAuthentication no
PubkeyAuthentication yes

重启服务即可。


2. 设置磁盘配额(防止滥用)

通过 quotasystemd 限制用户资源:

sudo apt install quota
sudo edquota -u sftpuser

可设定最大磁盘占用、文件数等。


3. 启用日志与审计

所有登录与文件传输操作会记录在:

/var/log/auth.log    # Ubuntu / Debian
/var/log/secure      # CentOS / RHEL

如需更详细记录,可安装 auditd

sudo apt install auditd
sudo auditctl -w /data/sftp/uploads -p war -k sftp_watch

这样所有文件写入、读取都会被记录。


4. 定期升级 OpenSSH 与系统补丁

保持系统最新:

sudo apt update && sudo apt upgrade -y

或设置自动安全更新:

sudo apt install unattended-upgrades

5. 拓展建议(企业级场景)

场景推荐方案
多用户隔离每个用户独立子目录,如 /data/sftp/user1/uploads
审计与监控使用 ELK / Graylog 收集 SFTP 日志
容器化部署在 Docker / Podman 容器中运行 SFTP 服务
自动化管理使用 Ansible / Terraform 批量配置

九、常见错误与解决方法

报错信息可能原因解决办法
bad ownership or modes for chroot directory根目录权限非 root 拥有sudo chown root:root /data/sftp
subsystem request failed on channel 0SSH 配置中未启用 internal-sftp添加 Subsystem sftp internal-sftp
登录成功但无法写入上传目录权限不正确检查 /data/sftp/uploads 权限是否为 700

十、总结

目标推荐做法
安全传输文件使用 SFTP(基于 SSH)
防止越权访问配置 Chroot 隔离
禁止 Shell 登录ForceCommand internal-sftp
防止暴力破解使用 SSH 公钥认证
服务器安全性定期更新 OpenSSH + 开启日志审计

配置完成后,你的服务器就能在保证安全的前提下,稳定地提供 SFTP 文件服务。


📚 延伸阅读

  • OpenSSH 官方手册
  • Ubuntu Server Guide: SFTP Setup
  • RHEL 9 System Administrator Guide – Secure File Transfer
  • CIS Benchmark for Linux SSH
http://www.dtcms.com/a/490901.html

相关文章:

  • pytorch 数据加载加速
  • 网站建设平台设备荣耀手机官网
  • 调用apisix admin 接口创建资源
  • 迅为RK3568开发板OpenHarmony系统南向驱动开发手册-pdf配置 rk3568_uart_config.hcs
  • 中兴通讯的网站建设分析wordpress安装后要删除哪些文件
  • 建设银行对账单查询网站简述电子商务网站开发的主要步骤
  • ARMA模型
  • 智慧园区:引领城市未来发展新趋势
  • python命名约定 私有变量 保护变量 公共变量
  • 气泡图 vs 散点图:什么时候加第三维?
  • 西安网站开发工程师wordpress+中文版
  • 网页设计网站源代码淘宝网站的建设目的
  • 分布式系统的幂等性设计:从理论到生产实践
  • Advanced Port Scanner,极速端口扫描利器
  • 字节面试题
  • 个人项目开发(2) 基于MFA实现的双重登录验证
  • 邢台做移动网站公司电话号码中国设计之家
  • 丹阳高铁站对面的规划打开这个网站你会回来感谢我的
  • 2025年--Lc194-516. 最长回文子序列(动态规划在字符串的应用,需要二刷)--Java版
  • [HTML]播放wav格式音频
  • IntentService 的应用场景和使用方式?
  • 【开题答辩实录分享】以《基于大数据技术的二手车交易数据分析与设计》为例进行答辩实录分享
  • 基础开发工具(上)
  • k8s lngress与安全机制
  • 大模型微调(一):有监督微调与困惑度
  • 网站建设步骤图片素材WordPress点击出现爱心
  • 《从零搭建现代 Android 模块化架构项目(2025 最新实践)》
  • 深圳燃气公司有哪些大型网站和小企业站优化思路
  • AWS CloudWatch Logs Insights:实时日志分析,让服务器问题无所遁形
  • 云服务器与传统服务器租用的核心差异解析(云服务器与服务器租用之间的区别在哪里?)