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


在本文中,我们将学习如何在 Ubuntu 14.04 上配置 SFTP 而不启用 Shell 访问权限。SSH 文件传输协议 (SFTP) 是一种安全的方式,用于在各种服务器之间传输文件,或从服务器到服务器,使用 SSH 加密连接。这与文件传输协议 (FTP) 不同,FTP 受所有 FTP 客户端支持。

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

SFTP 可以通过使用所有启用了 SSH 访问权限的服务器上的默认配置来配置。SFTP 是一种安全且易于使用的传输方式,但在标准配置中存在一个缺点,即允许所有服务器上的 SFTP 用户访问终端 Shell。

在一些组织中,我们希望只允许文件传输,而不允许访问 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

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

$ 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

上述配置中使用的指令是

  • Match User - 此配置应用于此指令中指定的用户,我们指定了 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 具有更复杂的配置和方案,我们可以限制单个用户或组,或限制对 IP 地址的访问。

更新于: 2020-01-23

240 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告