我有一些关于 Linux 安全性的问题:
以root身份运行进程是一个很大的错误(root拥有太多的权力+程序在系统中获得太多的权限)。我总是以用户身份运行进程(我只是使用
chmod
,chown
来访问特殊文件并能够运行它们)。这比以 root 身份运行进程/守护进程/程序更好吗?如果我使用
sudo su
然后启动一个进程,是否等于以用户身份运行进程的安全性?或者它与以 root 身份运行进程相同吗?- 我应该以 root 身份安装软件吗?或者也许作为普通用户?
- 编辑配置文件怎么样?我应该以 root 身份进行编辑,还是像以前一样,使用
sudo su
我的常规非特权用户帐户进行编辑?
答案1
一般的想法是让一个进程请求(并拥有)完成其工作所需的最少特权。此类示例包括绑定到端口 80(可能需要 root)但随后更改为非特权系统用户的 Web 服务器。
您可能已经注意到“可能需要root”而不是“必须有root”。传统上,进程必须以 root 身份启动才能绑定到小于 1024 的端口,然后再更改。现在,如果设置正确,您就不需要这样做了。 CAP_NET_BIND_SERVICE 将允许您绑定到小于 1024 的端口,而不是作为 root。
这是“少花钱多办事”的又一次迭代。当您只需要绑定端口这一方面时,为什么要以 root 身份运行并拥有所提供的所有访问权限。功能为您提供了这种粒度。
以 root 或其他用户身份启动守护进程与以 root 身份启动 sudo 之间的区别很小,并且通常会产生相同的结果。
对于编辑、管理工作等,大多数人更喜欢成为“标准”用户并使用 sudo 来完成这些任务。无法以 root 身份登录就关闭了一扇可能不安全的大门。
软件一般以 root 身份安装。为什么?因为如果你的网络服务器可以修改它的二进制文件或配置文件(为什么是apache,我认为你的公共访问目录应该是/etc)是一个坏主意。
答案2
这些都不是简单的是/否问题,他们应该有“在某些情况下”、“经常”等答案。
话虽如此,无论如何我都会尝试使用是/否答案。我还假设您有一个常规桌面或一个小型家庭服务器。不是什么花哨的东西。
这将为您提供以下四个问题的答案
- 按照开发人员的意图使用它,如果您开始搞乱权限和所有者/组,事情很可能会崩溃
- 使用时会发生变化和不会发生变化的事情存在一些问题
sudo su
。使用sudo -i
替代(或者sudo -u someuser -i
如果您想成为其他人而不是 root)。sudo -i
就像以 root 身份登录一样。几乎所有与你的用户有关的东西都被“遗忘”了 -
- 如果您从包中安装它:请使用 root。
- 如果您从源代码编译它:使用您的常规用户并且仅以
make install
root 身份执行(最后一步)。 (或者不做这一切,此步骤旨在将文件重新分配到更“理智”的位置,但如果认为安全性更重要,那么您可以跳过它(这是相当偏执的))
- 使用该文件所属的用户。这通常归结为:对 中的所有内容使用 root
/etc
,对 homedir 中的所有内容使用您的用户。