≡菜单

您应该在/ etc / ssh / sshd_config中更改的7个默认的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 是

If you like to change this, you should remove the comment and change the value (from 是 to no) as shown below.

$ vi / etc / ssh / sshd_config
PubkeyAuthentication no

我仅以上面的示例为例。你不’您需要更改PubkeyAuthentication选项的默认值,因为允许公用密钥身份验证是好的。

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

1.禁用根登录(PermitRootLogin)

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

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

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

$ vi / etc / ssh / sshd_config
PermitRootLogin no

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

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

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

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

将以下条目添加到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下面的示例中,jane无法登录到该系统。用户名应以空格分隔。

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

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

$ vi / etc / ssh / sshd_config
DenyGroups developers qa

注意:您可以组合使用所有“允许”和“拒绝”指令。它按以下顺序处理:DenyUsers,AllowUsers,DenyGroups,最后是AllowGroups

4.更改SSHD端口号(端口)

默认情况下,ssh在端口22上运行。大多数攻击者都会检查端口22上是否打开了服务器,并且将使用几种用户名和密码组合,随机使用蛮力登录服务器。

如果将端口号更改为其他端口,则其他用户需要确切知道要使用哪个端口使用ssh登录服务器。下面的示例使用ssh端口222。

$ vi / etc / ssh / sshd_config
Port 222

从日志(/ var / log / secure)中,如果看到许多使用ssh进行无效登录的无效登录,’从您的系统上存在
你不知道的IP地址’不知道,这是蛮力攻击。如果更改端口号,则此类ssh无效登录将停止。

请注意,这给您的团队登录系统带来的不便,因为他们需要知道ip地址和端口号。

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

SSH到服务器时,您有2分钟的登录时间。如果你不这样做’t在2分钟内成功登录,ssh将断开连接。
2分钟的时间才能成功登录。您应该考虑将其更改为30秒,或者可能是1分钟。

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

$ vi / etc / ssh / sshd_config
LoginGraceTime 1m

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

如果服务器上有多个接口配置为不同的ip-address,则可能不希望每个人都使用所有这些ip-address登录到服务器。

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

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

默认情况下,ssh将侦听上述所有IP地址。如果希望用户仅使用IP地址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变量.

In OpenSSH的, this can be achieved 通过 combining ClientAliveCountMaxand ClientAliveIntervaloptions in sshd_config file.

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

如果要ssh客户端在10分钟(600秒)后自动退出(超时),请修改sshd_config文件并设置以下两个参数,如下所示。

$ vi / etc / ssh / sshd_config
ClientAliveInterval 600
ClientAliveCountMax 0

如果您喜欢这篇文章,您可能还会喜欢..

  1. 50个Linux Sysadmin教程
  2. 50个最常用的Linux命令(包括示例)
  3. 排名前25位的最佳Linux性能监视和调试工具
  4. 妈妈,我找到了! – 15个实用的Linux Find命令示例
  5. Linux 101 Hacks第二版电子书 Linux 101黑客手册

Bash 101 Hacks书 Sed和Awk 101黑客手册 Nagios Core 3书 Vim 101黑客手册

{ 21 评论… 加一 }

  • 罗汉 2011年5月23日,上午3:53

    伟大的文章Ramesh。

  • 亚历克西斯 2011年5月23日,上午5:54

    优秀职位

  • 高拉夫 2011年5月23日,上午6:24

    你好,
    Ramesh gr8文章。
    我从你的文章中学到了很多东西。

  • 安德鲁 2011年5月23日,下午12:01

    运行DenyHosts也是避免暴力破解的良好安全措施。

    http://en.wikipedia.org/wiki/DenyHosts

  • 杰夫 2011年5月23日,下午1:19

    几件事,

    对于PermitRootLogin,对于使用xCAT或pdsh等分布式管理工具或其他分布式shell在数百个主机中完成一项任务的企业环境中的人员,您还可以设置“允许RootLogin无密码” —这将仅允许基于密钥的身份验证成功进行root登录,从而使您可以控制允许root登录的位置。.aka中央管理服务器…假设您管理密钥。

    另外,我得说..改变sshd端口是’不会使您走得更远。’不能很好地工作,因为任何攻击者都可以简单地进行端口扫描以找到新的ssh端口。.最好的选择是保持ssh的最新状态,并使用tcpwrappers等。’•依靠外部防火墙阻止不必要的流量。

  • 克劳特 2011年6月2日,上午2:42

    在具有多个系统管理员的组织中拒绝直接root登录具有另一个优点:您可以通过删除相应的用户帐户来撤消访问权限,而无需更改root密码。

  • 俊义 2011年6月7日,上午1:12

    当我输入以下内容时:
    sudo update-alternatives–安装/ usr / bin / editor vi / usr / bin / vim 100
    更新替代品:错误:/ usr / bin / editor编辑器
    它说错误,为什么?
    获得答案
    谢谢!

  • 肯·考德尔 2011年6月16日,上午11:14

    您在本文中指的是哪个版本的OpenSSH?或者,更好的是,AllowUser选项在哪个版本中可用。

    我有几台使用非常旧版本的服务器,并且在我的sshd_config文件中看不到AllowUser等选项。

    肯C

  • 阿卜杜勒·加尼博士 2011年7月14日,晚上8:55

    作为普通用户,我们无法编辑/ etc / ssh / sshd_config文件。我认为这是输入错误。 ($ vi / etc / ssh / sshd_config)。我们应该是root用户才能编辑此文件#vi / etc / ssh / sshd_config。

  • 弗雷德 2011年7月19日,下午2:14

    不错的帖子,但距离我还差得远…
    我认为就安全性而言,缺少某些指令,例如“Protocol 2
    , UsePrivilegeSeparation 是, X11Forwarding no, AllowTcpForwarding no, StrictModes 是, PermitTunnel no, …”.
    对于PermitRootLogin指令,也许您应该添加‘without-password’ or ‘forced-command-only’.
    弗雷德

  • 双色 2012年5月21日,上午5:34

    优秀的东西

  • 拉曼 2012年8月20日,上午3:21

    完善&显示细节的简单方式…我们希望您越来越喜欢这样…

  • 阿舒托什 2012年8月23日,上午2:30

    好帖子

  • 一些人 2013年3月7日,下午12:06

    是的,我同意“UsePrivilegeSeparation沙箱”还应提及,因为这意味着初始的预身份验证将在无特权的子进程中进行。

  • 霍拉西奥 2014年3月12日,下午1:27

    我认为ClientAliveInterval不会断开空闲客户端的连接。如果客户端无法访问(连接丢失),则ClientAliveInterval将终止会话。如果您将终端保持打开状态,则不要’做任何事情,配置ClientAliveInterval / ClientAliveCountMax赢了’t close the session.

  • 霍拉西奥 2014年3月12日,下午1:39

    I was wrong! What I have said is when you use ClientAliveCountMax!= 0. Sory!

  • 库玛 2014年10月21日,上午8:37

    Is there any Min/Max value recommended for ClientAliveIntervalof sshd_config in RHEL host?

  • 萨希尔·卡拉 2014年11月20日,晚上10:48

    $ vi / etc / ssh / sshd_config
    ClientAliveInterval30
    ClientAliveCountMax3

    然后几秒钟后,我的ssh会话将被注销?

  • 2015年10月14日,上午2:31

    多年来,更改SSH端口不会带来任何额外的安全性。最好禁用密码并仅允许RSA登录;和/或为敏感系统添加带有令牌的Google搜索身份验证器。

  • 迈克尔·布朗 2016年5月27日,上午8:32

    本文对ClientAliveInterval的描述不正确。此选项实际上以特定的时间间隔将数据包从ssh服务器发送到ssh客户端,如果网络连接断开,则断开客户端连接。它基本上可以检测到网络中断,但与会话空闲时间无关。

  • 加里马·贾恩(Garima Jain) 2016年6月21日,上午1:10

    你好

    如果已将ssh上的传入流量限制为其他端口,但要保持22个开放用于SFTP服务。有没有一种使用sshd_config实现它的方法?

    简而言之,我想在22上禁用ssh,但保持sftp打开。我该怎么办?

发表评论