在 Linux 中设置 SFTP 服务器的指南

什么是 SFTP?

SFTP 代表 SSH 文件传输协议。 你猜对了。 它是在顶部使用 SSH 的 FTP 版本。 它允许用户通过加密连接向 Linux 服务器上传和下载文件。 FTP 在没有加密的情况下也是如此,这就是如今 SFTP 优于 FTP 的原因。

让我们看看如何在 Linux 系统上设置 SFTP 服务器。

在 Linux 上设置 SFTP 服务器

我在本教程中使用了 Ubuntu。 安装命令特定于 Ubuntu 和 Debian,但其余步骤可以在任何其他 Linux 发行版中执行。

要执行这些步骤,您需要具有 sudoer 权限。 所以如果你不 sudo 权限,请联系您的系统管理员。 如果您是其中一个,请阅读有关创建 sudo Ubuntu 中的用户。

设置 SFTP 非常简单。 在去之前,你需要有 开放SSH 安装在服务器端,SSH包安装在客户端。

我已经在另一篇文章中详细讨论了在 Ubuntu 上设置 SSH,我将在这里仅提及重要步骤。

要在服务器中安装 OpenSSH,可以使用以下命令:

sudo apt install openssh-server

您还需要在要访问 SFTP 服务器的系统上使用 SSH。

sudo apt install ssh

完成此操作后,您将准备好设置 SFTP。 它分三步完成,我将一一向您展示。

第 1 步:创建组、用户、目录

使用 SFTP (或任何其他一般服务)安全地,最好创建组和用户以使用该服务并且仅使用该服务。 “最好将一项特定权利授予一个特定实体”.

如果您想授予 SFTP 访问权限以及正常的系统访问权限,请创建用户以便根据服务轻松识别他们。 为了 example, 如果 看到的 然后用于正常的系统访问 看到的ftp 可用于 SFTP 访问。 在管理方面使用这种方法会更容易。

让我们创建一个名为“sftpg” 使用 groupadd 命令:

sudo groupadd sftpg

让我们创建一个名为“看到的ftp” 并将他添加到上述组并给他一个密码。

sudo useradd -g sftpg seenisftp 
sudo passwd seenisftp

在 useradd 命令中, -G 选项告诉组应该添加哪个用户。 您可以列出 Linux 中的所有用户并验证是否已添加新用户。

假设您要使用该目录 /数据/ 作为你的根 sftp/数据/用户名 对于每个用户。 所以当用户通过 sftp 登录时,他们应该在 /数据/用户名 作为他们的默认目录(就像你在 /home/用户名 通过 SSH 登录 Linux 系统时的目录)。 此外,假设他们可以从该目录读取文件但只能上传到 上传 目录。

让我们创建目录并更改它们的访问权限和所有权,如下所示(阅读 Linux 中的文件权限以了解更多信息)。

sudo mkdir -p /data/seenisftp/upload
sudo chown -R root.sftpg /data/seenisftp
sudo chown -R seenisftp.sftpg /data/seenisftp/upload

可能令人困惑的一件事是将用户目录的所有权授予根本身。 这对于在 SFTP 中进行 chroot 是强制性的。 因此,请确保 /数据/用户名.

截至目前,我们有用户名为 看到的ftp 与组 sftpg 并设置了访问权限 /数据/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 是在登录时用当前用户名填充它的转义码。 什么时候 看到的ftp 通过登录 sftp,他将在 /数据/seenisftp 作为他的根目录。 他将无法看到上面的任何东西。

第三步:重启服务

为了做出改变,我们对 sshd_config live,重启服务如下。

sudo systemctl restart sshd

通过 Linux 命令行访问 SFTP

您可以像通常使用 SSH 一样登录 SFTP。

sftp [email protected]

示例 SFTP 命令

SFTP 命令通常采用以下格式。

COMMAND [SOURCE] [DESTINATION]

对于任何命令,参数可以是本地系统路径或远程系统路径。 它们之间没有具体的可见区别。 在考虑参数是本地还是远程之后,您可以正常指定路径。

得到 – 将内容从远程服务器下载到本地系统。 下面的命令下载远程文件 海报.img 到本地系统的 〜/图片 目录。

GET poster.img ~/Pictures

– 将内容从本地系统上传到远程系统。 下面的命令上传 ~/图片/poster2.jpg 进入我的 上传 目录。

PUT ~/Pictures/poster2.jpg uploads/

R M – 删除远程系统中的文件。 这非常类似于 R M 命令。 您可以从下面的命令中看到,该命令在 上传/poster3.jpg

RM uploads/poster3.jpg

以上命令非常基础,足以探索 FTP/SFTP 服务器。 如果您想了解更多信息,请使用 help 命令或使用 这个资源.

我希望这篇文章能帮助你在 Linux 上设置 SFTP 服务器。

在评论中告诉我们您的 SFTP 文件系统设置是什么。 是不是像本文中提到的那样,还是一个池化目录或其他任何东西?

如果您觉得这篇文章有用,请与您的朋友分享。 如果您有建议,请随时将它们放在下面。