出于安全原因,简单的 Linux 服务器真的需要非 root 用户吗?

信息安全 Web应用程序 网络 linux 网络服务器 SSH
2021-08-24 14:05:43

扮演魔鬼的拥护者

假设我从托管服务提供商处购买了一台 Linux 服务器。我得到了 root 用户的密码,并被告知我可以使用 SSH 登录。此服务器的唯一目的是托管一个或多个网站,可能会正确配置和启用 SSL。

我的初始登录将是安装(通过一个经过充分审查和广泛使用的包管理系统)和配置(通过在 中编辑文件/etc)一个 Web 服务器、一个数据库、一些不能访问 Internet 的软件和一个 Web 应用程序服务器(PHP-FPM、Unicorn 之类的)。包管理足够智能,可以设置非特权用户来运行服务器,这是我维护的配置。接下来,我将一些网站文件(PHP、Ruby、Python 等)放入 中/var/www,并且chown所有这些文件都由作为 Web 服务器进程运行的同一非特权用户拥有(即。www-data)。

以后只有我会登录,而且只会更新网站文件和执行一些只读操作,如查看日志。

在上面的场景中,是否有任何与安全相关的原因,为什么我应该创建一个非 root 用户帐户而不是 root 用户来使用?毕竟,sudo如果我使用非 root 用户登录,几乎每个命令都会运行。

请注意:我了解使用非 root 用户有许多普遍令人信服的安全和非安全原因。我不是在询问非 root 用户帐户的必要性。我的问题仅限于我上面描述的有限设置。我认为这是相关的,因为即使我的例子有限,它也很常见。

4个回答

有几个原因:

  • traceabilty:记录使用 sudo 运行的命令。有时会记录使用 bash 运行的命令,但细节较少,并且使用了易于阻止的机制。

  • 特权分离几乎每个命令都与每个命令不同。还有很多不需要root的

  • 文件编辑:Web 文件由非 root 用户拥有并由非 root 用户运行......那么为什么要使用 root 编辑它们?

  • 攻击缓解:考虑以下完全不是假设的场景:您的工作站上安装了一些恶意软件,该恶意软件从适当的客户端从存储的身份验证数据库中窃取您的 FTP/SCP/SFTP/SSH 登录并将其传输给攻击者。攻击者登录您的设备进行一些恶作剧。现在,他们可以掩盖他们的踪迹吗,或者他们的所作所为对你来说是可见的吗?我每周不止一次与最近发生这种情况的新人交谈。

  • 自动攻击缓解:巴西的一台被黑服务器正在扫描您的网络并启动一个监听 SSH 服务器。攻击者使用什么用户名进行自动攻击?也许webuser, 或者test,www或者admin—— 但比任何其他的都多:root.

当然还有更多的原因,但这些是我最先想到的。

刚看到这个,有点晚了,但是...

- 一个简单的 Web 服务器可以由 root 管理,并且基本上仍然是安全的。

确实,以非 root 用户身份进行管理确实有一些好处,但这些都是次要的,并且被大多数安全建议大大夸大了。保护面向网络的服务更为重要。保持 Web 服务器的补丁并检查您的 Web 应用程序中的应用程序层缺陷。

回应 tylerl 的观点:

  • 可追溯性- 如果您有多个管理员,这可能是有效的,但如果只有您,那么您可以完全跟踪以 root 身份工作。

  • 特权分离——我希望在实践中你不会像非 root 那样做很少的事情,这没有什么区别。

  • 文件编辑- 见上文

  • 攻击缓解- 如果您的工作站上有恶意软件,那么所有的赌注都没有了。如果您使用无密码 sudo,他提到的攻击仍然有效。如果您使用 su,则恶意软件可以使用键盘记录器获取您的密码。

  • 自动攻击缓解- 如果您遵循使用强密码(或改用 SSH 密钥)的标准建议,那么暴力破解者无论如何都不会进入。

使用非 root 用户进行日常活动的最佳理由是在您在 *nix 系统上做一些真实的事情时建立良好的习惯和知识。没有它,您将永远不必考虑文件访问权限、组等。

我要补充一点,另一个相关的问题是 root 是否应该有自己的密码。养成提供 root 密码以使用 sudo 的习惯是一种很好的做法。很好地提醒您,您所做的事情会影响操作系统配置的完整性。即使是系统管理员也喜欢知道不是任何随机用户都可以使用 sudo rm -R / 命令来破坏整个系统。*nix 会直接执行此操作,而无需再对您说一句话。

这也归结为文化。如果你只是在玩看看它在那里的样子,那是一回事——在虚拟盒子里做,尽情地滥用它。(我特别喜欢做 rm -R / 事情,然后用 htop 观察什么时候停止工作。但是一旦你知道它总是会导致以下两种结果之一,它就会很快变老:从备份恢复或重新安装。)

如果你曾经有使用 *nix 机器的商业目的,我认为融入使用同一系统的其他人的文化是件好事,即使你是管理员。

在整个系统中使用 root 权限类似于将房门钥匙留在窗户附近,即使它已关闭。

如果您有使用弱点突破 Web 应用程序(或任何其他入口点)的经验,那么您就会明白纵深防御非常重要。为什么?因为应用程序总是有漏洞,它们只是还没有被发现(有些每年都会被发现)。

每个互联网暴露的端口、应用程序、协议都可能被黑客入侵。随后,您可以访问非面向互联网的设备、软件、服务器、网络等。

因此,在上面的窗户类比中,如果黑客想办法轻轻晃动并打开窗户,现在他只需伸手进去,就能找到你房子的所有钥匙,甚至是你的保险箱。否则他可能只是摸索并抓起一些小物品然后跑掉 - 但他现在“拥有整个房子”,多亏了你。

所以收紧端口、权限、密码和权限。我同意这可能会很麻烦,至少作为管理员,您应该具有面向安全(和黑客)的心态,这样您就可以自己判断服务器内容的价值以及您想要锁定的彻底程度服务器关闭。