我经常在论坛或其他网站上看到人们开玩笑说以 root 身份运行/登录的帖子,好像这很糟糕,每个人都应该知道。但是,搜索并没有发现太多关于此事的信息。
Linux专家可能广为人知,但我真的不知道为什么。我记得几年前我第一次尝试 Linux(Redhat 和 Mandrake)时总是以 root 身份运行,并且不记得因此而遇到任何问题。
实际上,有些发行版的背景为鲜红色,并带有警告标志,作为 root 用户(SuSe?)的壁纸。我仍然在我的 Windows 安装中使用“管理员”帐户进行常规使用,并且在那里也没有遇到任何问题。
它打败了多年来一直存在的安全模型。应用程序旨在以非管理安全性(或作为普通人)运行,因此您必须提升他们的权限才能修改底层系统。例如,您不希望最近的 Rhythmbox 崩溃
/usr
由于错误而清除了您的整个目录。或者是刚刚在 ProFTPD 中发布的允许攻击者获得 ROOT shell 的漏洞。在任何操作系统上,在用户级别运行您的应用程序并将管理任务留给 root 用户,并且仅在每个需要的基础上都是一种很好的做法。
就一个字:安全。
以 root 身份运行很糟糕,因为:
sudo -i
现在您是 root。想使用管道运行一些命令吗?然后使用sudo sh -c "comand1 | command2"
.您找不到有关它为什么不好的信息的原因是,互联网上的数据太多了 :) 并且许多长期使用 Linux 的人都像您一样思考。这种考虑 root 帐户的方式是相当新的(可能是十年?),很多人仍然对必须使用 sudo 感到恼火。特别是如果他们在服务器上工作,这意味着他们打算进行系统更改。可能是从以前的糟糕经历和安全标准带来的,大多数系统管理员都知道得更好,但他们仍然不喜欢它:)。
这是一个很好的问题。我认为答案会略有不同,具体取决于您是在谈论服务器还是桌面安装。
在桌面上,使用该
root
帐户并不常见。事实上,Ubuntu 出厂时禁用了 root 访问。所有需要超级用户权限的更改都是通过sudo
其图形同源gksudo
和kdesudo
. 但是,鉴于设置root
密码很容易,为什么人们不这样做呢?一个原因是它为您提供了额外的安全层。如果您运行程序
root
并利用安全漏洞,则攻击者可以访问所有数据并可以直接控制硬件。例如,它可能会在您的内核中安装木马或键盘记录器。但在实践中,即使没有超级用户权限,攻击也会造成大量破坏。毕竟,所有用户数据——包括文档和存储的密码——都可以在没有 root 访问权限的情况下访问。在单用户系统上,更有效的一点是防止用户意外地使系统无法使用。如果用户无意中发出删除所有文件的命令,即使数据丢失,他们仍然能够引导系统。
此外,当今大多数面向用户 (X11) 的应用程序都建立在假设它们作为普通用户帐户运行且没有管理员权限的情况下。因此,某些程序在以
root
.在仅具有非图形 shell 访问权限的多用户系统上,其中许多原因并不适用。但是,Ubuntu 仍然合理地默认为无法访问的
root
帐户。一方面,sudo
通过安全漏洞获得对用户帐户(具有权限)的访问权与获得对 的访问权之间存在真正的区别root
,因为在第一种情况下,破坏其他用户将需要运行sudo
,并且仍会提示输入帐户密码作为额外的安全步骤。sudo
另一方面,从用户帐户执行许多管理任务并且仅在绝对需要超级用户权限时调用很有用。因此,从源代码安装程序时,建议构建源代码 - 运行configure
和make
- 在用户目录中,仅sudo make install
在最后一步中使用。这再次使自己(以及多用户系统的其他用户)更加难以自拔,并且降低了构建脚本对系统造成严重破坏的可能性。因此,即使在服务器上,坚持使用 Ubuntu 的基于 sudo 的管理也是一个不错的建议。不以 root 身份运行但(到目前为止)尚未被其他答案识别的一个原因是可追溯性。在主要是单用户机器(您的台式机或笔记本电脑)的机器上可能不太重要,但在服务器机器上,如果有人以 登录
root
,您不知道应该为所采取的行动负责。因此,大多数需要root
特权的具有多个系统和多个管理员的专业组织都要求人们使用自己的用户 ID(和密码)登录,然后在必要时使用sudo
或类似的程序以root
特权操作。否则,不以 root 身份运行的主要原因是:
将事故造成的损坏风险降至最低。如果你
rm -fr / home/me/my-subdir
以 root 身份运行,那么你只是从你的机器中显着消除了所有重要的东西,因为(第一个)斜杠后面的空间 - 因为首先出现的东西是首先添加的东西 - 像内核这样的小东西,和目录/bin
。/etc
如果你失去了这些,Unix 会感到不安。将来自恶意外部站点的损害风险降至最低。如果您浏览为
root
,您更容易受到恶意材料的偷渡式下载的攻击。我使用 MacOS X 比使用 Ubuntu 更多,但是在默认情况下,root 是禁用的,它仍然在我的机器上。我经常升级内核和其他类似的操作——使用
sudo
(在幕后)。类似的技术通常适用于 Linux。root
基本上,您应该只在较短的工作时间内使用全能权限,以避免出错的风险。TL;DR:仅在必要时以 root 身份执行操作。
sudo
让这很容易。如果您启用 root 登录,您仍然可以遵循此规则,您只需要小心这样做。尽管如果操作正确,启用 root 登录实际上并不是不安全的,但您不需要启用 root 登录,因为您拥有sudo
.这里确实有两个相关的问题。
sudo
polkit使管理员能够以 root 身份运行特定命令?为什么不一直以 root 身份运行所有内容?
大多数其他答案都涵盖了这一点。它归结为:
的确,即使没有以root身份做事,也可能造成伤害。例如,您可以删除您自己的主目录中的所有文件,该目录通常包括您的所有文档,而无需以 root 身份运行!(希望你有备份。)
当然,作为 root,还有其他方法可以意外破坏这些相同的数据。例如,您可以
of=
为命令指定错误的参数dd
并在文件上写入原始数据(这使得它们比您仅仅删除它们更难恢复)。如果您是唯一一个使用您的计算机的人,那么您仅以 root 身份所能造成的危害可能并不真正高于您使用常规用户权限所能造成的危害。但这仍然没有理由将您的风险扩大到包括弄乱您的 Ubuntu 系统的其他方法。
如果使用非 root 用户帐户运行会阻止您对自己的计算机进行控制,那么这当然是一个糟糕的权衡。但它不会——只要您真正希望以 root 身份执行操作,您可以使用
sudo
和其他方法来执行此操作。为什么不让以root身份登录成为可能?
以 root 身份登录的能力本质上是不安全的想法是一个神话。某些系统默认启用了 root 帐户;其他系统
sudo
默认使用,有些系统同时配置。拥有启用 root 帐户的系统在客观上没有错误,前提是
经常有新手问如何在 Ubuntu 中启用 root 帐户。我们不应该向他们隐瞒这些信息,但通常当人们问这个问题时,这是因为他们错误地认为他们需要启用 root 帐户。事实上,这几乎从来没有必要,所以在回答这些问题时,我们解释这一点很重要。启用 root 帐户还可以很容易地变得自满并以 root 身份执行不需要 root 权限的操作。但这并不意味着启用 root 帐户本身就是不安全的。
sudo
鼓励并帮助用户仅在需要时以 root 身份运行命令。要以 root 身份运行命令,请键入sudo
、一个空格,然后键入命令。这非常方便,许多不同技能水平的用户都喜欢这种方法。简而言之,您不需要启用 root 登录,因为您拥有
sudo
. 但是,只要您仅将它用于需要它的管理任务,以 root 身份启用和登录几乎同样安全,只要它仅通过以下方式:su
命令,当从另一个帐户登录时。但是,如果您以以下方式以 root 身份登录,则会增加大量安全风险:
以图形方式。当您以图形方式登录时,会运行很多东西来提供图形界面,并且您最终会以 root 身份运行更多应用程序来使用该界面进行任何操作。这违背了仅以 root 身份运行真正需要 root 权限的程序的原则。其中一些程序可能包含错误,包括安全错误。
此外,还有一个非安全原因可以避免这种情况。以 root 身份登录图形并没有得到很好的支持——正如 loevborg 所提到的,桌面环境和图形应用程序的开发人员并不经常以 root 身份测试它们。即使他们这样做了,以 root 身份登录到图形桌面环境也不会得到用户的真实世界的 alpha 和 beta 测试,因为几乎没有人尝试它(出于上面解释的安全原因)。
如果您需要以 root 身份运行特定的图形应用程序,您可以使用
gksudo
或sudo -H
。与您实际使用 root 帐户以图形方式登录相比,以 root 身份运行的程序要少得多。远程。该
root
帐户实际上可以做任何事情,并且几乎在每个类 Unix 系统上都具有相同的名称。通过通过ssh
或其他远程机制以 root 身份登录,甚至通过配置远程服务以允许它,您可以使入侵者(包括在僵尸网络上运行的自动化脚本和恶意软件)更容易通过暴力破解、字典攻击(以及可能一些安全漏洞)。如果只允许基于密钥而不是基于密码的root 登录,可以说风险不是很高。
默认情况下,在 Ubuntu 中,图形 root 登录和通过 SSH 的远程登录都不会启用,即使您启用了 root 登录。也就是说,即使您启用了 root 登录,它仍然只能以相当安全的方式启用。
/etc/sshd/ssh_config
,它将包含该行PermitRootLogin without-password
。这将禁用基于密码的 root 登录,但允许基于密钥的登录。但是,默认情况下没有配置任何键,因此除非您设置了一个,否则它也不起作用。此外,基于密钥的远程 root 登录远没有基于密码的远程 root 登录那么糟糕,部分原因是它不会产生暴力破解和字典攻击的风险。综上所述:
sudo
可以帮助您做到这一点,同时仍可随时为您提供 root 的全部功能。有关 root 和 的更多信息
sudo
,包括我在这里没有介绍的一些额外好处sudo
,我强烈推荐Ubuntu 帮助 wiki 中的RootSudo。默认情况下禁用Root 帐户- 这意味着它存在但不可用(恢复模式除外)。这意味着攻击者知道您的 root 帐户,但即使他/她拥有 root 密码也无法使用它。因此,攻击者必须猜测具有管理员权限的用户名和该用户的密码(这比尝试计算 root 密码要困难得多)。在 XP 中,如果您安装了故障恢复控制台,任何人可以物理访问您的盒子可以启动它(RC) - 不需要密码。与 Ubuntu 中的恢复模式相同。
在 Ubuntu 中,当他们说 root 被禁用时 - 真正的意思是帐户被锁定。通过将密码更改为与可能的加密值不匹配的值来锁定帐户。这有效地防止了任何人以 root 身份登录 - 因为他们不可能输入密码。由于有时仍然需要 root 访问 - Ubuntu 内核已被修改为仅允许在单用户模式下进行 root 本地登录。
另请参阅此页面
这就像用AK47武装一个小孩,而他可以愉快地玩他的彩弹枪。;)
我的意思是它错了,因为您和您的应用程序将拥有比他们需要的更多的特权,这就是事情可能而且有时会出错的时候:(
非常好的问题......让我从实际的角度回答它:
当我开始使用 10 多年前的 Linux 时,主要发行版并没有像今天那样宣传使用非 root 帐户。因为我习惯了 Windows,所以我也没有看到使用受限用户帐户的意义。特别是因为我必须经常输入“su”——当时 sudo 并没有那么流行。;-) 所以我总是以 root 身份登录,因为我需要进行大量维护才能使我的系统配置良好。但是你猜怎么着,任何新安装的系统很快就会变得非常不稳定。
例如,一个具体的问题:我没有为 Linux 保留那么多硬盘空间,所以有几次我的分区上还剩下 0 个字节。也许我并不完全准确,因为我不知道确切的机制,但是当你用非 root 帐户填满磁盘时,总会剩下几千字节。但是如果你真的只剩下 0 个字节,你的系统就会出现奇怪的错误,并且你最终可能会在你的系统中造成一些难以修复的损坏,因为有很多系统软件在后台运行......
另一件事是:根和非根之间的划分使您的系统井井有条。作为 root 用户,您可能会不想干净地安装新应用程序,这会给您留下肮脏、难以维护的系统。
但好在:现代发行版为您完成了大部分管理任务,因此您很少需要使用 root 帐户来处理 Linux 系统的内部问题。时不时输入密码就够了,剩下的就由发行商的脚本来完成。
但是我怀疑如果您使用 95 oder 98,您的 Windows 系统上是否没有遇到问题。(至少我对此有问题......)因为管理员和普通用户之间没有明确的区分“传统" Windows 应用程序假设他们可以做任何事情,例如,如果他们愿意,可以安装间谍软件,即使不告诉你。微软在发布 Vista 时就涉及到了这个问题。(有效地实现了一个 sudo 机制。)所以人们得到了非常烦人的对话,说“你不能那样做”。对于一些不兼容 Vista 的软件,您需要一些肮脏的黑客来安装它,即使是管理员...
这种方法背后有很多方面。他们之中有一些是:
这是一篇好文章:http ://cf.stanford.edu/policy/root