从零开始,Linux环境下SFTP服务器搭建全流程详细教程

2026-07-26 13:16:24 140阅读
这是一份面向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服务器。

从零开始,Linux环境下SFTP服务器搭建全流程详细教程

准备工作

SFTP依赖系统自带的OpenSSH服务,所以首先确保你的服务器已安装并启用OpenSSH:

  1. 检查OpenSSH是否安装
    执行命令:

    ssh -V

    若显示版本信息(如OpenSSH_8.2p1),说明已安装;若未安装,可通过以下命令安装:

    • CentOS/RHEL:sudo yum install openssh-server -y
    • Ubuntu/Debian:sudo apt install openssh-server -y
  2. 启用并启动OpenSSH服务

    sudo systemctl enable sshd  # 开机自启
    sudo systemctl start sshd   # 启动服务

创建专用SFTP用户组与用户

为了安全,建议不要使用root用户,而是创建一个仅用于SFTP传输的专用用户,禁止其登录系统Shell。

  1. 创建SFTP用户组
    用于统一管理SFTP用户:

    sudo groupadd sftpusers
  2. 创建SFTP用户并加入组
    假设用户名为sftpuser,设置其Shell为/sbin/nologin(禁止系统登录),不创建默认家目录(后面手动配置):

    sudo useradd -g sftpusers -s /sbin/nologin sftpuser
  3. 设置用户密码

    sudo passwd sftpuser

    按提示输入两次密码,记住这个密码(后续登录SFTP用)。

核心配置:修改sshd_config文件

OpenSSH的配置文件/etc/ssh/sshd_config是搭建SFTP的关键,我们需要对其进行修改。

  1. 备份配置文件(重要!)
    避免修改出错无法恢复:

    sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
  2. 编辑配置文件
    使用vim或nano打开文件:

    sudo vim /etc/ssh/sshd_config
  3. 修改SFTP子系统
    找到默认的Subsystem sftp行,注释掉它,替换为internal-sftp(性能更好,且支持Chroot限制):

    # 原配置(注释掉):
    # Subsystem sftp /usr/lib/openssh/sftp-server
    # 新配置:
    Subsystem sftp internal-sftp
  4. 添加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无法连接,我们按以下步骤创建目录并设置权限:

  1. 创建Chroot根目录
    对应配置文件中的/home/sftp

    sudo mkdir -p /home/sftp
  2. 设置Chroot目录权限

    sudo chown root:root /home/sftp
    sudo chmod 755 /home/sftp
  3. 创建用户可读写的子目录
    Chroot目录用户无法直接写入,所以需要创建一个子目录(如upload),让sftpuser拥有读写权限:

    sudo mkdir -p /home/sftp/upload
    sudo chown sftpuser:sftpusers /home/sftp/upload
    sudo chmod 755 /home/sftp/upload

重启服务并验证配置

  1. 检查配置文件语法
    避免配置错误导致服务无法启动:

    sudo sshd -t

    若没有输出,说明语法正确。

  2. 重启OpenSSH服务

    sudo systemctl restart sshd

测试SFTP连接

测试方法有两种:命令行和图形化工具。

方法1:命令行测试

在本地或另一台服务器执行:

sftp sftpuser@你的服务器IP

输入密码后,若进入sftp>提示符,说明连接成功,尝试上传文件:

put 本地文件路径 /upload/  # 上传到upload目录
get /upload/远程文件 本地路径  # 下载文件

方法2:图形化工具(如FileZilla)

  1. 打开FileZilla,点击“文件”→“站点管理器”;
  2. 新建站点,填写信息:
    • 协议:选择“SFTP - SSH File Transfer Protocol”
    • 主机:你的服务器IP
    • 端口:默认22(若修改过SSH端口则填对应端口)
    • 登录类型:正常
    • 用户:sftpuser
    • 密码:刚才设置的密码
  3. 点击“连接”,成功后可看到upload目录,拖拽文件即可传输。

安全加固建议

搭建完成后,还可以通过以下措施提升安全性:

  1. 禁用密码登录,改用SSH密钥:更安全,避免密码泄露;
  2. 修改SSH默认端口:将22改为其他端口,减少暴力破解;
  3. 配置防火墙:只允许信任的IP访问SSH端口(如用iptables或firewalld);
  4. 定期更新OpenSSH:修复已知漏洞;
  5. 限制SFTP用户的操作权限:根据需求调整子目录权限,避免误操作。

通过以上步骤,你已经成功搭建了一个安全的SFTP服务器!核心要点是:使用专用用户、配置Chroot目录、严格设置权限,SFTP不仅能替代FTP,还能满足文件传输的安全需求,适合个人备份、团队协作等多种场景。

如果过程中遇到问题,优先检查目录权限和sshd_config配置,或查看系统日志/var/log/secure排查错误,快去试试吧!


:本文适用于CentOS 7/8、Ubuntu 18.04/20.04等主流Linux发行版,若系统版本特殊,可根据实际情况调整命令参数。

文章版权声明:除非注明,否则均为亚朵原创文章,转载或复制请以超链接形式并注明出处。