CentOS是最多人用来运行服务器的 Linux 版本,最新版本是 CentOS 7。当你兴趣勃勃地在一台主机或 VPS 上安装 CentOS 7 后,首要的工作肯定是加强它的安全性,以下列出的七件事,是你进一步配置系统和安装其他软件前必须做的。
1. 更改 root 密码
若果你是自行安装 CentOS 7 的话,安装程序会让你自行设定 root 的密码。不过很多 VPS 服务商只会提供预先安装好的 CentOS 7 映像档,这种情况下他们会透过主控界面告诉你 root 的密码,这个密码的安全性谁也不知道,它是如何产生的呢?随机性可靠吗?复杂性足够吗?服务商的服务器是否记录了密码的副本?我们实在有必要第一时间重设这个密码。
首先使用ssh
登入服务器,在 Windows 可以使用Putty、Tera Term、或者在Cygwin环境下执行OpenSSH。在 Mac 和 Linux 上只需在终端机 (terminal) 中执行以下指令便可以了,比 Windows 简单得多:
由于你从来没有使用过 ssh 联系到这台服务器,你的电脑会把服务器的加密公钥下载,然后询问你是否信任它,这台新鲜安装好的 CentOS 7 应该还未引起黑客的兴趣,也不大可能在这么短的时间内被攻陷,所以可以放心接受这个加密公钥。跟着输入 root 的密码登入服务器:
登入后立即更改 root 的密码,你需要输入新密码两次:
好的密码应该同时包含数字、小写英文字母、大写英文字母、和标点符号,最少 15 个字符,这样的密码强度大概有 90 bit,勉强可以应付密码被“暴力破解”,当然我假设了你的密码是真正随机产生,有些人喜欢把个人资料例如名字、出生日期、车牌号码、地址、配偶和子女的名字等等崁入密码中,或者使用字典里的字词拼凑密码,这样密码的强度将会大幅下降,甚至不堪一击,这些问题我曾经在《如何管理密码?》讨论过。
网上有很多随机密码产生器,例如RANDOM.ORG,大都可用,但记紧必须使用 HTTPS 造访这些网站。如果你有使用“密码夹万”一类的软件,不妨使用它们内建的密码产生器。
完成后不要登出系统,使用另一个视窗用新密码尝试登入,即使失败也可以在原来的视窗重复以上步骤。
2. 新增一个普通帐号
这一步连同下一步,相当于为一个城市筑起两道城墙,既可加强防卫,也建立了一道警报机制,当敌人(黑客)卒然来袭,第一道城墙被袭击和破坏,我们还有第二道城墙阻延一下,有时间部署防卫甚至反击。所以这是一个很多人忽略,但其实非常重要的步骤。
首先我们新增一个帐号:
这个新帐号 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
|
1
|
systemctl
restart
sshd
.service
|
1
|
#
Port
22
|
1
|
Port
10837
|
1
|
systemctl
restart
sshd
.service
|
1
|
yum
install
firewalld
|
1
|
systemctl
start
firewalld
|
1
|
cp
/
usr
/
lib
/
firewalld
/
services
/
ssh
.xml
/
etc
/
firewalld
/
services
/
|
1
|
<
port
protocol
=
"tcp"
port
=
"22"
/
>
|
1
|
<
port
protocol
=
"tcp"
port
=
"10837"
/
>
|
1
|
firewall
-
cmd
--
reload
|
1
|
firewall
-
cmd
--
zone
=
public
--
add
-
port
=
10837
/
tcp
--
permanent
|
1
|
ssh
-
p
10837
ahhang
@
192.168.1.188
|
1
|
AuthenticationMethods
publickey
,
password
|
1
|
systemctl
restart
sshd
.service
|
1
|
yum
-
y
update
|
1
|
yum
-
y
install
cronie
|
1
|
yum
-
y
install
yum
-
cron
|
1
|
apply_updates
=
no
|
1
|
apply_updates
=
yes
|
1
2
|
systemctl
start
crond
systemctl
start
yum
-
cron
|
1
|
yum
install
firewalld
|