安全

Debian、Ubuntu 类 Linux 服务器的初始安全配置

新建一台 Debian 或 Ubuntu 服务器后的基础配置步骤:通过 SSH 登录、创建日常使用的普通用户、将其加入 sudo 组、用 UFW 建立基本防火墙,并为该用户开通外部 SSH 访问(密码或密钥两种情形)。

· 3 分钟阅读 · 难度 初级 · 基于 Ubuntu 20.04

当您新建一台 Debian 或 Ubuntu 类型的服务器时,作为基础配置的一部分,需要完成若干重要的配置步骤。这些步骤会提升服务器的安全性和易用性,并为后续的各项操作打下坚实的基础。

Illustration 1 — Configuration de sécurité initiale d'un serveur Linux type Debian, Ubuntu

第 1 步 — 通过 ssh 登录

要连接到您的服务器,您需要知道服务器的公网 IP 地址。您还需要密码,或者——如果您已配置 SSH 密钥用于认证——root 用户账户的私钥。如果您尚未连接到服务器,可以参考我们的指南 如何通过 SSH 连接,其中对这一过程有详细说明。

确认 SSH 服务正常运行

systemctl status ssh
Illustration 2 — Configuration de sécurité initiale d'un serveur Linux type Debian, Ubuntu

查看您服务器的 IP 地址

ip address
Illustration 3 — Configuration de sécurité initiale d'un serveur Linux type Debian, Ubuntu

如果您尚未通过 SSH 连接到服务器,请使用以下命令进行连接(把命令中高亮的部分替换为您服务器的公网 IP 地址):

如果出现关于主机真实性的警告,请予以接受。如果您使用密码认证,请提供 root 密码进行登录。如果您使用的是受口令保护的 SSH 密钥,那么在每个会话中首次使用该密钥时,可能会提示您输入口令。如果这是您第一次用密码登录该服务器,还可能会提示您修改 root 密码。

万一密码无法使用在服务器上切换为 root 用户Ubuntu:sudo su
Debian:su -
2. 修改您用户的密码passwd mon_username

关于 Root

root 用户是 Linux 环境中的管理用户,拥有非常广泛的权限。正因为 root 账户权限过高,不建议日常使用它。原因在于,root 账户与生俱来的能力之一,就是可以做出破坏性极强的更改,哪怕只是出于无意。

下一步是建立一个权限较低的新用户账户,供日常使用。稍后我们会介绍如何仅在需要时才获取更高的权限。

第 2 步 — 创建一个用户

以 root 身份登录之后,我们就可以添加新的用户账户了。今后我们将使用这个新账户登录,而不再使用 root。

本例创建一个名为 sammy 的新用户,但您应当把它替换为适合您自己的用户名:

系统会向您提出几个问题,首先是该账户的密码。

请输入一个强密码,并可根据需要填写补充信息。这些信息并非必填,对于您想跳过的任何字段,直接按 ENTER 即可。

第 3 步 — 分配权限

现在,我们有了一个具有普通账户权限的新用户账户。然而,我们有时仍需要执行管理任务。

为了避免每次都要退出普通用户、再以 root 账户重新登录,我们可以为普通账户配置所谓的超级用户权限,也就是 root 权限。这样一来,只要在每条命令前加上 sudo,普通用户就能以管理权限执行命令。

要为新用户添加这些权限,需要把该用户加入 sudo 组。在 Ubuntu 上,默认情况下属于 sudo 组的用户都可以使用 sudo 命令。

安装 sudo 软件包(如有需要)如果像某些基于 Debian 的系统那样尚未安装 sudo,您可以这样安装:apt install sudo

请以 root 身份执行这条命令,把您的新用户加入 sudo 组(把高亮的用户名替换为您新用户的用户名):

此后,当您以普通用户身份登录时,就可以在命令前输入 sudo,以超级用户权限执行操作。

第 4 步 — 部署防火墙

Ubuntu 20.04 服务器可以使用 UFW 防火墙,以确保只有对特定服务的连接才被允许。借助这个工具,我们可以非常轻松地建立一套基本的防火墙。

注意:如果您的服务器运行在某个云平台或其他系统上,您也可以使用其内置的防火墙,而不用 UFW 防火墙。我们建议一次只使用一种防火墙,以免出现相互冲突、难以排查的规则。

安装 ufw 防火墙:

需要通过网络通信的应用程序,可以在安装时把自己的配置文件注册到 UFW 中。这些配置文件使 UFW 能够按名称管理这些应用。OpenSSH,也就是让我们此刻得以连接服务器的那个服务,已经在 UFW 中注册了一份配置文件。

您可以输入以下命令查看:

我们必须确保防火墙允许 SSH 连接,这样下次才能重新连接进来。可以输入以下命令来放行这些连接:

您可以输入以下命令,确认 SSH 连接依然被允许:

由于防火墙目前会阻断除 SSH 连接之外的所有连接,如果您还要安装并配置其他服务,就需要调整防火墙设置以放行相应流量。您可以在我们的 UFW 基础 指南中了解一些常见的 UFW 操作。

随后,我们可以输入以下命令启用防火墙:

输入 y 并按 ENTER 继续。防火墙启用之后,今后若要让服务器通过某个新协议被访问,您需要用 ufw allow 加上端口号或规则名称来新增一条规则。

第 5 步 — 为您的普通用户开通外部访问

现在我们已经有了一个供日常使用的普通用户,接下来需要确认可以直接通过 SSH 登录到该账户。

注意:在您确认新用户能够登录并使用 sudo 之前,我们建议您保持 root 的登录状态。这样,一旦遇到问题,您还可以以 root 身份排查并作出必要的修改。

为新用户配置 SSH 访问的过程,取决于您服务器上的 root 账户使用的是密码认证还是 SSH 密钥认证。

如果 root 账户使用密码认证

如果您登录 root 账户时用的是密码,那么 SSH 的密码认证就处于启用状态。您可以打开一个新的终端会话,用新的用户名通过 SSH 访问您的新用户账户:

输入您的普通用户密码之后,您就完成了登录。请记住,如果需要以管理权限执行某条命令,请像这样在前面加上 sudo:

在每个会话中第一次使用 sudo 时(以及此后每隔一段时间),系统都会要求您输入普通用户的密码。

为了加强服务器的安全性,我们强烈建议您配置 SSH 密钥,而不要使用密码认证。

请参考我们的指南 在 Ubuntu 20.04 上配置 SSH 密钥,了解如何配置密钥认证。

如果 root 账户使用 SSH 密钥认证

如果您登录 root 账户时用的是 SSH 密钥,那么 SSH 的密码认证就处于禁用状态。您需要把本地公钥的一份副本添加到新用户的 ~/.ssh/authorized_keys 文件中,才能成功登录。

由于您的公钥已经存在于服务器上 root 账户的 ~/.ssh/authorized_keys 文件中,我们可以在当前会话中把该文件及其目录结构复制到新的用户账户下。

使用 rsync 命令是以正确的属主和权限复制文件的最简单方式。它可以复制 root 用户的 .ssh 目录、保留权限并修改文件属主,全部只需一条命令。请注意把下面命令中高亮的部分改为与您的用户名相符。

注意:rsync 命令对于以斜杠结尾和不以斜杠结尾的源和目标,处理方式并不相同。使用下面的 rsync 时,请确保源目录(~/.ssh)不带结尾的斜杠(请核对您没有写成 ~/.ssh/)。 如果您不慎在命令末尾加上了斜杠,rsync 复制到 sudo 用户家目录中的将是目录内容,也就是 root 账户 ~/.ssh 目录下的各个文件,而不是整个 ~/.ssh 目录结构。这样文件就会位于错误的位置,SSH 将无法找到并使用它们。

  1. rsync --archive --chown=neo:neo ~/.ssh /home/neo

现在,在您的本地计算机上打开一个新的终端会话,用新的用户名通过 SSH 登录:

  1. ssh neo@your_server_ip

您应当无需输入密码即可登录新的用户账户。请记住,如果需要以管理权限执行某条命令,请像这样在前面加上 sudo:

  1. sudo command_to_run

在每个会话中第一次使用 sudo 时(以及此后每隔一段时间),系统都会要求您输入普通用户的密码。

接下来做什么?

至此,您已经为服务器打下了坚实的基础。现在,您可以在服务器上安装所需的各类软件了。 -> 对使用 SSH 协议的访问进行安全加固

致谢

本指南由 Awoui 依据 Brian Boucheron/DigitalOcean 的作品改编,采用知识共享 署名-非商业性使用-相同方式共享 4.0 国际许可协议