帮助中心
如何在Linux服务器上安装和使用SFTP

如何在Linux服务器上安装和使用SFTP


SFTP 或 SSH 文件传输协议是一种在两台电脑等之间安全传输数据的方法。它是在 SSH 协议之上运行的 FTP,利用了 SSH 协议的安全性,并完全支持 SSH 协议的身份验证。


如今,建议使用 SFTP 代替传统的 FTP 或 FTP/S 协议。SFTP 默认是安全的,因为 SSH 就是这样工作的。从安全角度看,SFTP 还能防止密码嗅探和中间人攻击 (MiTM)。


与 SSH 一样,SFTP 也使用加密和加密哈希函数保护数据完整性。它还支持多种安全认证方法,包括密码和基于密钥的认证。此外,由于它与 SSH 协议在同一端口上运行,因此减少了服务器对外部网络的开放端口。


先决条件


在本指南中,你将学习如何在 Linux 系统上设置 SFTP 服务器。此外,你还将学习 sftp 客户端的基本命令。


以下是当前的实施环境:


  • 一台 Linux 服务器--你可以使用 Debian、Ubuntu、CentOS、Fedora、Rocky 或任何其他 Linux 发行版。
  • 确保你的 Linux 系统上有 OpenSSH 软件包。
  • SFTP 客户端--sftp 命令行或任何 GUI 客户端。


验证 OpenSSH 软件包


要建立 SFTP 服务器,必须在 Linux 系统上安装 OpenSSH 软件包。几乎所有 Linux 发行版服务器都默认安装了 OpenSSH 软件包。但是,如果系统中没有 OpenSSH 软件包,可以从官方软件仓库安装。


1. 要确保 Linux 系统已安装 OpenSSH 软件包,请使用以下命令。


对于 Debian 或 Ubuntu 服务器,可以使用下面的 dpkg 命令。

dpkg -l | grep ssh

以下是 Debian 系统的输出结果。

ii  libssh2-1:amd64               1.9.0-2                        amd64        SSH2 client-side library
ii  openssh-client                1:8.4p1-5                      amd64        secure shell (SSH) client, for secure access to remote machines
ii  openssh-server                1:8.4p1-5                      amd64        secure shell (SSH) server, for secure access from remote machines
ii  openssh-sftp-server           1:8.4p1-5                      amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines

第一列 “ii ”表示软件包已安装。openssh-sftp-server "软件包已安装在 Debian/Ubuntu 系统中。

RHEL/CentOS/Fedora/Rocky Linux/AlmaLinux 用户可以使用下面的 rpm 命令。

rpm -qa | grep ssh


创建组和用户


在此步骤中,您将为 SFTP 服务器创建一个新组和用户。该组中的用户将被允许访问 SFTP 服务器。出于安全考虑,SFTP 用户不能访问 SSH 服务;他们只能访问 SFTP 服务器。


1. 执行以下命令创建新组 “sftpgroup”。

sudo groupadd sftpgroup

2. 使用以下命令创建新用户 “sftpuser”。

sudo useradd -G sftpgroup -d /srv/sftpuser -s /sbin/nologin sftpuser

详细选项:


  • -G:自动将用户添加到 “sftpg 组”。
  • -d:指定新用户的主目录。
  • -s:将新用户默认设置为“/sbin/nologin”,这意味着该用户无法访问 SSH 服务器。


3. 接下来,使用下面的命令为用户 “sftpuser ”创建密码。

passwd sftpuser

键入强密码并重复,然后按 “回车键 ”确认。



要添加更多用户,请重复第 2 和第 3 步,最重要的是,所有 SFTP 用户必须在组 “sftpgroup ”中,且不能通过 SSH 访问 shell。


设置 Chroot Jail 目录


创建新组和用户后,必须为 SFTP 用户创建并配置 Chroot 目录。


1. 对于用户 “sftpuser”,新的主目录将位于“/srv/sftpuser”。执行以下命令创建它。

mkdir -p /srv/sftpuser

2. 要为用户 “sftpuser ”设置 chroot,必须将目录的所有权更改为用户 root,但保留组的读取和执行权限,而没有写入权限。


使用以下命令将目录的所有权更改为用户 “root”。

sudo chown root /srv/sftpuser

赋予该组读取和执行权限,但没有写入权限。

sudo chmod g+rx /srv/sftpuser

3. 接下来,在“/srv/sftpuser ”目录内创建一个新的 “data ”目录,并将该 “data ”目录的所有权更改为用户 “sftpuser”。

mkdir -p /srv/sftpuser/data
chown sftpuser:sftpuser /srv/sftpuser/data



到目前为止,下面详细介绍了 SFTP 用户目录的配置。


  • /srv/sftuser "目录是默认的主目录。
  • sftpuser “用户不能写入”/srv/sftpuser "目录,但可以读取该目录内的内容。
  • sftpuser “用户可以将文件上传到”/srv/sftpuser/data "目录下的 SFTP 服务器。


在 SSH 服务器上启用 SFTP


要在 OpenSSH 上启用 SFTP 服务器,必须编辑 SSH 配置“/etc/ssh/sshd_config”。


1. 使用 nano 或 vim 编辑 ssh 配置“/etc/ssh/sshd_config”。

sudo nano /etc/ssh/sshd_config

2. 注释以下配置以禁用独立的 “sftp-server ”功能。

#Subsystem      sftp    /usr/lib/openssh/sftp-server

3. 将以下配置粘贴到该行底部。

Subsystem sftp internal-sftp

Match Group sftpgroup
     ChrootDirectory %h
     X11Forwarding no
     AllowTCPForwarding no
     ForceCommand internal-sftp

保存配置并退出。


详细配置:

  • 我们没有使用子进程 “sftp-server”,而是使用了 “internal-sftp”。
  • 为组 “sftpgroup ”启用 SFTP 服务器。

4. 要应用新配置,请使用下面的命令重启 ssh 服务。

sudo systemctl restart sshd

SFTP 服务器已准备就绪并可访问,它与 SSH 服务运行在同一端口上。


访问 SFTP 服务器


在客户端,我们将使用大多数 Linux 发行版默认安装的 sftp 命令行。不过,你也可以使用其他命令行客户端或 GUI FTP 客户端,如 FileZilla、Cyberduck 等。


1. 要连接到 SFTP 服务器,请执行下面的 sftp 命令。

sftp ftpuser@SERVER-IP

如果您的 SFTP 和/或 SSH 服务器运行在自定义端口上,可以使用下面的 sftp 命令。

sftp -P PORT ftpuser@SERVER-IP

键入 “sftpuser ”的密码。


2. 连接到 SFTP 服务器后,执行以下命令。


显示当前路径下的工作目录,并列出所有可用文件和目录。

pwd
ls


3. 将本地文件上传到 SFTP 服务器上的“/”目录,由于该目录是 chroot 目录,因此结果将是 “权限拒绝”。

put /path/to/file/on/local /

4. 上传本地文件到 SFTP 服务器上的“/data/”目录。如果配置正确,文件将上传到“/data/”目录。

put /path/to/file1/on/local1 /data/
put /path/to/file2/on/local /data/


5. 现在使用以下命令检查“/data ”目录中的可用文件。

ls /data/

你将看到文件已上传至 SFTP 服务器。



结论


恭喜您!你已经在 Linux 系统上成功配置了 SFTP 服务器。这种类型的配置适用于大多数安装了 OpenSSH 的 Linux 系统。此外,你还学会了如何为 SFTP 用户设置 chroot 目录,并学会了基本的 sftp 客户端命令。

文章相关标签: Linux SFTP 安装SFTP
购物车