⚠️此文转载自 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,需要先安装。
- Debian
apt install sudo -y
- Centos
yum install sudo -y
以添加 ec2-user 这个用户到 sudo 用户组为例子,输入下面命令:
usermod -aG sudo ec2-user
如果报错提示不存在 sudo 用户组可以尝试下面命令:
usermod -aG wheel ec2-user
或者是直接编辑 /etc/sudoers
配置 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 账户
如果不能,请检查公钥是否有误,公钥私钥是否为同一对
禁用不安全的登录方式
请注意,如果是使用 ssh 在进行配置,请勿进行以下更改并通过 VNC 进行下列更改,以免出现无法登陆 ssh 的情况!
前面的一系列操作都是铺垫,是为禁止 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