为什么我不应该以root身份运行软件,但是经常build议给一个帐户root权限来运行软件?

我是一个很长时间的技术专业,但我的工作的100%已经在Windows环境。 我对用户帐户pipe理,安全和软件开发等许多技术问题有了很好的了解。

在试图设置VPS的时候,运行debian(这是一个个人项目),我发现了大量的指导性文档,帮助我设置系统,下载源代码并进行编译。

令我困惑的是,你总是不愿意以root身份运行任何软件。 看来,应该只用于设置用户帐户和权限。 但是,如果某个帐户需要访问系统所提供的几乎所有内容,则该帐户将被授予root访问权限。

如果一个帐户被授予root权限,是不是该帐户本质上根? 如果这是真的,为什么我不能保持简单(因为这是一个简单的项目),只是从VPS的根帐户运行的一切?

我认为必须有一个很好的答案,我只是想念它。 对于从不以root身份运行软件来说,这似乎是违反直觉的,这也是一个重要的既定事实,但却暗示重要的账户可以被授予root权限。 恕我直言,这似乎是一个更大的安全问题,因为而不是只有一个根帐户,现在有两个(或更多!)帐户可能被破坏。

当然,还有另一种可能性 – 我发现的很多文档(通过谷歌)是错误的。 如果是这样的话,那么在非常专业的(通常是清晰的)网站上提供的不幸的是大量的不良信息。 这是一个耻辱,有点令人沮丧。

我不知道你是什么意思,“给根访问”,但通常的方法,让某人或某事某些方面的pipe理控制系统只是使用sudo机制,你可以微调,只允许的东西,用户需求。

在deamons /服务的情况下,其他方法也存在,例如在启动或产生作为其他用户运行的孩子之后,删除root权限。

此外,还有其他一些方法可以更好地控制,但是它们通常要复杂得多,而且容易出错(想想SELinux)。 这种方法的一般术语是基于angular色的访问控制 。

我认为你对运行用户为“sudo”和使用root之间的区别感到困惑。 程序“sudo”为机器上的用户提供执行超级用户命令。 现在,即使在sudo中,您也没有以完全root权限运行用户帐户,su或sudo中仍然存在限制。 另外,我不会推荐关于Debian安全实践的陈述,特别是在提出这样的问题时。

执行初始设置任务需要提升特权后,许多最初需要root用户的进程使用setuid [1]来删除权限[2]。 这种方法的好处是允许守护进程/服务在开始时执行需要提升权限的操作,并在以后放入非特权用户,这样如果进程出现故障或受到攻击等情况下的暴露程度较低。

例如。 Apache需要绑定到系统上的端口80。 端口80是一个特权端口(在1024以下),需要root权限。 所以这可以通过最初以root身份运行apache,绑定端口和其他必要的设置来解决,然后使用setuid使进程作为web服务器用户运行(www-data on ubuntu)。

[1] http://en.wikipedia.org/wiki/Setuid

[2] http://en.wikipedia.org/wiki/Privilege_separation