Linux如何安装配置SFTP服务器?

Linux系统中,SFTP(SSH File Transfer Protocol)是一种基于SSH的安全文件传输协议,通过加密传输数据保障文件传输的安全性,广泛应用于服务器文件管理、数据备份等场景,本文将以主流Linux发行版(Ubuntu/Debian、CentOS/RHEL)为例,详细讲解SFTP服务器的安装、配置及使用方法。

linux 如何安装sftp服务器

安装SFTP服务器

SFTP服务通常通过OpenSSH服务器实现,因此安装SFTP服务器本质上就是安装并配置OpenSSH,不同Linux发行版的包管理器不同,安装命令略有差异。

Ubuntu/Debian系统

Ubuntu和Debian系统使用apt包管理器,安装步骤如下:

  • 更新软件包列表:
    sudo apt update
  • 安装OpenSSH服务器:
    sudo apt install openssh-server
  • 安装完成后,SSH服务会自动启动,可通过以下命令检查状态:
    sudo systemctl status sshd

CentOS/RHEL系统

CentOS和RHEL系统使用yumdnf包管理器(CentOS 7+使用dnf),安装步骤如下:

  • 安装OpenSSH服务器:
    sudo yum install openssh-server  # CentOS 7及以下
    # 或
    sudo dnf install openssh-server  # CentOS 8+
  • 启动SSH服务并设置开机自启:
    sudo systemctl start sshd
    sudo systemctl enable sshd
  • 检查服务状态:
    sudo systemctl status sshd

不同发行版安装命令对比

发行版 包管理器 安装命令 服务启动命令
Ubuntu/Debian apt sudo apt install openssh-server sudo systemctl start sshd
CentOS 7- yum sudo yum install openssh-server sudo systemctl start sshd
CentOS 8+ dnf sudo dnf install openssh-server sudo systemctl start sshd

配置SFTP服务器

安装完成后,需通过修改SSH配置文件(/etc/ssh/sshd_config)来启用SFTP功能并设置访问权限。

备份原始配置文件

修改前先备份原配置,避免配置错误导致无法登录:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

编辑SSH配置文件

使用vimnano编辑器打开配置文件:

sudo vim /etc/ssh/sshd_config

关键配置项

在文件中添加或修改以下内容(确保取消注释):

  • 启用SFTP子系统
    确保存在以下行(默认已存在,取消注释即可):

    linux 如何安装sftp服务器

    Subsystem sftp internal-sftp
  • 配置SFTP用户组及权限
    为限制用户仅能通过SFTP访问(禁用SSH登录),可添加以下配置(假设创建sftpusers用户组):

    Match Group sftpusers
        ChrootDirectory /home/%u
        ForceCommand internal-sftp
        AllowTcpForwarding no
        X11Forwarding no

    配置说明:

    • Match Group sftpusers:匹配sftpusers用户组的用户;
    • ChrootDirectory /home/%u:将用户限制在其家目录内(%u为用户名),防止越权访问;
    • ForceCommand internal-sftp:强制用户仅能使用SFTP命令,禁用SSH交互;
    • AllowTcpForwarding noX11Forwarding no:禁止端口转发和X11转发,增强安全性。
  • 禁用密码登录(可选)
    为提高安全性,可禁用密码登录,改用密钥认证(需提前生成密钥对):

    PasswordAuthentication no
    PubkeyAuthentication yes

创建SFTP专用用户组

根据上述配置,需创建sftpusers用户组,并将需要使用SFTP的用户加入该组:

sudo groupadd sftpusers
sudo usermod -aG sftpusers username  # 将用户username加入sftpusers组

设置目录权限

Chroot目录的所有者必须为root,权限为755,否则用户无法通过SFTP登录:

sudo chown root:root /home/username
sudo chmod 755 /home/username

重启SSH服务

配置完成后,重启SSH服务使配置生效:

sudo systemctl restart sshd

测试SFTP服务器

使用命令行工具测试

在本地终端执行以下命令(替换usernameserver_ip为实际值):

sftp username@server_ip

若登录成功,会显示sftp>提示符,可通过put(上传)、get(下载)、ls(列目录)等命令测试文件传输。

linux 如何安装sftp服务器

使用图形化工具测试

推荐工具:FileZilla、WinSCP(Windows)、Cyberduck(macOS)。

  • 在主机栏输入sftp://username:server_ip,输入密码即可连接;
  • 若配置了Chroot,用户只能看到被限制的目录(如/home/username)。

常见问题排查

  1. 连接失败,提示“Could not chdir to home directory”
    原因:Chroot目录权限或所有者设置错误。
    解决:检查目录权限是否为755,所有者是否为rootsudo chown root:root /home/username && sudo chmod 755 /home/username)。

  2. 用户无法上传文件,提示“Permission denied”
    原因:用户家目录或上传目录权限不足。
    解决:确保用户对上传目录有写权限(如sudo chmod 755 /home/username/upload && sudo chown username:username /home/username/upload)。

相关问答FAQs

Q1:如何限制SFTP用户只能访问特定目录(如/data/sftp),而不能访问其他目录?
A:首先创建目标目录并设置权限:

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

然后在/etc/ssh/sshd_config中修改ChrootDirectory为指定目录:

Match Group sftpusers
    ChrootDirectory /data/sftp/%u
    ForceCommand internal-sftp

最后重启SSH服务(sudo systemctl restart sshd),用户登录后将仅被限制在/data/sftp/username目录内。

Q2:SFTP和FTP有什么区别?为什么推荐使用SFTP?
A:主要区别如下:
| 特性 | FTP(File Transfer Protocol) | SFTP(SSH File Transfer Protocol) |
|————–|——————————-|————————————|
| 协议层 | 应用层(独立于TCP) | 基于SSH(应用层) |
| 加密方式 | 明文传输,不加密 | 基于SSH协议,全程加密(AES等) |
| 端口 | 21(控制端口)、20(数据端口) | 22(与SSH共用端口) |
| 安全性 | 低,易被窃听和篡改 | 高,支持身份验证和数据加密 |
| 功能 | 仅支持文件传输 | 支持文件传输、命令执行、端口转发等 |
推荐使用SFTP的原因:SFTP通过SSH加密传输数据,能有效防止用户名、密码及文件内容被窃取,尤其适合传输敏感数据;而FTP明文传输存在严重安全隐患,已被逐渐淘汰。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/37020.html

(0)
酷番叔酷番叔
上一篇 2025年10月6日 14:25
下一篇 2025年10月6日 14:42

相关推荐

  • 凌晨3点备份最安全?

    在Linux系统中,定时任务(又称计划任务)是自动化运维的核心功能,可通过cron和at两种工具实现,以下是详细操作指南:cron:周期性定时任务核心概念cron守护进程:系统后台服务,负责执行计划任务,crontab文件:存储任务配置,用户级文件位于/var/spool/cron/,系统级文件位于/etc/c……

    2025年7月19日
    6900
  • Linux系统中如何正确卸载已安装的程序?

    Linux系统卸载程序的方法因安装方式和发行版的不同而有所差异,与Windows系统通过“控制面板”统一卸载不同,Linux依赖包管理器来管理软件,因此卸载时需根据程序最初安装的方式选择对应的工具,本文将详细介绍Linux系统中不同类型程序的卸载方法,包括基于APT、YUM/DNF、Pacman包管理器的发行版……

    2025年9月27日
    4000
  • Linux下怎样让鼠标光标消失?

    方法1:使用命令行工具 unclutter(推荐)原理:unclutter 是一个轻量级后台工具,当鼠标静止时自动隐藏光标,移动时恢复显示,步骤:安装工具(支持Debian/Ubuntu、Fedora等主流发行版):sudo apt install unclutter # Debian/Ubuntusudo d……

    2025年7月28日
    4700
  • Linux如何实现多行文本缩进?命令行与编辑器操作方法有哪些?

    在Linux系统中,多行缩进是文本处理中常见的操作,主要用于代码格式化、配置文件对齐、文档排版等场景,通过命令行工具或文本编辑器,可以高效实现多行缩进,本文将详细介绍几种主流方法,涵盖sed、awk、文本编辑器(如vim、nano)及脚本循环等场景,并结合实际示例说明操作逻辑,使用sed命令实现多行缩进sed……

    2025年9月9日
    4500
  • Linux如何打开Shell终端?

    在Linux操作系统中,shell是用户与系统内核交互的核心接口,它既是命令解释器,也是脚本执行环境,无论是日常系统管理、软件开发还是自动化任务,都离不开shell的使用,本文将详细介绍Linux中打开shell的多种方法,涵盖图形界面、命令行界面、远程访问等场景,帮助不同需求的用户快速找到适合自己的操作方式……

    2025年9月25日
    4200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信