如何在 Ubuntu 16.04 上配置和保护 SFTP 而不提供 Shell 访问

在本文中,我们将了解如何在 Ubuntu 14.04 上不启用 shell 访问的情况下配置 SFTP,SSH 文件传输协议 (SFTP),这是一种使用 SSH 加密连接将文件从各种服务器传输到服务器的安全方式,这是与所有 FTP 客户端都支持的文件传输协议 (FTP) 不同的协议。

协议 (SFTP) 是一种使用 SSH 加密连接将文件从各种服务器传输到服务器的安全方式,这是与所有 FTP 客户端都支持的文件传输协议 (FTP) 不同的协议。

SFTP 可以通过在机器上启用了 SSH 访问的所有服务器上使用默认配置进行配置。SFTP 是一种安全且最简单的使用方式,它在标准配置中存在一个缺点,即允许终端 shell 访问服务器上的所有 SFTP 用户。

在某些组织中,我们希望只允许文件传输而不允许访问 SSH。

先决条件

  • 机器上安装了 Ubuntu 14.04。

  • 在机器上具有 sudo 权限的普通用户。

为 SFTP 创建用户

我们需要创建一个新用户,我们只需要使用创建的用户在服务器上授予 FTP 访问权限,并为该用户设置密码。

$ sudo adduser ftpuser

$ sudo passwd ftpuser

Changing password for user ftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

为 FTP 访问创建文件夹

我们需要在有SSH服务器权限要求的机器上创建一个非常重要的文件夹,特别是文件夹本身和机器中的所有子文件夹,并且所有上述文件夹都归root所有,没有人可以访问文件夹。

我们可以在 /var/sftp/files 中创建文件夹 /var/sftp 归 root 用户所有, /var/sftp/files 归 ftpuser 所有。

现在我们将创建所需的文件夹并设置 SFTP 设置所需的权限。

$ sudo mkdir -p /var/sftp/files
$ sudo chown root:root /var/sftp$ sudo chmod 755 /var/sftp

现在我们将 /var/sftp/files 文件夹的权限授予新创建的用户 'ftpuser'。

$ sudo chown ftpuser:ftpuser /var/sftp/files

限制对文件夹的访问

这里我们将更改SSH服务器中的配置文件,限制新创建的用户ftpuser的SSH终端访问,但允许FTP文件传输。

让我们使用 nano 和文件末尾的所有以下配置来编辑 SSH 配置。

$ sudo nano /etc/ssh/sshd_config
Output:
….
….
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server
Match User ftpuser
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/sftp
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

为了确保我们需要使用以下命令重新启动 sshd 守护进程的配置。

$ sudo systemctl restart sshd

上述配置中使用的指令是

  • 匹配用户- 配置应用于此指令中指定的用户,我们指定了 ftpuser。

  • ForceCommand internal-sftp - 限制用户在终端中以 SSH 用户身份登录,并在用户登录后允许 SFTP。

  • PasswordAuthentication yes - 这将允许对指定用户进行密码验证。

  • ChrootDirectory /var/sftp/ - 不会超出 /var/sftp 目录的所有用户。

  • AllowAgentForwarding no - 不允许对我们指定的用户进行隧道传输。

  • AllowTcpForwarding no - 将不允许端口转发到我们指定的用户。

  • X11Forwarding no - 不允许 X11 转发给我们指定的用户。

验证配置

为了验证配置,我们需要检查本地机器的 SSH 登录。

$ ssh ftpuser@localhost
output:
ftpuser@localhost's password:
Could not chdir to home directory /home/ftpuser: No such file or directory
This service allows sftp connections only.
Connection to localhost closed.

如您所见,不允许使用 SSH 登录到 ftpuser 的连接。

现在,我们将验证相同的 SFTP 访问

$ sftp ftpuser@localhost
Output:
ftpuser@localhost's password:
Connected to localhost.
sftp>

如您所见,我们已允许进行 SFTP 登录,现在您可以使用 ls 命令查看文件夹列表。

ftp> ls
files
sftp> ls -l
drwxr-xr-x    2 1000    1000       6 Jun 19 13:31 files
sftp>

在本文中,我们学习了如何在 Ubuntu 16.04 上配置和保护 SFTP 用户仅用于 SFTP 登录到单个文件夹并限制 SSH 终端登录。SSH 具有更复杂的配置和方案,其中 w 可以限制单个用户或组或对 IP 地址的有限访问。