⚠️此文转载自 Linux VPS 服务器基础安全设置 ,经过一些修改

前言

在学习安全这方面的知识以前,我开一个 VPS 都是直接使用 root 账户+密码+默认22端口的形式登录 ssh ,
虽然以前用滴滴云的时候滴滴云强制要求用户使用普通账户登录 ssh 再通过命令使用 root 权限,
但是当时只是感到麻烦更多罢了。

其实使用一个普通账户登录 ssh 再用命令使用 root 权限会比直接登录 root 账户稍微安全一些,
不过应该是比较基础的安全防御了。

不过我认为仅仅这么做已经不足以达到基础的安全标准了,
还需要一些其他的措施,减少被入侵的风险。

这篇文章将讲解在 Linux 下如何添加普通用户、授予用户 sudo 权限、配置密钥登录、禁止 root 登录等一些列提升安全性的操作,
相信这对于刚接触 VPS 的萌新应该会很有用。

添加普通用户

为了安全,平时我们应该以普通用户的身份操作 VPS,所以需要添加一个普通用户。
添加用户有两个命令,adduser 和 useradd,在不同系统中的定义以及用法上有区别,这里提供一个通用添加方法:

经过测试,Ubuntu / Debian / RHEL / RHEL衍生 均可用
以添加用户名为 ec2-user 的普通用户为例子,输入命令

useradd -m -s /bin/bash ec2-user

然后对该用户设置密码,输入命令后会提示输入两次密码

passwd ec2-user

授予普通用户 sudo 权限

有时需要使用 root 权限,比如安装软件、启动服务等操作时就需要用到 sudo 命令来提升权限才能进行操作。授予用户 sudo 权限最简单的方法是把用户添加到 sudo 用户组。

如果系统中没有 sudo,需要先安装。

apt install sudo -y
yum install sudo -y

以添加 ec2-user 这个用户到 sudo 用户组为例子,输入下面命令:

usermod -aG sudo ec2-user

如果报错提示不存在 sudo 用户组可以尝试下面命令:

usermod -aG wheel ec2-user

配置 SSH 密钥登录

密码的缺点是很容易被暴力破解,而且密码需要记忆,使用起来不是特别安全便捷。
密钥的好处是,你只需要一对密钥文件:公钥和私钥,公钥相当于门锁,装在 VPS 上,私钥相当于钥匙,放在本地计算机上,登录的过程就像是用钥匙去开锁,有钥匙的人才能打得开,不仅安全且方便。

需要注意的是配置前一定要切换到之前新建的普通用户,以切换到 ec2-user 这个用户为例子,输入以下命令:

su -l ec2-user

然后在本地计算机上生成一对密钥,这里以 Windows 为例,需要先安装 OpenSSL 组件

ssh-keygen -t ed25519 -C "[这里填备注的信息,如邮箱]"

依据命令提示输入密钥的生成路径、以及密钥的保密口令( Passphrase )
如果设置了保密口令则必须牢记口令,否则无法找回或更改口令

在生成路径找到公钥,即 xxx.pub ,这是一个纯文本文件
再创建存放公钥的文件

mkdir -p ~/.ssh && nano ~/.ssh/authorized_keys

如果报错已经存在 .ssh 文件夹则可不理会跳过这步
然后将公钥一字不落地复制到打开的文件中
Ctrl + X ,输入 Y 保存文件修改
为了能够正常登录不出现奇怪的错误,执行下面的命令,授予文件相应的权限

chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

然后尝试能不能够正常使用 ssh 私钥登录到 ec2-user 账户
如果不能,请检查公钥是否有误,公钥私钥是否为同一对

禁用不安全的登录方式

前面的一系列操作都是铺垫,是为禁止 root 账户登录和密码登录以及修改 SSH 端口做准备,这才是提升 VPS 安全性的主要目的。

打开 sshd 配置文件 (/etc/ssh/sshd_config) 进行修改。

sudo nano /etc/ssh/sshd_config

禁止密码登录

找到 PasswordAuthentication,一般情况看到的应该是这样的:

#PasswordAuthentication yes

去掉前面的#,把 yes 改为 no,像下面这样:

PasswordAuthentication no

禁止 root 登录

找到 PermitRootLogin,对默认使用 root 登录的 VPS ,看到的应该是这样的:

PermitRootLogin yes

要完全禁止 root 登录,把 yes 改为 no,像下面这样:

PermitRootLogin no

修改 SSH 端口

找到 Port,默认情况下这个选项是被注释,像下面这样:

#Port 22

去掉前面的#,把后面的 22 换成其它端口,比如 2333,像下面这样:

Port 2333

重启 sshd 服务

为了使以上修改生效,需要重启 sshd 服务

sudo service sshd restart

清除 root 用户密码

当清除 root 用户密码后,就无法使用 su 命令切换到 root 用户。只有被授予 sudo 权限的用户执行 sudo -i 命令并输入当前用户的密码才能切换到 root 用户,进一步提升了安全性。

!!!请注意!!!这种操作虽然在 ssh 上可以提升安全性,但是通过 VNC 或其他不通过 ssh 的方式访问 VPS 时,登录root用户无需密码!!!

sudo passwd -d root