在 /etc/ssh/sshd_config 中更改的 默认 OpenSSH 安全选项

举报
Tiamo_T 发表于 2022/04/12 09:16:36 2022/04/12
【摘要】 OpenSSH 选项通过 /etc/ssh/sshd_config 文件控制。本文介绍了 sshd_config 文件中应更改的 7 个默认选项。

OpenSSH 选项通过 /etc/ssh/sshd_config 文件控制。本文介绍了 sshd_config 文件中应更改的 7 个默认选项。

在 sshd_config 中,以 # 开头的行是注释。对于那些使用默认值的选项,sshd_config 文件包含带有选项及其默认值的注释行。

这使我们更容易,因为我们可以看到 OpenSSH 选项名称和默认值,而无需在其他地方查找。
例如,sshd_config 文件包含以下注释行。这表明 PubkeyAuthentication 选项包含“yes”作为默认值。

$ grep -i pubkey /etc/ssh/sshd_config
#PubkeyAuthentication yes

如果您想更改它,您应该删除注释并更改值(从是到否),如下所示。

$ vi /etc/ssh/sshd_config
PubkeyAuthentication no

我仅将上述内容作为示例。您不需要更改 PubkeyAuthentication 选项的默认值,因为允许公钥身份验证很好。

除了本文提到的 7 个选项外,您无需修改​​ sshd_config 文件中的任何默认值。

1.禁用根登录(PermitRootLogin)

默认情况下,您可以以 root 身份 ssh 到服务器。最好不要让root直接登录服务器。相反,您应该以您的帐户登录系统,然后执行“su -”以以 root 身份登录。

如果您的组织中有多个系统管理员,并且他们都直接以 root 身份登录到服务器,您可能不知道哪个系统管理员以 root 身份登录。相反,如果您禁用以 root 身份登录,系统管理员必须先以他们的帐户登录,然后才能执行“su -”,这使得审核更容易。

将以下条目添加到 sshd_config 以禁用 root 直接登录服务器。

$ vi /etc/ssh/sshd_config
PermitRootLogin no

2. 只允许特定的用户或组(AllowUsers AllowGroups)

默认情况下,任何通过身份验证成功的人都可以登录。相反,您可以限制允许哪些用户(或组)登录系统。

当您在系统上创建了多个用户帐户但只希望其中几个用户登录时,这很有帮助。

当您使用 NIS、openLDAP(或其他一些外部系统)进行身份验证时,这也很有帮助。您公司中的每个用户都可能拥有 NIS、OpenLDAP 等帐户。但是,在特定服务器上,您只希望其中少数人登录。例如,在生产系统上,您只希望系统管理员登录。

将以下条目添加到 sshd_config 文件以仅允许特定用户登录系统。在下面的示例中,只有 ramesh、john 和 jason 可以登录到该系统。用户名应该用空格分隔。

$ vi /etc/ssh/sshd_config
AllowUsers ramesh john jason

将以下条目添加到 sshd_config 文件以仅允许属于特定组的用户登录。在下面的示例中,只有属于 sysadmin 和 dba 组的用户才能登录系统。

$ vi /etc/ssh/sshd_config
AllowGroups sysadmin dba

3.拒绝特定用户或组(DenyUsers DenyGroups)

除了允许特定用户(或组)之外,您还可以拒绝特定用户或组。

将以下条目添加到 sshd_config 文件以拒绝特定用户登录系统。在下面的示例中,cvs、apache、jane 无法登录到该系统。用户名应该用空格分隔。

$ vi /etc/ssh/sshd_config
DenyUsers cvs apache jane

将以下条目添加到 sshd_config 文件以拒绝属于特定组的用户登录。在下面的示例中,属于开发人员和 qa 组的用户无法登录系统。

$ vi /etc/ssh/sshd_config
DenyGroups developers qa

注意:您可以使用所有 Allow 和 Deny 指令的组合。它按以下顺序处理:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups

4.更改SSHD端口号(Port)

默认情况下 ssh 在 22 端口上运行。大多数攻击者会检查服务器是否在 22 端口上打开,并会随机使用暴力破解使用多个用户名和密码组合来登录服务器。

如果您将端口号更改为不同的端口号,其他人需要确切知道使用什么端口来使用 ssh 登录服务器。下面的示例使用端口 222 进行 ssh。

$ vi /etc/ssh/sshd_config
Port 222

从您的日志 (/var/log/secure) 中,如果您看到许多使用 ssh 登录系统上不存在的帐户的无效登录,来自
您不认识的 ip 地址,这可能是一些暴力 -武力攻击。如果您更改端口号,那些 ssh 无效登录将停止。

请注意,这对登录系统的团队几乎没有什么不便,因为他们需要知道 IP 地址和端口号。

5.更改登录宽限时间(LoginGraceTime)

当您 ssh 到服务器时,您有 2 分钟的时间登录。如果您在 2 分钟内没有成功登录,ssh 将断开连接。
2分钟成功登录的时间太长了。您应该考虑将其更改为 30 秒,或者可能是 1 分钟。

将以下条目添加到 sshd_config 文件以将登录宽限时间从 2 分钟更改为 1 分钟。

$ vi /etc/ssh/sshd_config
LoginGraceTime 1m

6.限制接口(IP地址)登录(ListenAddress)

如果服务器上有多个配置为不同 IP 地址的接口,您可能不希望每个人都使用所有这些 IP 地址登录服务器。

让我们假设您在服务器上有以下 4 个接口:

  • eth0 – 192.168.10.200
  • eth1 – 192.168.10.201
  • eth2 – 192.168.10.202
  • eth3 – 192.168.10.203

默认情况下,ssh 将侦听上述所有 IP 地址。如果您希望用户仅使用 ip-address 200 和 202 登录,请在 sshd_config 中执行以下操作

$ vi /etc/ssh/sshd_config
ListenAddress 192.168.10.200
ListenAddress 192.168.10.202

7. 无活动时断开 SSH (ClientAliveInterval)

成功登录系统后,您可能希望在 x 分钟后没有任何活动时断开连接。这基本上是空闲超时。

在 Bash 中,您可以使用TMOUT 变量来实现这一点。

在 OpenSSH 中,这可以通过在 sshd_config 文件中组合 ClientAliveCountMax 和 ClientAliveInterval 选项来实现。

  • ClientAliveCountMax – 这表示 ssh 服务器发送的 checkalive 消息的总数,而没有得到 ssh 客户端的任何响应。默认值为 3。
  • ClientAliveInterval – 这表示超时(以秒为单位)。x 秒后,ssh 服务器将向客户端发送一条消息,请求响应。默认为 0(服务器不会向客户端发送消息进行检查。)。

如果想让 ssh 客户端在 10 分钟(600 秒)后自动退出(超时),修改 sshd_config 文件,设置如下两个参数,如下图。

$ vi /etc/ssh/sshd_config
ClientAliveInterval 600
ClientAliveCountMax 0
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。