Ubuntu服务器快速上手:初始配置与安全设置教程

首次创建新的Ubuntu服务器时,您应该执行一些重要的配置步骤作为初始设置的一部分。这些步骤将提高您服务器的安全性和可用性,并为后续操作打下坚实的基础。

本教程已在 Ubuntu 22.04 LTS、24.04 LTS 和 24.10 上经过验证。所使用的命令基于默认软件包,这些软件包在当前临时版本以及即将发布的、采用 apt、OpenSSH 和 UFW 默认配置的 25.x 版本中保持稳定。

Ubuntu 初始服务器设置

  • 以 root 身份登录

  • 创建新用户

  • 授予管理权限

  • 设置防火墙

  • 为您的普通用户启用外部访问

步骤 1 - 以 root 身份登录

要登录到您的服务器,您需要知道服务器的公网 IP 地址。如果您为认证安装了 SSH 密钥,则还需要 root 用户账户的密码或私钥。如果您尚未登录过您的服务器,可以按照我们关于如何通过 SSH 连接 Droplets 的指南操作,DigitalOcean英文官网中的教程详细介绍了此过程。

如果您当前未连接到服务器,请使用以下命令以 root 用户身份登录。将命令中高亮的 your_server_ip 部分替换为您服务器的公网 IP 地址:

css 复制代码
ssh root@your_server_ip

如果出现关于主机真实性的警告,请接受它。如果您的服务器使用密码认证,请提供您的 root 密码以登录。如果您使用的 SSH 密钥受密码保护,则可能需要在每个会话中首次使用该密钥时输入密码。如果您是首次使用密码登录服务器,可能还需要更改 root 密码。如果收到提示,请按照说明更改密码。

关于 root

root 用户是 Linux 环境中具有提升权限的管理员用户。由于 root 账户具有较高的权限,不建议您经常使用它。即使是无意的,root 账户也可能进行极具破坏性的更改。

下一步是创建一个具有较低权限的新用户账户以供日常使用。稍后,我们将向您展示如何在需要时临时获取提升的权限。

步骤 2 - 创建新用户

以 root 身份登录后,您将能够添加新用户账户。将来,我们将使用这个新账户而不是 root 登录。

此示例创建了一个名为 sammy 的新用户,但您应将其替换为您喜欢的用户名:

复制代码
adduser sammy

您将被问到几个问题,首先是账户密码。

输入一个强密码,并可选地填写任何您希望提供的其他信息。这些信息不是必需的,您可以在任何想要跳过的字段中按 ENTER。

步骤 3 - 授予管理权限

现在您有了一个具有普通账户权限的新用户账户。但是,您有时需要以 root 用户身份执行管理任务。

为了避免注销普通用户再以 root 账户重新登录,您可以为您用户的普通账户设置所谓的超级用户或 root 权限。这些权限将使您的普通用户能够在命令前加上 sudo 来以管理权限运行命令。

要将这些权限添加到您的新用户,您需要将该用户添加到 sudo 系统组。在 Ubuntu 上,默认情况下,属于 sudo 组成员的用户被允许使用 sudo 命令。

以 root 身份,运行以下命令将您的新用户添加到 sudo 组(将高亮的 sammy 用户名替换为您的新用户):

复制代码
usermod -aG sudo sammy

现在,当以您的普通用户身份登录时,您可以在命令前输入 sudo 以超级用户权限运行它们。

步骤 4 - 设置防火墙

Ubuntu 服务器可以使用 UFW firewall 应用来确保只允许连接到特定服务。您可以使用此应用程序设置基本防火墙。

注意: 如果您的服务器运行在 DigitalOcean 云平台上,您可以选择使用 DigitalOcean Cloud Firewalls 而不是 UFW firewall。我们建议一次只使用一个防火墙,以避免可能难以调试的规则冲突。

应用程序在安装时可以向 UFW 注册其配置文件。这些配置文件允许 UFW 按名称管理这些应用程序。允许您连接到服务器的服务 OpenSSH 已在 UFW 中注册了配置文件。

您可以通过输入以下命令查看已安装的 UFW 配置文件列表:

复制代码
ufw app list

输出

yaml 复制代码
Available applications:
  OpenSSH

您需要确保防火墙允许 SSH 连接,以便您下次可以登录服务器。通过输入以下命令允许这些连接:

复制代码
ufw allow OpenSSH

现在通过输入以下命令启用防火墙:

bash 复制代码
ufw enable

输入 y 并按 ENTER 继续。您可以通过输入以下命令查看 SSH 连接是否仍然被允许:

lua 复制代码
ufw status

输出

vbnet 复制代码
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

防火墙当前除了 SSH 外阻止所有连接。如果您安装并配置了其他服务,您将需要调整防火墙设置以允许新的流量进入您的服务器。

以后要添加 HTTP 访问,请仅允许您需要的服务:

bash 复制代码
ufw allow 80/tcp
ufw allow 443/tcp

步骤 5 - 为您的普通用户启用外部访问

现在您有了一个供日常使用的普通用户,您需要确保可以直接 SSH 登录到该账户。

注意: 在确认您可以使用新用户登录并使用 sudo 之前,我们建议保持以 root 身份登录。如果遇到连接问题,您可以以 root 身份进行故障排除并进行必要的更改。如果您使用 DigitalOcean Droplet 并且遇到 root SSH 连接问题,可以使用 Recovery Console 重新获得对 Droplet 的访问权限。

为您的普通用户配置 SSH 访问取决于您服务器的 root 账户是使用密码还是 SSH 密钥进行认证。

如果 root 账户使用密码认证

如果您使用密码登录到 root 账户,则 SSH 已启用密码认证。您可以打开一个新的终端会话,使用 SSH 和您的新用户名登录到您的新用户账户:

css 复制代码
ssh sammy@your_server_ip

输入您普通用户的密码后,您将被登录。请记住,如果您需要以管理权限运行命令,请在命令前输入 sudo,如下所示:

复制代码
sudo command_to_run

在每个会话中首次使用 sudo 时(以及之后定期地),系统会提示您输入普通用户的密码。

为了增强服务器的安全性,我们强烈建议设置 SSH 密钥而不是使用密码认证。按照我们关于在 Ubuntu 上设置 SSH 密钥 的指南来学习如何配置基于密钥的认证。

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

如果您使用 SSH 密钥登录到 root 账户,则 SSH 的密码认证是禁用的。要使用 SSH 密钥以普通用户身份登录,您必须将本地公钥的副本添加到您新用户的 ~/.ssh/authorized_keys 文件中。

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

使用正确的所有权和权限复制文件的最简单方法是使用 rsync 命令。这个命令将复制 root 用户的 .ssh 目录,保留权限,并修改文件所有者,所有这些操作在一个命令中完成。请确保更改下面命令中高亮的部分以匹配您普通用户的名称:

注意: rsync 命令对以尾部斜杠结尾的源和目标与没有尾部斜杠的处理方式不同。使用下面的 rsync 时,请确保源目录(~/.ssh)不包含尾部斜杠(检查确认您没有使用 ~/.ssh/)。

如果意外地在命令中添加了尾部斜杠,rsync 将复制 root 账户 ~/.ssh 目录的内容到 sudo 用户的主目录,而不是复制整个 ~/.ssh 目录结构。文件将位于错误的位置,SSH 将无法找到并使用它们。

bash 复制代码
rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy

现在,在本地机器上打开一个新的终端会话,并使用 SSH 和您的新用户名:

css 复制代码
ssh sammy@your_server_ip

您应该可以在不使用密码的情况下使用新用户账户连接到您的服务器。请记住,如果您需要以管理权限运行命令,请在命令前输入 sudo,如下所示:

复制代码
sudo command_to_run

在每个会话中首次使用 sudo 时(以及之后定期地),系统会提示您输入普通用户的密码。

常见问题

1. Ubuntu 可以用作服务器吗?

当然可以。Ubuntu 是全球最受欢迎的服务器操作系统之一,设计用于广泛的场景,从轻量级 VPS 实例到企业级集群。

Ubuntu Server 的主要优势:

特性 描述
开源且免费 无需许可证费用。
LTS 支持 长期支持版本可获得 5 年的更新。
云就绪 针对主流云(DigitalOcean、AWS、GCP)的优化镜像。
DevOps 友好 自带 OpenSSH、apt 和 systemd。
广泛的硬件支持 可在 x86、ARM、PPC 等架构上运行。

Ubuntu 能够很好处理的服务器任务示例:

  • Web 托管(Apache、Nginx)

  • 数据库(PostgreSQL、MySQL、MongoDB)

  • 应用服务器(Node.js、Python、Java)

  • 容器编排(Docker、Kubernetes)

  • 文件存储和备份

示例: 要检查您的 Ubuntu 版本:

bash 复制代码
lsb_release -a
# 或者
cat /etc/os-release

有关 SSH 和包管理的更多信息,请参阅DigitalOcean 英文官网的:OpenSSH 密钥指南

2. Ubuntu Server 是免费的吗?

是的。Ubuntu Server 完全免费下载、安装和使用,适用于任何目的------个人、教育或商业用途。没有许可费用或订阅费。

如果您正在寻找一个简单可靠的方式来开始,可以考虑在 DigitalOcean 上部署一个 Ubuntu Droplet。DigitalOcean 提供预配置的 Ubuntu 服务器镜像,因此您只需点击几下即可启动安全、可用于生产的服务器------非常适合初学者和专家。

注意: 只有需要扩展安全维护、合规性功能或企业支持时,您才需要 Ubuntu Pro。对于大多数用户和典型工作负载,免费版本的 Ubuntu Server 已绰绰有余。

3. 对于新服务器,我应该选择哪个 Ubuntu 版本?

建议:

使用长期支持(LTS)版本。LTS 版本是生产就绪的,并可获得五年的更新。

流行的 LTS 版本:

版本 发布日期 支持结束时间 备注
Ubuntu 24.04 LTS 2024 年 4 月 2029 年 4 月 最新版本;推荐用于新安装
Ubuntu 22.04 LTS 2022 年 4 月 2027 年 4 月 广泛使用;高度稳定

检查您当前的版本:

arduino 复制代码
lsb_release -cs   # 显示代号(例如,22.04 是 'jammy')

本指南及其命令已在 24.04 LTS 和 22.04 LTS 上验证。

4. 我应该为 SSH 禁用密码认证吗?

是的,为了增强安全性。

一旦您设置了 SSH 密钥认证并确认可以登录,为 SSH 禁用密码认证可以减少您服务器遭受暴力破解攻击的风险。

步骤:

打开 SSH 配置:

bash 复制代码
sudo nano /etc/ssh/sshd_config

找到并设置:

perl 复制代码
PasswordAuthentication no

重启 SSH:

复制代码
sudo systemctl reload sshd

重要: 在进行此更改之前,请始终保持另一种访问服务器的方式,例如 DigitalOcean 的 Droplet 控制台或备用访问。

5. 我需要更改默认的 SSH ****端口 吗?

将 SSH 端口从 22 更改为是可选的,并且不能替代正确的 SSH 密钥认证或防火墙配置。

利弊:

更改端口 22 影响
略微减少扫描 自动化机器人可能会绕过非 22 端口
不是安全替代品 攻击者仍然可以找到开放端口
需要更新防火墙 需要更改 UFW 或 firewalld 规则

如果您要更改端口:

编辑 /etc/ssh/sshd_config

yaml 复制代码
Port 2277   # 示例端口;使用 >1024 且未被占用的端口

更新 UFW 规则:

bash 复制代码
sudo ufw allow 2277/tcp

连接时使用:

css 复制代码
ssh -p 2277 user@your_server_ip

记录您的新端口以避免被锁在外面。将其作为额外步骤使用,而不是您的主要防御手段。

小结

恭喜!您已经完成了 Ubuntu 服务器基本的初始设置过程。通过遵循这些步骤,您极大地提高了服务器的安全性并为未来的配置奠定了基础。您现在拥有一个具有 sudo 权限的非 root 用户账户,用于更安全的日常管理;一个配置好的防火墙(UFW),限制除您明确允许之外的所有流量;以及一个安全的 SSH 密钥认证系统------显著降低了未经授权访问的风险。

有了这些最佳实践,您的 Ubuntu 服务器已经为 Web 托管、应用程序部署以及您需要的任何进一步定制做好了准备。本教程中完成的设置是几乎所有 Linux 服务器项目的基本要求,理解这些基础知识将帮助您自信地管理云中或本地的基础设施。

如果你还需要浏览更多关于云服务相关知识或DigitalOcean 云平台产品的使用教程,可访问DigitalOcean中国区独家战略合作伙伴卓普云AI Droplet官网

相关推荐
阿杰 AJie6 小时前
Ubuntu 22.04 安装 Docker
linux·ubuntu·docker
不爱编程爱睡觉6 小时前
vscode下载/常用插件分享及如何链接Ubuntu
ide·vscode·ubuntu
DO_Community7 小时前
Ubuntu服务器快速上手:初始配置与安全设置教程
服务器·安全·ubuntu
立夏陆之昂8 小时前
Ubuntu下安装easyconnect
linux·ubuntu
Tfly__8 小时前
Ubuntu20.04安装Genesis(最新)
linux·人工智能·pytorch·ubuntu·github·无人机·强化学习
习惯就好zz8 小时前
在 Ubuntu 18.04 (WSL) 上配置 LazyVim
linux·ubuntu·nvim·lazyvim·1804
pas1369 小时前
18-mini-vue element
前端·vue.js·ubuntu
乞丐哥9 小时前
乞丐哥的私房菜(Ubuntu OpenCV篇——Image Processing 节 之 Out-of-focus Deblur Filter 失焦去模糊滤波器 滤镜)
c++·图像处理·opencv·ubuntu·计算机视觉
l04090442229 小时前
安装 WSL 报错 Error code: Wsl/WININET_E_NAME_NOT_RESOLVED 问题解决
ubuntu
zy happy10 小时前
Ubuntu E: 无法定位软件包 net-tools
linux·运维·ubuntu