CentOS是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7。当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后,首要的工作肯定是加强它的安全性,以下列出的七件事,是你进一步配置系统和安装其他软件前必须做的。 1. 更改 root 密码若果你是自行安装 CentOS 7 的话,安装程序会让你自行设定 root 的密码。不过很多 VPS 服务商只会提供预先安装好的 CentOS 7 映像档,这种情况下他们会透过主控界面告诉你 root 的密码,这个密码的安全性谁也不知道,它是如何产生的呢?随机性可靠吗?复杂性足够吗?服务商的服务器是否记录了密码的副本?我们实在有必要第一时间重设这个密码。
首先使用
由于你从来没有使用过 ssh 联系到这台服务器,你的电脑会把服务器的加密公钥下载,然后询问你是否信任它,这台新鲜安装好的 CentOS 7 应该还未引起黑客的兴趣,也不大可能在这么短的时间内被攻陷,所以可以放心接受这个加密公钥。跟着输入 root 的密码登入服务器:
登入后立即更改 root 的密码,你需要输入新密码两次:
好的密码应该同时包含数字、小写英文字母、大写英文字母、和标点符号,最少 15 个字符,这样的密码强度大概有 90 bit,勉强可以应付密码被“暴力破解”,当然我假设了你的密码是真正随机产生,有些人喜欢把个人资料例如名字、出生日期、车牌号码、地址、配偶和子女的名字等等崁入密码中,或者使用字典里的字词拼凑密码,这样密码的强度将会大幅下降,甚至不堪一击,这些问题我曾经在《如何管理密码?》讨论过。 网上有很多随机密码产生器,例如 RANDOM.ORG,大都可用,但记紧必须使用 HTTPS 造访这些网站。如果你有使用“密码夹万”一类的软件,不妨使用它们内建的密码产生器。 完成后不要登出系统,使用另一个视窗用新密码尝试登入,即使失败也可以在原来的视窗重复以上步骤。 2. 新增一个普通帐号这一步连同下一步,相当于为一个城市筑起两道城墙,既可加强防卫,也建立了一道警报机制,当敌人(黑客)卒然来袭,第一道城墙被袭击和破坏,我们还有第二道城墙阻延一下,有时间部署防卫甚至反击。所以这是一个很多人忽略,但其实非常重要的步骤。 首先我们新增一个帐号:
这个新帐号 ahhang 没有默认密码,即是说登入 ahhang 时系统不用输入密码!所以我们立即要设定密码:
有些人认为不应该把建立帐号和设定密码两件事分开来做,一来可能会不慎遗忘,二来也给黑客一道时间缝隙登入这个新帐号,所以他们会在 3. 禁止 root 使用 ssh 登入
CentOS 7 默认容许任何帐号透过
修改为:
最后输入以下指令重新启动
这样黑客要取得 root 的权限,必须破解 root 和一个普通用户的密码,难度增加了。 完成后不要登出系统,使用另一个视窗尝试登入 root 和普通帐号,测试无误便可进行下一步。 4. 使用非常规的 ssh 端口
使用 vim (或任何文本编辑器) 开启
修改为:
你可以把 10837 改为任何 1024 – 65535 之间的任何数字,若果怕与某些系统服务发生冲突,可以参考一下这里。
跟着重新启动
然后是设定防火墙,CentOS 7 的内核已经有防火墙
跟着启动:
设定 设定防火墙方法一:
复制
使用
修改为:
储存后重新加载
设定防火墙方法二:输入以下指令:
就是这样简单! 不论使用哪种方法,完成后不要登出系统,使用另一个视窗尝试登入,例如:
5. 启用公钥验证登入
|
1
|
AuthenticationMethods publickey,password
|
它告诉服务器用户必须拥有合法的公钥,和输入正确的密码才能成功登入。修改完成后重新启动 sshd
:
1
|
systemctl restart sshd.service
|
完成后不要登出系统,使用另一个视窗尝试登入,测试无误便可进行下一步。
6. 更新、更新、每天更新、每天自动更新
每一天都有成千上万的黑客在世界各地寻找 Linux 系统和常见软件的安全漏洞,一有发现便会发动规模庞大而迅速的网络攻击,务求在我们来得及反应前把系统攻陷。不要以为黑客都只是十来岁的年轻小毛头,大部分黑客背后都有势力庞大、资源几乎无限的国家机构支持,有些甚至属于这些机构的雇员,美国的 NSA,英国的 GQHC,中国的无名黑客队伍,都是比较明目张胆由国家支持的网络黑帮,可见我们的系统时时刻刻都被凶狠之徒盯着,保持软件在最新的状态是其中一项我们必须做,也很容易做到的工作。
首先我们立即手动更新所有预先安装的软件:
1
|
yum -y update
|
跟着设定系统定时自动更新,第一步确定服务器是否安装了自动执行指令的工具,跟着使用 yum
一个名叫 yum-cron
插件。
CentOS 7 使用数个软件来自动执行指令:cron
、anacron
、at
和 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 = yes
, download_updates = yes
, apply_updates = yes
,正如下图:
最后,启动 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 两个服务的通讯端口,倘若日后安装了其他网络软件,例如网站服务器、域名服务器等等,必须要检查安装程式有否开启他们的通讯端口,没有的话便要手动开启。如果好像前面第四点那样使用了非常规的通讯端口,也可能要手动配置防火墙,防火墙详细的配置方法超出了本文的讨论范围,将来有机会再谈。