您还未登录! 登录 | 注册 | 帮助  

您的位置: 首页 > 软件开发专栏 > 系统/运维 > 正文

Linux 系统安装完后就可以用了吗?其实还有一些后续工作需要做

发表于:2023-03-08 作者:TIAP 来源:TIAP

云计算极大地改变了服务器应用场景,许多平台都提供免费的 Linux 云服务器,你可以在几分钟内通过这些平台部署一台 Linux 服务器。

不过,作为云服务器,也有弊端。因为它是在互联网上可见的,所以一旦你启动了一台新服务器,黑客便会通过脚本自动扫描错误的配置或者漏洞。

所以,在安装完 Linux 系统后,还需要做一些安全相关的配置,以提升系统的安全性。

下面是一张使用 Fail2ban 工具查看系统信息的截图:

图片

如上图所示,有 212 次失败的登录尝试和 6 个被阻止的 IP 地址,这些都是未经授权的人或脚本对系统进行的入侵。

所以,对系统做一些安全的配置是十分有必要的。如下我们总结了一些在安装 Linux 系统后建议采取的措施。

1,确保设置了非 root 用户

root 用户具有最高权限,但是我们并不是所有工作都需要使用 root 用户。

同时,几乎所有 Linux 系统中都有 root 用户,所以攻击者通常会使用 root 用户名来尝试登录系统。

所以,在平时工作中最好以非 root 用户登录,且 ssh 禁用远程访问的 root 登录。

那么怎么添加用户呢?我们在先前的文章中介绍过添加用户的方法,大家可以参考:​​使用 useradd 命令在 Linux 中添加新用户​

添加用户可使用 root 用户登录系统,然后使用 useradd 命令添加新用户,如下所示:

useradd <username>
 

使用 passwd 命令为新添加的用户设置密码:

passwd <username>
 

2,确保非 root 用户具有 sudo 权限

如果需要使用 ssh 远程登录系统,且需要执行 root 权限的活动,那么所使用的登录账户需要具有 sudo 权限。

在 Ubuntu 和 CentOS 中创建 sudo 用户的过程是相似的,但是 sudo 用户组是不同的。

首先以 root 身份登录系统。

在 CentOS 和 Red  Hat 上,wheel 组是具有 sudo 权限的用户组,可以使用 usermod 命令将用户添加到该用户组中。

usermod-aG wheel <username>
 

Ubuntu 使用 sudo 用户组来管理 sudo 用户:

usermod-aGsudo <username>
 

3,启用基于密钥的 ssh 身份验证

为 ssh 启用基于密钥的身份验证非常重要,这样当我们禁用基于密码的身份验证时,它就可以正常工作。

暴力破解或者盗取密码是入侵者获取系统访问权限的常用方式,如果我们禁用基于密码的 ssh 登录,采用基于密钥的 ssh 连接,那么攻击者就无法根据用户名和密码访问服务器了。

启用 ssh 后,需要做的就是在个人计算机上生成 ssh 密钥,有了 ssh 密钥,就需要为非 root 用户将公钥添加到服务器的 authorized_keys 中。

4,确保允许 ssh 通过 ufw 防火墙

在系统启用防火墙之前,应确保让其允许 ssh,要不然就无法通过 ssh 访问系统。

关于防火墙,Ubuntu 使用 ufw(Uncomplicated Firewall),CentOS 和 Red Hat 使用 firewalld。

在 CentOS 和 Red Hat 中,使用 firewall-cmd 命令:

sudo firewall-cmd--znotallow=public--add-service=ssh--permanent
 

在 Ubuntu 中,使用 uwf 命令:

sudo ufw allowssh
 

5,启用防火墙(在允许 ssh 之后)

迄今为止,防火墙仍是系统安全的一道屏障,在 CentOS 和 Red Hat 中,启用  firewalld systemd 服务:​

sudo systemctlstart firewalld
sudo systemctl enable firewalld
 

在 Ubuntu 中,使用如下命令:

sudo ufw enable
 

6,设置 ssh 不显示 banner 信息

攻击者可以通过运行服务的软件中的漏洞来危害服务器。banner 会显示正在运行的 OpenSSH 或操作系统版本的信息。所以我们需要设置 ssh 不显示 banner。

在 CentOS 和 Red Hat 中默认就是不显示 banner,所以关于这点不需要做额外的工作。但是在 Ubuntu 中,需要使用如下命令来禁用 banner:

sudoecho "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
 

7,禁用所有 ssh 转发

经常会有系统管理员通过 ssh 转发来加密可能传递的明文信息,如果你不用的话,应该将其关闭。攻击者可能会使用转发来加密信息,所以你很难查看,或者使用授权的端口和服务获取可能被阻止传递的信息。

在 CentOS 或 Red Hat 中,将如下内容添加到 /etc/ssh/sshd_config 中:

DisableForwardingyes
 

在 Ubuntu 中,添加 DisableForwarding yes 到 10-my-sshd-settings.conf 文件中,如下:

sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
 

8,禁止 root 用户登录 ssh

几乎每个 Linux 系统中都有 root 用户,允许其登录 ssh 是比较危险的。

在 CentOS 或 Red Hat 中,在文件 /etc/ssh/sshd_config 中找到 PermitRootLogin yes,将其改为:

PermitRootLogin no
 

Ubuntu 中,在10-my-sshd-settings.conf 文件中添加 PermitRootLogin no:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
 

9,禁用基于密码的 ssh 身份验证

在禁用 ssh 密码验证之前,首先需要按照第 3 点中所属配置和测试了基于密钥的身份验证。

我们在先前的文章中介绍过如何禁用基于密码的 ssh 身份验证,可参考:​​如何禁止使用密码通过 ssh 连接远程服务器​

CentOS 或 Red Hat 中,在文件 /etc/ssh/sshd_config 中找到 PasswordAuthentication yes,将其改为:

PasswordAuthentication no
 

在 Ubuntu 中,在文件 10-my-sshd-settings.conf 中添加内容 PasswordAuthentication no:

sudoecho "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
 

10,忽略 rhosts

rhosts 与 rsh 相关联,rsh 是一种被 secure shell 取代的遗留协议。如果用户试图创建恶意 rhosts 文件,此设置将忽略它。

CentOS 或 Red Hat 系统中,在文件 /etc/ssh/sshd_config 中找到 #IgnoreRhosts yes 将前面的#删掉(即注释打开):

IgnoreRhostsyes
 

Ubuntu 中,在文件 10-my-sshd-settings.conf 中添加 IgnoreRhosts yes:

sudoecho "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
 

11,安装配置 fail2ban 来加强 ssh 安全性

Fail2ban会监视已配置服务(如SSH)的日志文件,并阻止恶意用户的IP地址在设定的时间内多次尝试后连接到您的服务器。

例如,如果攻击者在三小时内进行了5次以上的失败尝试,他的IP地址将被封锁12小时。

Fail2ban 也可以配置为保护其他服务,例如由 nginx web 服务器或 Apache web 服务器支持的网站。

12,配置自动安全更新(适用于Red Hat和CentOS)

如前所述,如果漏洞比较多,带有漏洞的过时服务可能会让攻击者进入你的服务器,甚至无需登录!快速应用安全更新以降低此风险至关重要。

Ubuntu 会默认启用自动安全更新,所以无需执行更新操作。

要在 CentOS 和 Red Hat 上配置自动更新,需要安装一个名为 dnf-automatic  的应用程序,并使用以下命令为其启用计时器:​

sudo dnf upgrade
sudo dnf install dnf-automatic-y
sudo systemctl enable--now dnf-automatic.timer
 

然后通过如下命令来检查一下:

sudo systemctl status dnf-automatic.timer