网络服务器如何以非特权方式运行但执行 root 操作?

问题描述 投票:0回答:1

我有一个服务器应用程序,在身份验证之后公开主机的基本系统和网络信息。我想扩展服务器,以便能够公开有关传感器、需要直接适配器访问的任务以及其他低级事物的信息。

问题是:我想添加的东西需要 root 访问权限。据我所知,以 root 身份运行网络服务器通常被认为是不好的做法,因为身份验证问题或服务器错误将意味着整个系统受到损害,而不是仅服务器用户有权访问的系统受到损害。允许访问这些根级别的内容同时保持适当的安全级别的合理方法是什么?

我最初的想法是创建两个独立的守护进程,通过套接字或其他 IPC 进行通信,一个以标准用户身份运行 Web 后端,另一个以 root 身份运行。这些可以共享二进制文件以便于分发。

该设计意味着攻击者必须妥协两个级别才能获得 root(用户网络服务器和根守护程序 IPC/验证),而不是只需要在根网络服务器中查找漏洞。但这似乎显着增加了复杂性,带来了一些有争议的收益(考虑到专用硬件可能是提供“完全”隔离的唯一方法)。

类似的程序如何满足这些要求?

security webserver root
1个回答
0
投票

简而言之,你是对的。不要以 root 身份运行网络服务器。分离流程绝对是正确的想法。

我在分布式系统中看到更多这样的事情,因此这种通信可能会通过 gRPC 进行。监控和管理任务通常根本不通过本地网络服务器公开,而是完全通过单独的代理公开。您可能会使用一个 Web 界面来管理服务器并执行低级任务 - 但它将完全在另一台计算机上运行。

从攻击者的角度理解这一点有助于理解原因。大多数攻击者使用常见的现成工具来扫描已知漏洞。他们不会手动调查您的申请。像这样的扫描一直在面向公众的网站上发生,并且没有可靠的方法来阻止它们。实际的利用步骤也可能会使用现成的工具。

此时,如果他们拥有 root 访问权限,那么他们就完成了 - 而我刚才描述的工作量是微不足道的。

一旦攻击者必须真正开始手动分析 Web 应用程序,工作量就会大大增加。就像家庭安全一样,部分目标是让闯入所需的努力程度大于这样做的潜在回报。

可能还有其他一些考虑因素。特别是,发送命令让根守护进程作为字符串运行并不是一个好主意——这很容易导致命令注入。换句话说,攻击者可能会找到一种方法来影响这些字符串的内容,以强制根守护进程执行任意命令。

© www.soinside.com 2019 - 2024. All rights reserved.