当前位置: 首页 > 编程笔记 >

如何在CentOS 7上不提供Shell访问的情况下配置和保护SFTP

昝成弘
2023-03-14
本文向大家介绍如何在CentOS 7上不提供Shell访问的情况下配置和保护SFTP,包括了如何在CentOS 7上不提供Shell访问的情况下配置和保护SFTP的使用技巧和注意事项,需要的朋友参考一下

在本文中,我们将学习如何在不启用CentOS 7上的外壳访问的情况下配置SFTP,SSH文件传输协议(SFTP)是使用SSH加密连接将文件从服务器传输到服务器的安全方法,这是不同的所有FTP客户端支持的文件传输协议(FTP)中的协议。

可以通过在计算机上启用了SSH访问的所有服务器上使用默认配置来配置SFTP。SFTP是一种安全且最容易使用的方法,在标准配置中有一个缺点,它允许终端外壳访问服务器上的所有SFTP用户。

在某些组织中,我们希望仅允许文件传输,而不能访问SSH。

先决条件

  • 在机器上安装的CentOS7.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服务器权限要求的计算机中创建一个文件夹,这一要求非常重要,尤其是该文件夹本身以及计算机中的所有子文件夹以及上述所有文件夹均由根拥有,并且没有人可以访问文件夹。

我们可以在/ 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

现在,我们将/ 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。

  • ForceCommand-限制用户以SSH用户身份在终端中登录,并在用户登录后允许SFTP。

  • PasswordAuthentication-这将允许对指定的用户进行密码认证。

  • ChrootDirectory / var / sftp / -不会超出/ var / sftp目录的所有用户。

  • AllowAgentForwarding否-不允许隧道到我们指定的用户。

  • AllowTcpForwarding否-不允许将端口转发给我们指定的用户。

  • X11Forwarding否-不允许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具有更复杂的配置和方案的终端,其中w可以限制单个用户或组或受限访问到一个IP地址。

 类似资料:
  • 问题内容: 我有一个使用WebHDFS管理HDFS的有效应用程序。我需要能够在Kerberos受保护的群集上执行此操作。 问题是,没有库或扩展程序可以为我的应用程序协商票证,我只有一个基本的HTTP客户端。 是否有可能创建一个处理票证交换的Java服务,一旦获得服务票证即可将其传递给应用程序以用于HTTP请求中?换句话说,我的应用程序将要求Java服务协商票证,然后将服务票证以字符串或原始字符串的

  • 问题内容: 我正在开发一个网站,用户使用ajax,php和POST方法提交凭据,我想保护登录凭据的格式不是纯文本,但我不想使用SSL我可以在不使用SSL证书的情况下保护密码凭据吗? 谁能给我任何方法的工作示例? 问题答案: 没有一些通道外验证(SSL提供),您将无法完全保护凭据。一个在中间攻击的人永远是可能的。 简而言之,客户端无法完全确定他们正在与服务器通信,而不是在两者之间插入假服务器。

  • 问题内容: 我需要在Linux / OSX终端下使用“干净的” shell(例如bash),而无需任何用户配置,但是每次启动时,它都会从某些文件(例如〜/ .bashrc)中读取配置信息。每当我需要“干净”的外壳时,我都可以修改该文件,并在完成后将其还原,但是有没有更简单的方法来执行此操作,例如命令? 问题答案: 您可以传递和命令行选项: 您可以在手册页中找到有关这些选项的文档。

  • 问题内容: 我试图将配置(例如URLs / etc)放入资源文件夹中,以供实用程序类使用。但是,我不想从任何地方的活动中传递上下文。我希望能够通过路径名(似乎使用assess /是为此用途设计的)来访问资源,而无需使用上下文来访问资源。 在这种特殊情况下,我希望单例实例化时在配置中使用某些东西。除了实例化期间的那一次之外,它不需要任何资源。因此,每次调用getInstance()时都必须传递Con

  • 问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1

  • 我通过我的谷歌应用程序从用户那里获得了基本配置文件信息权限。现在我在api调用中新添加了“access_type=offline”。它将在同意屏幕中提示用户“离线访问”。如何避免此屏幕并在未经同意的情况下自动从用户获得脱机访问。 我的接口调用: https://accounts.google.com/o/oauth2/auth?client_id=CLIENTID 在上面的url中,我新添加了ac