从零开始,Linux环境下SFTP服务器搭建全流程详细教程
这是一份面向Linux小白与运维人员、从0起步的通用且注重安全的SFTP服务器搭建全详细指南,核心采用系统自带轻量openssh-server,无需额外安装,重点介绍chroot安全隔离方案:先检查并确认升级openssh-server,创建专属SFTP用户组与无Shell登录权限的系统子用户,规划权限严格的目录结构(锁定根目录root:root 755,子目录供用户读写),修改sshd_config配置文件匹配组规则并强制内部SFTP,最后重启ssh服务验证。
为什么选择SFTP?
在文件传输场景中,你可能听说过FTP,但它的明文传输特性让数据安全面临风险,而SFTP(SSH File Transfer Protocol) 基于SSH协议加密传输,既保留了文件传输的便捷性,又解决了FTP的安全隐患——所有数据(包括用户名、密码、文件内容)都会被加密,是企业和个人安全传输文件的首选。
本文将以主流Linux发行版(CentOS/Ubuntu通用,以OpenSSH为基础)为例,手把手教你搭建一个安全、稳定的SFTP服务器。
准备工作
SFTP依赖系统自带的OpenSSH服务,所以首先确保你的服务器已安装并启用OpenSSH:
-
检查OpenSSH是否安装
执行命令:ssh -V
若显示版本信息(如
OpenSSH_8.2p1),说明已安装;若未安装,可通过以下命令安装:- CentOS/RHEL:
sudo yum install openssh-server -y - Ubuntu/Debian:
sudo apt install openssh-server -y
- CentOS/RHEL:
-
启用并启动OpenSSH服务
sudo systemctl enable sshd # 开机自启 sudo systemctl start sshd # 启动服务
创建专用SFTP用户组与用户
为了安全,建议不要使用root用户,而是创建一个仅用于SFTP传输的专用用户,禁止其登录系统Shell。
-
创建SFTP用户组
用于统一管理SFTP用户:sudo groupadd sftpusers
-
创建SFTP用户并加入组
假设用户名为sftpuser,设置其Shell为/sbin/nologin(禁止系统登录),不创建默认家目录(后面手动配置):sudo useradd -g sftpusers -s /sbin/nologin sftpuser
-
设置用户密码
sudo passwd sftpuser
按提示输入两次密码,记住这个密码(后续登录SFTP用)。
核心配置:修改sshd_config文件
OpenSSH的配置文件/etc/ssh/sshd_config是搭建SFTP的关键,我们需要对其进行修改。
-
备份配置文件(重要!)
避免修改出错无法恢复:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
编辑配置文件
使用vim或nano打开文件:sudo vim /etc/ssh/sshd_config
-
修改SFTP子系统
找到默认的Subsystem sftp行,注释掉它,替换为internal-sftp(性能更好,且支持Chroot限制):# 原配置(注释掉): # Subsystem sftp /usr/lib/openssh/sftp-server # 新配置: Subsystem sftp internal-sftp
-
添加SFTP用户限制规则
在文件末尾添加以下内容(注意缩进,Match块内的参数需要缩进):# 匹配sftpusers组中的所有用户(也可以写Match User sftpuser匹配单个用户) Match Group sftpusers # 限制用户的根目录(Chroot,用户只能在此目录下活动) ChrootDirectory /home/sftp # 强制使用internal-sftp ForceCommand internal-sftp # 禁止端口转发 AllowTcpForwarding no X11Forwarding no说明:
ChrootDirectory是用户的“根目录”,用户登录后无法跳出该目录,安全性更高。
配置目录权限(关键!)
Chroot目录的权限有严格要求:必须由root拥有,且权限为755,否则SFTP无法连接,我们按以下步骤创建目录并设置权限:
-
创建Chroot根目录
对应配置文件中的/home/sftp:sudo mkdir -p /home/sftp
-
设置Chroot目录权限
sudo chown root:root /home/sftp sudo chmod 755 /home/sftp
-
创建用户可读写的子目录
Chroot目录用户无法直接写入,所以需要创建一个子目录(如upload),让sftpuser拥有读写权限:sudo mkdir -p /home/sftp/upload sudo chown sftpuser:sftpusers /home/sftp/upload sudo chmod 755 /home/sftp/upload
重启服务并验证配置
-
检查配置文件语法
避免配置错误导致服务无法启动:sudo sshd -t
若没有输出,说明语法正确。
-
重启OpenSSH服务
sudo systemctl restart sshd
测试SFTP连接
测试方法有两种:命令行和图形化工具。
方法1:命令行测试
在本地或另一台服务器执行:
sftp sftpuser@你的服务器IP
输入密码后,若进入sftp>提示符,说明连接成功,尝试上传文件:
put 本地文件路径 /upload/ # 上传到upload目录 get /upload/远程文件 本地路径 # 下载文件
方法2:图形化工具(如FileZilla)
- 打开FileZilla,点击“文件”→“站点管理器”;
- 新建站点,填写信息:
- 协议:选择“SFTP - SSH File Transfer Protocol”
- 主机:你的服务器IP
- 端口:默认22(若修改过SSH端口则填对应端口)
- 登录类型:正常
- 用户:sftpuser
- 密码:刚才设置的密码
- 点击“连接”,成功后可看到
upload目录,拖拽文件即可传输。
安全加固建议
搭建完成后,还可以通过以下措施提升安全性:
- 禁用密码登录,改用SSH密钥:更安全,避免密码泄露;
- 修改SSH默认端口:将22改为其他端口,减少暴力破解;
- 配置防火墙:只允许信任的IP访问SSH端口(如用iptables或firewalld);
- 定期更新OpenSSH:修复已知漏洞;
- 限制SFTP用户的操作权限:根据需求调整子目录权限,避免误操作。
通过以上步骤,你已经成功搭建了一个安全的SFTP服务器!核心要点是:使用专用用户、配置Chroot目录、严格设置权限,SFTP不仅能替代FTP,还能满足文件传输的安全需求,适合个人备份、团队协作等多种场景。
如果过程中遇到问题,优先检查目录权限和sshd_config配置,或查看系统日志/var/log/secure排查错误,快去试试吧!
注:本文适用于CentOS 7/8、Ubuntu 18.04/20.04等主流Linux发行版,若系统版本特殊,可根据实际情况调整命令参数。

