安装 CentOS 7 后必作的七件事

from: http://www.hksilicon.com/articles/594621?lang=cn vim



CentOS 是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7。当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后,首要的工做确定是增强它的安全性,如下列出的七件事,是你进一步配置系统和安装其余软件前必须作的。centos


1. 更改 root 密码

若果你是自行安装 CentOS 7 的话,安装程序会让你自行设定 root 的密码。不过不少 VPS 服务商只会提供预先安装好的 CentOS 7 映像档,这种状况下他们会透过主控界面告诉你 root 的密码,这个密码的安全性谁也不知道,它是如何产生的呢?随机性可靠吗?复杂性足够吗?服务商的服务器是否记录了密码的副本?咱们实在有必要第一时间重设这个密码。安全

首先使用 ssh 登入服务器,在 Windows 可使用 PuttyTera Term、或者在 Cygwin 环境下执行 OpenSSH。在 Mac 和 Linux 上只需在终端机 (terminal) 中执行如下指令即可以了,比 Windows 简单得多:服务器

首次 ssh 到服务器

因为你历来没有使用过 ssh 联系到这台服务器,你的电脑会把服务器的加密公钥下载,而后询问你是否信任它,这台新鲜安装好的 CentOS 7 应该还未引发***的兴趣,也不大可能在这么短的时间内被攻陷,因此能够放心接受这个加密公钥。跟着输入 root 的密码登入服务器:网络

输入 root 密码两次

登入后当即更改 root 的密码,你须要输入新密码两次:app

更改 root 密码

好的密码应该同时包含数字、小写英文字母、大写英文字母、和标点符号,最少 15 个字符,这样的密码强度大概有 90 bit,勉强能够应付密码被“暴力破解”,固然我假设了你的密码是真正随机产生,有些人喜欢把我的资料例如名字、出生日期、车牌号码、地址、配偶和子女的名字等等崁入密码中,或者使用字典里的字词拼凑密码,这样密码的强度将会大幅降低,甚至不堪一击,这些问题我曾经在《如何管理密码?》讨论过。dom

网上有不少随机密码产生器,例如 RANDOM.ORG,大均可用,但记紧必须使用 HTTPS 造访这些网站。若是你有使用“密码夹万”一类的软件,不妨使用它们内建的密码产生器。ssh

完成后不要登出系统,使用另外一个视窗用新密码尝试登入,即便失败也能够在原来的视窗重复以上步骤。tcp

2. 新增一个普通账号

这一步连同下一步,至关于为一个城市筑起两道城墙,既可增强防卫,也创建了一道警报机制,当敌人(***)卒然来袭,第一道城墙被袭击和破坏,咱们还有第二道城墙阻延一下,有时间部署防卫甚至反击。因此这是一个不少人忽略,但其实很是重要的步骤。编辑器

首先咱们新增一个账号:

新增一个账号

这个新账号 ahhang 没有默认密码,便是说登入 ahhang 时系统不用输入密码!因此咱们当即要设定密码:

设定 ahhang 的密码

有些人认为不该该把创建账号和设定密码两件事分开来作,一来可能会不慎遗忘,二来也给***一道时间缝隙登入这个新账号,因此他们会在 adduser 指令中一并提供加密后的默认密码,方法是加入 -p 参数,不过这样作也有风险,由于***能够透过列出系统的进程,得知加密了的新密码,而后把密码破解。

3. 禁止 root 使用 ssh 登入

CentOS 7 默认允许任何账号透过 ssh 登入,包括 root 和通常账号,为了避免让 root 账号被***暴力***,咱们必须禁止 root 账号的 ssh 功能,事实上 root 也没有必要 ssh 登入服务器,由于只要使用 su 或 sudo (固然须要输入 root 的密码) 普通账号即可以拥有 root 的权限。使用 vim (或任何文本编辑器) 开启 /etc/ssh/sshd_config,寻找:

1

PermitRootLogin yes


修改成:


1

PermitRootLogin no


最后输入如下指令从新启动 sshd


1

systemctl restart sshd.service


这样***要取得 root 的权限,必须破解 root 和一个普通用户的密码,难度增长了。

完成后不要登出系统,使用另外一个视窗尝试登入 root 和普通账号,测试无误即可进行下一步。

4. 使用很是规的 ssh 端口

Ssh 默认使用端口 22,这是在 IANA 注册的官方端口,但没有人说 ssh 不能使用其余端口,不少***专门向服务器的 22 端口发动***,即便你的服务器固若金汤、牢不可破,可是要系统日以继夜接受***,消耗的系统资源(网络、处理器、内存等等)也不会少,况且它是否真的牢不可破还说不定呢!因此有必要让 ssh 使用其余端口,只让有权使用 ssh 的用户知道。

使用 vim  (或任何文本编辑器) 开启 /etc/ssh/sshd_config,寻找:

1

Port 22

修改成:

1

Port 10837

你能够把 10837 改成任何 1024 – 65535 之间的任何数字,若果怕与某些系统服务发生冲突,能够参考一下这里

跟着从新启动 sshd

1

systemctl restart sshd.service

而后是设定防火墙,CentOS 7 的内核已经有防火墙 netfilter,但你的系统未必安装了用户界面,较前版本的 CentOS 默认使用 iptables,但 CentOS 7 开始使用效能更高、稳定性更好的 firewalld,若果服务器还没有安装 firewalld,可使用如下指令安装,不肯定是否已经安装的话也能够输入这个指令,它会告诉你已经安装而后退出。

1

yum install firewalld

跟着启动:

1

systemctl start firewalld

设定 firewalld 的方法有两个,第一个是修改 firewalld 有关 sshd 的设定,把端口 22 改成 10837,这是正统的作法,但步骤比较多;第二个是要求 firewalld 开启端口 10837,不指定它属于哪个服务,这个作法一般处理临时的端口开启/封锁,步骤简单,可是往后你要是忘记了这个端口为何开启了呢?何时开启的呢?为了哪一项服务开启呢?可能有点麻烦。我两种方法都会介绍一下,但做为专业的系统管理员(即便不是真正的专业,也应该具有这样的心态),我推荐使用第一种方法。

设定防火墙方法一:

复制 firewalld 有关 sshd 的设定档案:

1

cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

使用 vim  (或任何文本编辑器) 开启 /etc/firewalld/services/ssh.xml,寻找:

1

  <port protocol="tcp" port="22"/>

修改成:

1

  <port protocol="tcp" port="10837"/>

储存后从新加载 firewalld

1

firewall-cmd --reload


设定防火墙方法二:

输入如下指令:

1

firewall-cmd --zone=public --add-port=10837/tcp --permanent

就是这样简单!

不论使用哪一种方法,完成后不要登出系统,使用另外一个视窗尝试登入,例如:

1

ssh -p 10837 ahhang@192.168.1.188


5. 启用公钥验证登入 ssh

如今只有普通账号才能透过 ssh 登入服务器,可是 ssh 提供一个更先进更安全的验证方法:公钥验证法。

首先每一名用户创建一对加密钥匙(密钥和公钥),密钥储存在平常使用的电脑,公钥则储存在服务器,使用 ssh 联系到服务器的时候,电脑会把一些创建连线请求的资料,其中包括账号名称和公钥,而且把部分资料用密钥制做数码签署,一古脑儿送到服务器,服务器检查本身的“公钥库”是否包含送来的公钥,有的话再验证数码签署,成功的话便直接登入服务器,无需输入账号密码。

第一步在平常使用的电脑上使用 ssh-keygen 指令创建一对加密钥匙,它会询问储存加密钥匙的档案名称,和把钥匙加密的密码,档案名称使用默认的路径和名称即可以,密码则无需输入:

创建账号的 RSA 加密钥匙

这个指令会创造两个档案,一个名为 id_rsa,是你的 RSA 密钥,另外一个是 id_rsa.pub,是你的 RSA 公钥。公钥必需上传到服务器而且附加于用户账号里面的 .ssh/authorized_keys 档案中,这个档案储存全部可透过 ssh 登入到这一个账号的公钥,一行一条公钥:

上传 RSA 公钥到服务器

顺便一提,这个档案的存取权限必须是 0700,不然 sshd 不会读取:

存放公钥的档案的权限必须是 0700

使用公钥验证法登入 ssh 又省力又安全,由于咱们不用输入密码,天然也没有密码被盗取的忧虑,简简单单地输入连线指令即可以了。

可是存放在平常电脑中的密钥却带来新的安全隐患,万一密钥被盗取了,其余人岂不是能够随便登入服务器?如今是“双重验证”(two-factor authentication) 隆重登场的时候,双重验证的理念是咱们必须向服务器证实两种不一样性质的东西,才能成功验证身分,第同样是咱们知道什么,第二样是咱们拥有什么。首先服务器会要求咱们输入密码,咱们知道密码,过了第一关。跟着服务器要求咱们证实拥有公钥验证法中的密钥,透过上面的设定程序咱们也经过了验证,过了第二关。如今服务器才会让咱们进入系统。

设定 ssh 的双重验证法很简单,使用 vim  (或任何文本编辑器) 开启 /etc/ssh/sshd_config,在档案的末端假如这一行:

1

AuthenticationMethods publickey,password

它告诉服务器用户必须拥有合法的公钥,和输入正确的密码才能成功登入。修改完成后从新启动 sshd

1

systemctl restart sshd.service

完成后不要登出系统,使用另外一个视窗尝试登入,测试无误即可进行下一步。

6. 更新、更新、天天更新、天天自动更新

每一天都有成千上万的***在世界各地寻找 Linux 系统和常见软件的安全漏洞,一有发现便会发动规模庞大而迅速的网络***,务求在咱们来得及反应前把系统攻陷。不要觉得***都只是十来岁的年轻小毛头,大部分***背后都有势力庞大、资源几乎无限的国家机构支持,有些甚至属于这些机构的雇员,美国的 NSA,英国的 GQHC,中国的无名***队伍,都是比较明目张胆由国家支持的网络黑帮,可见咱们的系统时时刻刻都被凶狠之徒盯着,保持软件在最新的状态是其中一项咱们必须作,也很容易作到的工做。

首先咱们当即手动更新全部预先安装的软件:

1

yum -y update

跟着设定系统定时自动更新,第一步肯定服务器是否安装了自动执行指令的工具,跟着使用 yum 一个名叫 yum-cron 插件。

CentOS 7 使用数个软件来自动执行指令:cronanacronat 和 batch,其中 cron 和 anacron 用来按期重复执行指令,At 和 batch 则用来在特定时间执行一次性的指令。咱们将会使用 cron 和 anacron,二者的分别这里不细表了,未来有机会再讨论,如今使用如下指令安装 cron 和 anacron

1

yum -y install cronie

下一步就是安装 yum-cron

1

yum -y install yum-cron

其实你可使用一个指令同时安装 cronie 和 yum-cron,甚至单独安装 yum-cron 也能够,由于 yum 会自动检测到 yum-cron 须要 cronie 而后自动替你安装,上面分开两个指令纯粹令你们容易明白。

完成后系统多了数个档案,比较重要的包括:

  • /etc/cron.daily/0yum.cron
    Anacron 天天执行这个档案一次,它根据配置档案 /etc/yum/yum-cron.conf 来更新软件

  • /etc/yum/yum-cron.conf
    这是天天执行 yum-cron 的配置档案,默认只会下载更新的软件,并不安装,用意是让管理员检视 yum-cron 的输出,选取须要更新的软件进行手动安装。

跟着咱们修改配置档案,让 yum-cron 自动更新软件,使用 vim  (或任何文本编辑器) 开启 /etc/yum/yum-cron.conf,寻找:

1

apply_updates = no

修改成:

1

apply_updates = yes

确认一下 update_messages = yesdownload_updates = yesapply_updates = yes,正以下图:

yum-cron 配置档案

最后,启动 crond 和 yum-cron

1

2

systemctl start crond

systemctl start yum-cron


7. 防火墙

防火墙的做用比如网络警察,它监察全部进出系统的 IP 封包,哪些端口允许封包进入,哪些端口允许封包外出等等,都由防火墙控制,保护使用这些端口的应用程式,因此设定防火墙是极重要的工做。

过滤封包功能的 netfilter 已经内建在 CentOS 7 的内核,可是配置 netfilter 的界面程式 firewalld 却未必有安装,不管是否已经安装,均可以执行下面的安装指令:

1

yum install firewalld

跟着查看一下防火墙如今开启了哪些服务和端口:

1

firewall-cmd --list-all

检查防火墙

上图可见防火墙只开启了 DHCP 客户端和 ssh 两个服务的通信端口,假若往后安装了其余网络软件,例如网站服务器、域名服务器等等,必需要检查安装程式有否开启他们的通信端口,没有的话便要手动开启。若是好像前面第四点那样使用了很是规的通信端口,也可能要手动配置防火墙,防火墙详细的配置方法超出了本文的讨论范围,未来有机会再谈。