在线运行程序作为根

我正在重新制作一个基于Ubuntu的发行版,意味着仅用于实时,主要用作浏览器,因此用户硬盘驱动器可以在线时无病毒。 这种实时浏览为Linux用户增加了安全性,但作为Windows和Mac用户的Guardian难以实现。 这是一个很好的邀请,他们的用户可以看看Linux操作系统提供什么来帮助保护他们选择的操作系统。 我正在添加一个简单的奶奶教程,以便他们可以使用所有浏览器和用户空间自定义重新管理它。

大多数用户需要密码管理器来帮助他们登录自己的帐户。 我正在使用Firefox,但是一旦使用主密码打开Firefox密码管理器,它将为任何知道如何使请求无阻碍地访问所有加密密码的请求服务提供服务。 因此,我决定选择一个独立的密码管理器,它将提供一些许可灵活性来帮助解决这些问题。 Keepassx一直是主要的选择。

存在类似的问题,因为恶意代码可以访问Keepassx数据库,因为恶意代码和Keepassx将在在线用户空间中共享相同的权限。

为了增加安全性,我正在考虑更改Keypassx权限,以便在线用户无法访问Keepassx数据库,除非用户输入管理员密码。 这在逻辑上会导致攻击者更难以访问。 虽然,我是设置安全环境的新手。 所以我的问题……

迫使Keepassx仅作为root用户在Ubuntu上启动是一个好主意和安全,请记住用户将在线与Firefox?

那么,以root身份运行应用程序有两个不同的方面; 其中一个可以提高安全性,另一个可能会危及它 – 我认为混合这两个方面可以解释你的困惑。

  • 以另一个用户 (可能是root用户,但不是必需的)运行应用程序会使另一个进程更难以访问该应用程序拥有/创建的文件并执行其他讨厌的操作(例如,发送KILL信号)。 这很好。

  • 如果应用程序碰巧有漏洞(即发送一些特殊格式的输入使其通过缓冲区溢出等执行某些代码) – 然后,在利用漏洞后,攻击者将能够以该进程的权限执行代码。 从这个意义上说,运行具有root权限的应用程序是不好的,因为它会为攻击者提供最高级别的权限。

现在您了解以root身份运行更新管理器可能会很糟糕,如果它包含一个错误,该错误允许特制的.deb文件使其崩溃并使其执行某些代码。 但是,运行某些具有超级用户权限的应用程序(例如包管理器)是不可避免的,因为它们会修改系统的基本部分。

这个问题的常见解决方案是在程序启动时执行所谓的“权限丢弃”; 这通常用于运行Web服务器和其他可能被利用(并可从外部访问)的软件。 这个想法很简单:程序以root用户身份启动,但是尽快将其切换到某个用户帐户,尽可能少的权限(没有shell登录,chroot-ed到其主目录等)。这样,即使受到损害,它会给攻击者一个非常有限的系统访问权限。 此外,其他用户帐户(超级用户除外)将无法访问应用程序的文件

我不确定运行像这样的桌面应用程序有多容易。

实际上,在这种情况下,我认为将Web浏览器作为非特权用户运行会更有意义。 当然,谷歌为我们提供了一些关于这个主题的链接:

  • 使用sudo将Firefox作为另一个用户运行

  • 如何在Ubuntu中设置和运行Firefox 3.0b2作为不同的用户

将这个想法发挥到极致(正如你在评论中提到的那样)会给你一个类似于Android工作方式的系统; 在Android上,每个应用程序都在自己的用户帐户中运行,因此它只能访问自己的文件。 这可能在Ubuntu中存在一些问题,即如果您使用在受限帐户中运行的Firefox下载文件,它只能将其保存在自己的主文件夹中,因此无法在文本处理器(作为另一个用户运行)…

关于启动程序脚本,我认为该脚本将以root身份启动并以各自的用户身份调用应用程序。 该脚本显然只需要root用户可写。 阅读有关setuid的信息 。

我可能在这方面有误,但我的理解是,如果您提供实用程序root权限并且它受到恶意代码的攻击,那么恶意代码也会获得root权限。

据我所知,出于这个原因,Ubuntu处理安全性的方式与其他发行版不同。 它不会安装root用户。 当用户(作为管理员)需要root权限时,它会安装获得root权限的用户。 任务完成或达到时间限制后,具有管理员访问权限的用户将失去root权限。 这降低了恶意代码获得root访问权限的风险。

这就是为什么在Ubuntu中我们在终端中的命令之前不使用“su”而是“sudo”。 我们通过限制使用root权限来限制恶意代码访问和破坏的机会。

这是我从中了解到的文件:

Ubuntu sudo的原因而不是su或root

我强烈建议您考虑Ubuntu开发人员以这种方式做事的原因。 正是这些原因让我说你打算做的事情并不安全。

我引用官方文件:

默认情况下,Root帐户密码在Ubuntu中被锁定。 这意味着您无法直接以Root身份登录或使用su命令成为Root用户。 但是,由于Root帐户在物理上存在,因此仍可以使用root级别权限运行程序。 这就是sudo的用武之地 – 它允许授权用户(通常是“管理”用户;有关详细信息,请参阅AddUsersHowto)以Root身份运行某些程序,而无需知道root密码。

不,这不是一个好主意。 它可能会中断,并且可能允许升级到root。

保持密码数据库免受因同一用户运行的其他进程的意外或恶意暴露并非易事,但值得尝试。 但是,在Keypassx项目的上游,以及除了以root身份运行之外,还有更好的方法。