linux 无sftp,如何在CentOS 7上启用没有Shell访问的SFTP

介绍

SFTP代表S SH F ile T转移协议。 顾名思义,它是使用加密的SSH连接将文件传输到服务器的安全方式。 尽管如此,它与FTP (传输协议)完全不同,尽管现在的FTP客户端得到了广泛的支持。

默认情况下,SFTP可用,并且在启用了SSH访问的所有服务器上都没有其他配置。 它的安全性和易用性,但具有缺点:在标准配置中,SSH服务器通过系统上的帐户授予所有用户的文件传输访问和终端shell访问权限。

在某些情况下,您可能只希望允许某些用户进行文件传输,也不需要SSH访问。 在本教程中,我们将设置SSH守护进程,限制SFTP访问到一个目录,每个用户不允许SSH访问。

先决条件

要遵循本教程,您将需要:一个CentOS 7服务器设置了这个初始服务器设置教程 ,包括一个sudo非root用户。

或者, yum install nano了yum install nano的nano文本编辑器yum install nano 。 默认情况下,CentOS配有vi文本编辑器,但nano可以更加用户友好。

第1步 - 创建新用户

首先,创建一个新的用户,仅授予对服务器的文件传输访问权限。 在这里,我们使用用户名sammyfiles ,但您可以使用任何您喜欢的用户名。sudo adduser sammyfiles

接下来,为新用户分配密码:sudo passwd sammyfiles

输入一个强大的密码,然后重复一次验证。

您现在已经创建了一个新用户,该用户将被授予对受限目录的访问权限。 在下一步中,我们将创建文件传输目录并设置必要的权限。

第2步 - 创建文件传输目录

为了限制SFTP访问到一个目录,我们首先必须确保目录符合SSH服务器的权限要求,这是非常特别的。

具体来说,文件系统树中的目录本身和它上面的所有目录必须由root拥有,而不能由任何其他人写。 因此,不可能简单地对用户的主目录进行受限访问,因为主目录由用户拥有而不是root 。

注意:某些版本的OpenSSH对目录结构和所有权没有这样严格的要求,但大多数现代Linux发行版(包括CentOS 7)都是这样做的。

有多种方法来解决这个所有权问题。 在本教程中,我们将创建并使用/var/sftp/uploads作为目标上传目录。 /var/sftp将由root拥有,其他用户将不可写; 子目录/var/sftp/uploads将由sammyfiles拥有,以便用户能够将文件上传到它。

首先,创建目录。sudo mkdir -p /var/sftp/uploads

将/var/sftp的所有者设置为root 。sudo chown root:root /var/sftp

给同一目录下的root写入权限,并给其他用户只读和执行权限。sudo chmod 755 /var/sftp

将uploads目录的所有权更改为sammyfiles 。sudo chown sammyfiles:sammyfiles /var/sftp/uploads

现在目录结构到位,我们可以配置SSH服务器本身。

第3步 - 限制访问一个目录

在此步骤中,我们将修改SSH服务器配置以禁止sammyfiles的终端访问,但允许文件传输访问。

让我们用vi或者你最喜欢的文本编辑器打开SSH服务器配置文件(这里是vi的简短介绍 )sudo vi /etc/ssh/sshd_config

滚动到文件的最底部,并附加以下配置代码段:

的/ etc / SSH / sshd_config中. . .

Match User sammyfiles

ForceCommand internal-sftp

PasswordAuthentication yes

ChrootDirectory /var/sftp

PermitTunnel no

AllowAgentForwarding no

AllowTcpForwarding no

X11Forwarding no

然后保存并关闭文件。

以下是这些指令中的每一个:Match User告诉SSH服务器仅对指定的用户应用以下命令。 在这里,我们指定sammyfiles 。

ForceCommand internal-sftp强制SSH服务器在登录时运行SFTP服务器,不允许shell访问。

PasswordAuthentication yes允许该用户进行密码验证。

ChrootDirectory /var/sftp/确保不允许用户访问/var/sftp目录之外的任何内容。 您可以在这个基于Ubuntu的chroot教程中了解更多关于chroot的信息。

AllowAgentForwarding no , AllowTcpForwarding no 。 并且X11Forwarding no禁用此用户的端口转发,隧道和X11转发。

可以为不同的用户复制和重复这个命令,从Match User开始。 确保相应地修改Match User行中的Match User名。

注意 :您可以省略PasswordAuthentication yes行,而是设置SSH密钥访问以提高安全性。 在禁用用户的shell访问之前,请确保执行此操作。

在接下来的步骤中,我们将通过本地SSH访问密码来测试配置,但是如果您设置了SSH密钥,则需要使用用户密钥对来访问计算机。

要应用配置更改,请重新启动服务。sudo systemctl restart sshd

您现在已将SSH服务器配置为限制仅对sammyfiles进行文件传输的访问 。 最后一步是测试配置,以确保其按预期工作。

第4步 - 验证配置

让我们确保我们的新sammyfiles用户只能传输文件。

使用正常的shell访问作为sammyfiles登录到服务器应该不再可能。 我们来试试吧ssh sammyfiles@localhost

在返回原始提示之前,您将看到以下消息:Error messageThis service allows sftp connections only.

Connection to localhost closed.

这意味着sammyfiles无法再使用SSH访问服务器shell。

接下来,我们来验证用户是否可以成功访问SFTP进行文件传输。sftp sammyfiles@localhost

而不是错误消息,此命令将显示一个成功的登录消息与交互式提示。SFTP promptConnected to localhost.

sftp>

您可以在提示符中使用ls列出目录内容:ls

这将显示在uploads一步中创建的uploads目录,并返回到sftp>提示符。SFTP file list outputuploads

为了验证用户确实受限于此目录,无法访问其上的任何目录,您可以尝试将目录更改为上述目录。cd ..

此命令不会发出错误,但是如前所述列出目录内容将不显示任何更改,从而证明用户无法切换到父目录。

您现在已经验证了受限配置是否正常工作。 新创建的sammyfiles用户只能使用SFTP协议访问服务器进行文件传输,无法访问完整的shell。

结论

您已将用户限制在仅SFTP访问服务器上的单个目录,而无需完全shell访问。 虽然本教程仅使用一个目录和一个用户来简化,但您可以将此示例扩展到多个用户和多个目录。

SSH服务器允许更复杂的配置方案,包括一次限制对组或多个用户的访问或限制对某些IP地址的访问。 您可以在OpenSSH Cookbook中找到其他配置选项和可能的指令说明。 如果您遇到任何SSH问题,您可以使用此故障排除SSH系列进行调试和修复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值