在 Linux 中设置 SFTP 服务器的指南
本教程将为您提供在 Linux 中安装和设置 SFTP 服务器的便捷指南。
什么是 SFTP?
SFTP 代表 SSH 文件传输协议。你猜对了。它是在 FTP 之上使用 SSH 的版本。它允许用户通过加密连接向 Linux 服务器上传和下载文件。 FTP 在不加密的情况下执行相同的操作,这就是为什么现在 SFTP 比 FTP 更受欢迎的原因。
让我们看看如何在 Linux 系统上设置 SFTP 服务器。
在 Linux 上设置 SFTP 服务器
我在本教程中使用了 Ubuntu。安装命令特定于 Ubuntu 和 Debian,但其余步骤可以在任何其他 Linux 发行版中遵循。
要执行这些步骤,您需要拥有 sudoer 权限。因此,如果您没有 sudo 权限,请联系您的系统管理员。如果您是其中之一,请阅读有关在 Ubuntu 中创建 sudo 用户的内容。
设置 SFTP 非常简单。在此之前,您需要在服务器端安装 OpenSSH,在客户端安装 SSH 软件包。
我已经在另一篇文章中详细讨论了在 Ubuntu 上设置 SSH,这里仅提及重要步骤。
要在服务器中安装 OpenSSH,可以使用以下命令:
sudo apt install openssh-server
您还需要在要访问 SFTP 服务器的系统上使用 SSH。
sudo apt install ssh
完成此操作后,您就已准备好设置 SFTP。分三步完成,我来一一展示给大家。
第 1 步:创建组、用户、目录
要安全地使用 SFTP(或任何其他一般服务),最好创建组和用户以仅使用该服务。 “最好将一项特定权利授予一个特定实体”。
如果您想要授予 SFTP 访问权限以及正常的系统访问权限,请创建用户,以便根据服务轻松识别他们。例如,如果seeni 用于正常系统访问,则seenisftp 可用于SFTP访问。使用这种方法在管理方面会更容易。
让我们使用 groupadd 命令创建一个名为“sftpg”的组:
sudo groupadd sftpg
让我们创建一个名为“seenisftp”的用户,并将其添加到上述组中,并给他一个密码。
sudo useradd -g sftpg seenisftp
sudo passwd seenisftp
在 useradd 命令中,-g 选项告诉组应将哪个用户添加到其中。您可以列出 Linux 中的所有用户并验证是否已添加新用户。
假设您希望使用目录 /data/ 作为每个用户的 sftp 和 /data/USERNAME 的根目录。因此,当用户通过 sftp 登录时,他们应该位于 /data/USERNAME 作为默认目录(就像您登录 Linux 时位于 /home/USERNAME 目录中一样)通过 SSH 系统)。另外,假设他们可以从该目录读取文件,但只能上传到上传 目录。
让我们创建目录并更改其访问权限和所有权,如下所示(阅读 Linux 中的文件权限以了解更多信息)。
sudo mkdir -p /data/seenisftp/upload
sudo chown -R root.sftpg /data/seenisftp
sudo chown -R seenisftp.sftpg /data/seenisftp/upload
可能令人困惑的一件事是将用户目录的所有权授予根本身。这对于 SFTP 中的 chroot 是必需的。因此,请确保 /data/USERNAME 的所有者是 root。
截至目前,我们有名为 seenisftp 的用户,组为 sftpg,并且具有为 /data/seenisftp 设置的访问权限。
步骤2:配置sshd_config
接下来,您需要配置 ssh 服务器,以便每当属于 sftpg 组的用户登录时,他/她都会进入 sftp ,而不是通过 ssh 获得的普通 shell。如果尚不存在,请将以下代码段添加到 /etc/ssh/sshd_config
中。
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
在上面的代码片段中,ChrootDirectory 允许将指定目录作为目录树中的根(“/”目录)节点。登录的用户看不到该目录之上的任何内容。因此它将阻止当前用户通过sftp访问其他用户的文件。 %u 是转义码,用于在登录时填写当前用户名。当seenisftp通过sftp登录时,他将在/data/seenisftp中他的根目录。他将看不到上面的任何东西。
第三步:重启服务
要实时更改我们对 sshd_config 所做的更改,请按如下方式重新启动服务。
sudo systemctl restart sshd
通过Linux命令行访问SFTP
您可以像平常使用 SSH 一样登录 SFTP。
sftp [email
SFTP 命令示例
SFTP 命令通常采用以下格式。
COMMAND [SOURCE] [DESTINATION]
对于任何命令,参数可以是本地系统路径或远程系统路径。它们之间没有明显的具体区别。在考虑参数是本地还是远程后,您可以正常指定路径。
GET – 将内容从远程服务器下载到本地系统。以下命令将远程文件 poster.img 下载到本地系统的 ~/Pictures 目录。
GET poster.img ~/Pictures
PUT – 将内容从本地系统上传到远程系统。以下命令将 ~/Pictures/poster2.jpg 上传到我的上传目录。
PUT ~/Pictures/poster2.jpg uploads/
RM – 删除远程系统中的文件。这与rm命令非常相似。您可以从下面的命令中看到删除 uploads/poster3.jpg 处的图像
RM uploads/poster3.jpg
上面的命令非常基本,足以探索 FTP/SFTP 服务器。如果您想了解更多信息,请使用 help
命令或使用此资源。
我希望这篇文章可以帮助您在 Linux 上设置 SFTP 服务器。
请在评论中告诉我们您的 SFTP 文件系统设置是什么。是像本文中提到的那样还是池目录或其他什么?
如果您觉得这篇文章有用,请与您的朋友分享。如果您有建议,请随时将其放在下面。