如何在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地址的有限访问。