SFTP 或 SSH 文件传输协议是一种在两台电脑等之间安全传输数据的方法。它是在 SSH 协议之上运行的 FTP,利用了 SSH 协议的安全性,并完全支持 SSH 协议的身份验证。
如今,建议使用 SFTP 代替传统的 FTP 或 FTP/S 协议。SFTP 默认是安全的,因为 SSH 就是这样工作的。从安全角度看,SFTP 还能防止密码嗅探和中间人攻击 (MiTM)。
与 SSH 一样,SFTP 也使用加密和加密哈希函数保护数据完整性。它还支持多种安全认证方法,包括密码和基于密钥的认证。此外,由于它与 SSH 协议在同一端口上运行,因此减少了服务器对外部网络的开放端口。
在本指南中,你将学习如何在 Linux 系统上设置 SFTP 服务器。此外,你还将学习 sftp 客户端的基本命令。
以下是当前的实施环境:
要建立 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
详细选项:
3. 接下来,使用下面的命令为用户 “sftpuser ”创建密码。
passwd sftpuser
键入强密码并重复,然后按 “回车键 ”确认。
要添加更多用户,请重复第 2 和第 3 步,最重要的是,所有 SFTP 用户必须在组 “sftpgroup ”中,且不能通过 SSH 访问 shell。
创建新组和用户后,必须为 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 用户目录的配置。
要在 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
保存配置并退出。
详细配置:
4. 要应用新配置,请使用下面的命令重启 ssh 服务。
sudo systemctl restart sshd
SFTP 服务器已准备就绪并可访问,它与 SSH 服务运行在同一端口上。
在客户端,我们将使用大多数 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中的命令行处理器
下一条: 阿联酋.AE域名搜索引擎优化优势是什么?