如何在 Ubuntu 16.04 上配置和保护 SFTP 而不提供 Shell 访问
在本文中,我们将了解如何在Ubuntu14.04上不启用shell访问的情况下配置SFTP,SSH文件传输协议(SFTP),这是一种使用SSH加密连接将文件从各种服务器传输到服务器的安全方式,这是与所有FTP客户端都支持的文件传输协议(FTP)不同的协议。
协议(SFTP)是一种使用SSH加密连接将文件从各种服务器传输到服务器的安全方式,这是与所有FTP客户端都支持的文件传输协议(FTP)不同的协议。
SFTP可以通过在机器上启用了SSH访问的所有服务器上使用默认配置进行配置。SFTP是一种安全且最简单的使用方式,它在标准配置中存在一个缺点,即允许终端shell访问服务器上的所有SFTP用户。
在某些组织中,我们希望只允许文件传输而不允许访问SSH。
先决条件
机器上安装了Ubuntu14.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。
ForceCommandinternal-sftp-限制用户在终端中以SSH用户身份登录,并在用户登录后允许SFTP。
PasswordAuthenticationyes-这将允许对指定用户进行密码验证。
ChrootDirectory/var/sftp/-不会超出/var/sftp目录的所有用户。
AllowAgentForwardingno-不允许对我们指定的用户进行隧道传输。
AllowTcpForwardingno-将不允许端口转发到我们指定的用户。
X11Forwardingno-不允许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>
在本文中,我们学习了如何在Ubuntu16.04上配置和保护SFTP用户仅用于SFTP登录到单个文件夹并限制SSH终端登录。SSH具有更复杂的配置和方案,其中w可以限制单个用户或组或对IP地址的有限访问。