保护 SSH 并禁用直接 root

保护 SSH 并禁用直接 root

在下面的这些说明中,我的终端上显示的内容有所不同,因此不确定我应该更改什么。在端口 22 后,我的端口显示 #AddressFamily any,再往下看协议,它有更长的行,显示协议 1 的#activation,然后在未注释的协议 2 下面的行上。另外,如果您禁用直接 root 登录,您是否会使用 sudo 来代替为 root 创建的相同密码?

向下滚动到文件中如下所示的部分:

#Port 22
#Protocol 2, 1
#ListenAddress 0.0.0.0
#ListenAddress ::

取消注释并更改

#Port 22 
to look like 
Port 5678 (choose your own 4 to 5 digit port number (49151 is the highest port number AND do not use 5678  lol )

Uncomment and change 
#Protocol 2, 1
to look like 
Protocol 2

Uncomment and change 
#ListenAddress 0.0.0.0
to look like 
ListenAddress 123.123.123.15 (use one of your own IP Addresses that has been assigned to your server)

注意 1:如果您想禁用直接 Root 登录,请向下滚动直至找到

#PermitRootLogin yes
and uncomment it and make it look like 
PermitRootLogin no

而我的是这样的:

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2

啊,你必须参加在线课程才能在这个论坛上工作:/

答案1

OpenSSH 遵循“注释掉默认值”政策。这意味着(系统范围的)配置文件包含大多数可用选项(如果没有注释掉),这些选项将与硬连接到实际可执行二进制文件的应用程序默认值具有相同的值。从前一段时间开始,默认Protocol设置值从 更改2, 12only。因此,基于旧版本的说明在今天并不适用。另一件需要考虑的事情是,特定发行版如何更改其包中的文件。

至于设置:

  • 除非您使用古老的应用程序,否则请保持Protocol设置为2“经常”,除非您知道这意味着什么,否则请保留默认值;

  • 更改端口没有多大意义,除非由于您所在网络的限制而只有一些可用端口。绝对是不是安全强化措施。

  • 防止直接 root 访问是一个好主意。您可能还想禁用密码登录并仅使用私钥身份验证,因为它是很多通过暴力破解更困难(读起来不可能)。它还可以有效地为 root 访问创建两级身份验证(首先使用私钥登录,然后使用密码susudo)。另一方面,如果没有密钥,您将无法登录(这在某些情况下可能会造成严重问题)。

  • 绑定到特定地址没有多大意义,除非您确实只想为其提供一个网络接口。再次强调 - 如果您不确定,请不要更改它。在具有动态IP地址的机器上,甚至可能导致服务暂时不可用。

答案2

我不确定我是否真的理解你的问题,但这是我得到的要点:

  • 配置文件中配置条目的顺序无关紧要。这就是为什么您的文件可能具有与说明中的布局不同的布局。您应该确保每个参数只在文件中使用一次。
  • 正如@Mark所说,是否只使用协议2取决于你的环境。如果你想启用版本1和2,该行应该是Protocol 1,2
  • 更改端口是一个习惯问题(或者在某些情况下是约定问题),并且不会提高安全性:攻击者可以轻松地进行端口扫描来找出您的 SSHD 正在哪个端口上运行。 (嗯,您可以通过某些方式阻止端口扫描,但这对于熟练的攻击者来说只是时间和资源问题。)
  • 允许root登录安全问题:您不仅允许使用每个人都知道的用户名(因此攻击者可以集中精力暴力破解该有效用户名的密码),而且还允许使用最宽松的一个帐户。除非有充分的理由,否则我建议选择或,PermitRootLogin no具体取决于您的政策。susudo
  • sudo要求用户再次输入自己的密码,同时su要求root用户输入 的密码。区别在于,实际上为用户su打开了一个shell,他可以在其中打开一个 shell。root rootsudo允许用户以root.安全sudo配置取决于经验(例如,如果您允许用户以 运行bash,那么root您基本上就允许root访问每个sudoer),因此sudo仅通过启用它并不能提高安全性。
  • 通过将 SSHD 绑定到特定 IP 地址ListenAddress仅在连接到多个网络的主机上有用。在此类系统上,如果您限制对需要 SSH 访问的网络的 SSH 访问,则会获得安全性。

答案3

仅提供部分答案和建议。

根据评论和我自己在 ubuntu 10.04 上的 sshd 配置文件,我建议您使用协议 2。除非您有旧版/稍旧的 ssh 客户端。

ListenAddress将ssh守护进程绑定到特定的接口(对应于ip)。将其保留为 0.0.0.0 将绑定到所有接口(不仅是外部接口,还包括 localhost/loopback),而指定 IP 地址会将其绑定到该单个接口。

PermitRootLogin no 表示您无法使用 root 通过 ssh 登录。当您登录时,您仍然可以切换到 root 用户,尽管我认为最佳实践是使用 sudo。

更改端口显然会更改 ssh 侦听的端口。我不确定您从哪里获得可用端口范围。一些端口被保留,请参见http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers以获得详细的列表。端口号最多可以达到 65535,只要您知道不会破坏任何东西,那么 1024 以上的端口实际上是公平的游戏。

希望有帮助!

标记

答案4

行的顺序sshd_config无关紧要,除了一件事:以单词开头的每一行都Match开始一个新的部分,并且这些部分的排列很重要。

以 开头的行#被注释掉:它们被忽略。您可能会在默认配置文件中看到它们,作为您可以根据需要编写的内容的示例。您不必注释掉该行来更改设置,您可以根据需要编写额外的行。

例如,#Port 22是因为默认端口是 22。如果删除该#字符,您将显式地将端口设置为 22,这实际上不会改变任何内容。如果删除#并更改数字,这将导致 SSH 服务器侦听不同的端口。您还可以单独保留注释掉的行(如果存在的话)并Port 1234在单独的行上书写。

侦听不同的端口并不是很有用:攻击者知道如何找到侦听任何端口的服务器,风险只会略微降低。更改端口的唯一好处是您会在日志中获得更少的自动尝试(寻找弱密码)。这是不值得的:更改端口将使您的服务器在某些仅允许某些端口上的加密流量的防火墙后面无法访问。

拥有Protocol 2是一个好主意,除非您知道您希望能够使用非常老的客户端。

ListenAddress仅对于您希望 SSH 服务器仅侦听一个网卡的某些配置有用。你不需要它。

PermitRootLogin no通常是个好主意,但这并不是某些人认为的绝对简单的事情。仅当您的 root 密码较弱或泄露(这不是一个好主意)或者您允许 root 使用较弱或泄露的密钥登录(同上)时,它才提供直接的安全优势。如果root无法直接登录,则意味着用户必须先使用自己的帐户登录。这有利于问责制,了解事后发生了什么合法的用户已登录。在大多数设置中,恶意用户可以在事后更改日志,因此他们采取的额外步骤将不可见。

另一种常见的强化设置是要求用户使用密钥对而不是密码进行身份验证,即禁用密码身份验证:

PasswordAuthentication no

仅在以下情况下才应允许密码身份验证:

  • 您的所有用户都可以选择强密码;和
  • 您可以信任所有用户永远不会从受信任的计算机登录(他们确信没有键盘记录器等)。

相关内容