在 /etc/ssh/sshd_config 中更改的 默认 OpenSSH 安全选项
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
- 点赞
- 收藏
- 关注作者
评论(0)