SFTP 简介
SFTP(SSH File Transfer Protocol)是基于 SSH 协议的文件传输工具,通过加密通道实现安全文件传输,相比 FTP 具备更高的安全性,在 Linux 系统中,SFTP 通常作为 OpenSSH 的一部分提供,无需额外安装服务端软件,仅需配置 SSH 服务即可使用,本文将详细介绍在 Linux 系统中搭建 SFTP 服务的步骤、配置方法及注意事项。

环境准备
- 系统要求:建议使用主流 Linux 发行版,如 Ubuntu 20.04+、CentOS 7+ 或 RHEL 8+,确保系统已更新至最新状态。
- 依赖软件:SFTP 依赖 OpenSSH 服务,需确认系统是否已安装,通过以下命令检查:
- Ubuntu/Debian:
ssh --version - CentOS/RHEL:
rpm -q openssh-server
若未安装,可通过包管理器安装: - Ubuntu/Debian:
sudo apt update && sudo apt install openssh-server - CentOS/RHEL:
sudo yum install openssh-server
- Ubuntu/Debian:
SFTP 服务配置
启动并启用 SSH 服务
安装完成后,启动 SSH 服务并设置开机自启:
sudo systemctl start sshd # 启动服务(CentOS/RHEL) sudo systemctl enable sshd # 设置开机自启 sudo systemctl start ssh # Ubuntu/Debian 启动命令 sudo systemctl enable ssh # Ubuntu/Debian 开机自启
检查服务状态:sudo systemctl status sshd(或 ssh),确保显示 active (running)。
创建 SFTP 专用用户
为增强安全性,建议为 SFTP 创建独立用户,限制其仅能通过 SFTP 访问,无法 SSH 登录。
- 创建用户:以
sftpuser为例,设置家目录为/home/sftpuser,禁止 SSH 登录:sudo useradd -m -d /home/sftpuser -s /usr/sbin/nologin sftpuser sudo passwd sftpuser # 设置用户密码
-m:自动创建家目录;-s /usr/sbin/nologin:禁止 SSH 登录(关键配置)。
配置 SSH 支持SFTP
编辑 SSH 配置文件 /etc/ssh/sshd_config,调整以下参数:

sudo vim /etc/ssh/sshd_config
- 启用 SFTP 子系统:确保以下行未被注释(默认存在):
Subsystem sftp internal-sftp
- 限制用户访问:在文件末尾添加配置块,为
sftpuser设置沙箱目录(仅能访问/home/sftpuser):Match User sftpuser ChrootDirectory /home/sftpuser ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding noChrootDirectory:限制用户家目录为根目录,无法上级访问;ForceCommand internal-sftp:强制使用 SFTP 子系统,禁用 SSH 其他功能。
设置目录权限
SFTP 的 Chroot 功能要求目录属主为 root,且用户对目录需有执行权限:
sudo chown root:root /home/sftpuser # 目录属主设为 root sudo chmod 755 /home/sftpuser # 设置权限(用户可读/写/执行)
若需上传文件,可在家目录内创建子目录并授权用户:
sudo mkdir /home/sftpuser/upload sudo chown sftpuser:sftpuser /home/sftpuser/upload sudo chmod 755 /home/sftpuser/upload
重启 SSH 服务
配置完成后,重启 SSH 服务使生效:
sudo systemctl restart sshd # CentOS/RHEL sudo systemctl restart ssh # Ubuntu/Debian
防火墙与端口配置
默认情况下,SFTP 使用 SSH 的 22 端口,若系统启用防火墙,需放行该端口:

- Ubuntu (ufw):
sudo ufw allow 22/tcp sudo ufw reload
- CentOS/RHEL (firewalld):
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload
客户端连接测试
使用 SFTP 客户端工具(如 FileZilla、WinSCP 或命令行)连接测试,以命令行为例:
sftp sftpuser@服务器IP
输入密码后,若成功进入 sftp> 提示符,表示搭建成功,可通过以下命令操作:
ls:列出文件put local_file:上传文件get remote_file:下载文件
常见问题与注意事项
| 问题现象 | 可能原因及解决方案 |
|---|---|
| 用户无法登录 | 检查 /etc/ssh/sshd_config 中 ChrootDirectory 权限是否为 755,属主是否为 root;确认密码正确。 |
| 连接超时 | 检查防火墙是否放行 22 端口;确认 SSH 服务运行状态。 |
| 用户可通过 SSH 登录 | 确认用户 shell 设置为 /usr/sbin/nologin,或 Match User 配置块位置错误。 |
| 上传文件提示权限不足 | 检查目标目录属主是否为用户,权限是否包含 w(如 755)。 |
通过以上步骤,即可在 Linux 系统中快速搭建安全的 SFTP 服务,关键点在于:创建专用用户、配置 Chroot 沙箱环境、严格设置目录权限,SFTP 凭借其加密特性和灵活性,适用于文件共享、数据备份等场景,是企业级文件传输的常用工具,实际使用中,建议结合密钥认证进一步提升安全性,并定期审计日志以监控访问行为。



















