CentOS 7加强安全性:

CentOS 7加强安全性:

1. 更改 root 密码

****************************************************************************************************

2. 新增一个普通帐号

adduser

passwd

****************************************************************************************************

3. 禁止root使用ssh登入,改变ssh端口

(临时关闭selinux,系统默认不可以修改port)

getenforce && setenforce 0 && getenforce

以此方式关闭的selinux,在系统重启后,selinux会重新开启,阻止root & 新用户ssh login.

需要再次关闭的selinux,新用户才可以用 新port login。

(修改端口號,禁止root用ssh)

vi /etc/ssh/sshd_config

#PermitRootLogin yes 修改为 PermitRootLogin no

#Port 22 修改为 Port 10837(改为任何 1024 – 65535 之间的任何数字)

保存退出

(重啟sshd服務)

systemctl restart sshd.service

(开放firewall port10837)

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

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

vi /etc/firewalld/services/ssh.xml

<port protocol="tcp" port="22"/> 修改为 <port protocol="tcp" port="10837"/>

保存退出

(重新装载firewall)

firewall-cmd --reload

****************************************************************************************************

永久关闭selinux:

# vim /etc/sysconfig/selinux

SELINUX=enforcing 改为 SELINUX=disabled

修改防火墙port命令 :firewall-cmd --zone=public --add-port=10837/tcp --permanent

****************************************************************************************************

5. 启用公钥验证登入 ssh

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

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

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

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

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

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

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

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

1

AuthenticationMethods publickey,password

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

1

systemctl restart sshd.service

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

****************************************************************************************************

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

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

首先我们立即手动更新所有预先安装的软件:

yum -y update

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

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

yum -y install cronie

下一步就是安装 yum-cron:

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,寻找:

apply_updates = no

修改为:

apply_updates = yes

确认一下 update_messages = yes, download_updates = yes, apply_updates = yes,正如下图:

最后,启动 crond 和 yum-cron:

systemctl start crond

systemctl start yum-cron

****************************************************************************************************

7. 防火墙

防火墙的作用好比网络警察,它监察所有进出系统的 IP 封包,哪些端口容许封包进入,哪些端口容许封包外出等等,都由防火墙控制,保护使用这些端口的应用程式,所以设定防火墙是极重要的工作。

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

yum install firewalld

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

firewall-cmd --list-all

上图可见防火墙只开启了 DHCP 客户端和 ssh 两个服务的通讯端口,倘若日后安装了其他网络软件,例如网站服务器、域名服务器等等,必须要检查安装程式有否开启他们的通讯端口,没有的话便要手动开启。如果好像前面第四点那样使用了非常规的通讯端口,也可能要手动配置防火墙,