当你首次创建一台新的 Ubuntu 22.04 服务器时,应当在初始设置阶段完成一些重要的配置步骤。这些步骤能提升服务器的安全性和易用性,并为你后续的各种操作打下坚实的基础。
第 1 步 —— 以 root 身份登录
要登录你的服务器,你需要知道服务器的公网 IP 地址。如果你为认证安装过 SSH 密钥,还需要 root 账户的密码或私钥。如果你还没有登录过服务器,建议先阅读《如何通过 SSH 连接 Droplet》指南,其中详细介绍了这一过程。
如果你当前尚未连接服务器,请使用以下命令以 root 用户登录,并把命令中高亮的 your_server_ip 部分替换为服务器的公网 IP 地址:
ssh root@your_server_ip
如果出现主机真实性(host authenticity)警告,请接受。若服务器使用密码认证,输入 root 密码即可登录。若你使用的是受口令保护的 SSH 密钥,每次会话首次使用该密钥时可能需要输入口令。如果你第一次通过密码登录服务器,可能还需要修改 root 密码——收到提示时按说明修改即可。
关于 root
root 用户是 Linux 环境中拥有最高权限的管理用户。由于 root 账户权限极高,不建议日常使用它。root 账户即使是无意间也可能做出极具破坏性的更改。
下一步是创建一个权限受限的新用户账户,用于日常操作。稍后我们会演示如何在需要时临时获取更高权限。
第 2 步 —— 创建新用户
以 root 登录后,你就可以添加新的用户账户了。之后我们将使用这个新账户登录,而不再使用 root。
下面的示例创建一个名为 sammy 的新用户,你可以把它换成你喜欢的用户名:
adduser sammy
系统会向你询问几个问题,首先是账户密码。
输入一个强密码,并可选地填写其他附加信息。这些信息并非必填,任意字段都可以直接按 ENTER 跳过。
第 3 步 —— 授予管理权限
现在你有了一个具备普通账户权限的新用户。但有时你仍需要以 root 身份执行管理任务。
为了避免退出普通用户、再以 root 重新登录,你可以为普通用户账户配置所谓的超级用户(superuser)或 root 权限。这些权限允许普通用户在命令前加上 sudo,从而以管理权限运行命令。
要为新用户添加这些权限,需要把该用户加入 sudo 系统组。在 Ubuntu 22.04 上,默认情况下,sudo 组的成员被允许使用 sudo 命令。
以 root 身份运行以下命令,将你的新用户加入 sudo 组(把高亮的 sammy 替换为你的新用户名):
usermod -aG sudo sammy
现在,当以普通用户身份登录时,你可以在命令前输入 sudo,以超级用户权限运行它们。
第 4 步 —— 设置防火墙
Ubuntu 22.04 服务器可以使用 UFW 防火墙,以确保只允许连接到特定服务。你可以用这个应用设置一个基础防火墙。
注意:如果你的服务器运行在 DigitalOcean 上,也可以选择使用 DigitalOcean Cloud Firewalls 代替 UFW 防火墙。我们建议同一时间只使用一种防火墙,以免规则冲突而导致难以排查。
应用在安装时可向 UFW 注册自己的配置文件(profile)。这些配置文件让 UFW 能按应用名称进行管理。OpenSSH——即允许你连接服务器的那个服务——已经向 UFW 注册了配置文件。
输入以下命令可以查看已安装的 UFW 配置文件列表:
ufw app list
Output Available applications: OpenSSH
你需要确保防火墙允许 SSH 连接,以便下次仍能登录服务器。输入以下命令允许这些连接:
ufw allow OpenSSH
现在,输入以下命令启用防火墙:
ufw enable
输入 y 并按 ENTER 继续。你可以输入以下命令查看 SSH 连接是否仍然被允许:
ufw status
Output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
此时防火墙会阻止除 SSH 之外的所有连接。如果你安装并配置了其他服务,就需要调整防火墙设置,允许新的流量进入服务器。
第 5 步 —— 为普通用户启用外部访问
现在你已有供日常使用的普通用户,接下来需要确保能够直接通过 SSH 登录该账户。
注意:在验证你可以用新用户登录并使用 sudo 之前,建议保持以 root 身份登录。如果连接出现问题,你可以以 root 身份排查故障并进行必要的修改。如果你使用 DigitalOcean Droplet 且 root 的 SSH 连接出现问题,可以通过 Recovery Console 重新获得 Droplet 的访问权限。
为新用户配置 SSH 访问的方式,取决于服务器 root 账户使用的是密码认证还是 SSH 密钥认证。
如果 root 账户使用密码认证
如果你使用密码登录 root 账户,那么 SSH 的密码认证就是启用的。你可以打开一个新的终端会话,用新用户名通过 SSH 登录:
ssh sammy@your_server_ip
输入普通用户的密码后即可登录。记住,如果需要以管理权限运行命令,请在命令前加 sudo:
sudo command_to_run
每次会话首次使用 sudo 时(之后也会定期)会提示你输入普通用户的密码。
为了增强服务器安全性,我们强烈建议设置 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 将无法找到并使用它们。
rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy
现在,在你本地机器上打开一个新的终端会话,用新用户名通过 SSH 登录:
ssh sammy@your_server_ip
你应该能够在不使用密码的情况下,以新用户账户连接到服务器。记住,如果需要以管理权限运行命令,请在命令前加 sudo:
sudo command_to_run
每次会话首次使用 sudo 时(之后也会定期)会提示你输入普通用户的密码。
接下来该做什么?
至此,你的服务器已经拥有了坚实的基础。你现在可以在服务器上安装任何需要的软件。