Linux 0

    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
    

    参考链接:Linux VPS 服务器基础安全设置