什么是 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 文件系统设置是什么。 是不是像本文中提到的那样,还是一个池化目录或其他任何东西?
如果您觉得这篇文章有用,请与您的朋友分享。 如果您有建议,请随时将它们放在下面。