我已经将 Ubuntu 20.xx 设置为 Digital Ocean 提供的云中的 Web 服务器,并希望安装 Node、Express、Mongo 和可能的 NginX。在几篇文章中都提到禁用 root 用户以提高安全性并创建具有管理权限的新用户。为了做到这一点,我创建了一个新用户,然后使用它来设置所有应用程序,但遇到了 nginx 问题。
我是否应该先使用 root 用户设置所有应用程序,并允许应用程序在 root 下运行?然后创建具有 ssh 访问权限的第二个管理员用户,然后禁用 root 的 ssh?
更新1:感谢大家的帮助,我已经更新了问题并添加了它的云安装。
更新2:
谢谢你的详细解释。我的理解是:
- Sudo 用户具有与 root 相同的权限
- 可以跟踪执行了操作的 Sudo 用户(涉及多个用户时具有相关性)
- Web 应用程序(node、pm2、mongo)可以使用 root 帐户和/或 sudo 用户帐户进行安装,因为这些应用程序应该使用自己的默认用户帐户运行。
- 适时禁用 root ssh 以防止暴力攻击
答案1
在库存安装在裸机或自托管虚拟机上安装 Ubuntu Server 时,root 用户已被禁用。请勿启用 root。请按照设计使用 Ubuntu 的方式使用它。
在云安装Ubuntu,你不是安装;完成的容器/VM 已交给您。云用户通常有一个可用的 root 提示符这样他们就可以创建管理员 sudo 用户。建议:创建这些用户并安装他们的 SSH 密钥后,禁用 root 登录(以及所有密码登录)以保护您的系统免受攻击者的攻击。
如果您遇到了 nginx 问题,请专门针对该问题提出一个新问题。
答案2
“禁用 root”并改用常规帐户的 sudo 的原因有多个目的,但都不会影响您问题的答案。
系统软件始终以 root 身份安装。有时应用程序软件会以特定于应用程序的用户身份安装,但通常不会。禁用 root 帐户的登录不会改变这一点,也不会改变应用程序在启动时启动的方式。
禁用 root 帐户的目的是让您以普通用户身份登录并以普通用户身份而不是 root 身份执行用户会话之类的操作。然后您使用 sudo 提升到 root 权限来安装软件并执行其他危险操作。这也有副作用,即当您使用 sudo 时,执行此操作的用户帐户也会被记录,除非有多个用户帐户可以使用 sudo,否则这并不那么有趣,在这种情况下,当出现错误时更容易追究责任。因此,安装软件仍然以 root 身份进行 - 只需通过 sudo 而不是直接登录。
当应用程序(如 NginX、mysql、mogodb 等)配置为在启动时启动时,通常 systemd(或 initd)启动脚本会以特殊应用程序用户的身份启动该应用程序。此用户是在安装应用程序时创建的。您不应该手动启动应用程序,而应该允许已安装的系统脚本启动它(例如使用 systemctl start ...),以便它在正确的环境中以正确的权限运行。这背后的设计理念是应用程序在其自己的用户中是独立的,并且应用程序的安全问题(希望)会被困在该用户 ID 中。大多数应用程序不应直接以 root 身份运行。
话虽如此,在只有一位管理员的系统上,记录谁使用了 sudo 就没那么重要了,如果你有云镜像,可以直接从新副本中复制并重新加载,那么你在容器内以哪个用户身份运行程序也不太重要。这可能是你的云镜像启用 root 权限而没有单独的管理用户的原因。
答案3
何时在 ubuntu 服务器上禁用 root 帐户?
我建议不要这样做,而是采取一些措施来最大限度地提高安全性。让我们面对现实吧,如果政府想进入你的服务器,他们会用一种简单的方法查看你的文件。我们只担心黑客。
我在 RamNode 上有一个实例,用于我的网站。当我第一次学习如何设置无人值守的 Ubuntu 服务器时,我发现了几件重要的事情。只要你设置好服务器,就会有人试图入侵!
创建一个强密码。密码长度至少应为 32 个字符。不要将按键重复。随机使用键盘上除反引号 ' 键之外的所有字符键。使用特殊字符(如 $%&),不要使用任何单词或短语。我将登录数据存储在主计算机上的文本文件中,如下所示:
ssh [email protected] 6^g0)6)nS3@sGh^7*9L:pR%bS@3d9
创建服务器后,请执行以下操作:
ufw allow ssh ufw enable apt update apt list --upgradable apt upgrade
现在,您已锁定了所有试图进入您 root 目录的用户,并更新了您的 Ubuntu 文件。除了 ssh 之外,没有其他端口可供其他用户访问。
我也只使用 ipv4,因此我通过 sshd_config 文件、/etc/default/ufw 文件和 /etc/default/grub 文件锁定 ipv6 访问。
要查看谁在攻击你,请使用以下命令:
service sshd status
你可能会惊讶地发现他们开始尝试攻击你的服务器的速度有多快。我几乎不停地受到来自中国的攻击。几十年来,中共一直在从任何可能的地方窃取数据。但那是另一个故事。