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


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

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

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

先决条件

  • 机器上安装了CentOS 7.x。
  • 具有sudo权限的用户。

创建SFTP用户

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

$ sudo adduser ftpuser

$ sudo passwd ftpuser
Output:
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设置所需的权限。

为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** - 这将限制用户以SSH用户身份登录终端,并在用户登录后允许SFTP。

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

  • **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>

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

更新于:2020年1月23日

263 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告