当前位置: 首页>>技术问答>>正文


为什么以root用户身份登录不好?

, , , ,

问题描述

我经常遇到在论坛或其他网站上的帖子,在这些帖子中,人们开玩笑地以root身份运行/登录,就好像它很糟糕,每个人都应该知道。但是,搜索揭示的事情并不多。

Linux专家可能会广为人知,但我真的不知道为什么。我记得当我第一次尝试Linux时(Redhat和Mandrake)总是以root身份运行,并且不记得因此而遇到任何问题。

实际上有一些发行版有一个明亮的红色背景,并将警告标志全部作为根用户的壁纸(SuSe?)。我仍然使用”Administrator”帐户在我的Windows安装中经常使用,并且从未遇到任何问题。

最佳解决思路

它击败了多年来一直存在的安全模式。应用程序旨在用non-administrative安全性(或作为凡人)运行,因此您必须提升其权限才能修改底层系统。例如,您不希望Rhythmbox的最近崩溃由于错误而消除整个/usr目录。或者是在ProFTPD中发布的允许攻击者获得ROOT shell的漏洞。

在任何操作系统上,只需在用户级别运行应用程序并将管理任务留给root用户,并且仅在per-need的基础上进行即可。

次佳解决思路

只要一个字:安全。

  1. 您以root身份登录=所有应用程序都以root权限运行 – Firefox,Flash,OpenOffice等中的每个漏洞现在都可能会破坏您的系统,因为可能的病毒现在无处不在。是的,Ubuntu /Linux只有很少的病毒,但这也是因为安全性和默认非特权用户。

  2. 这不仅仅是关于病毒 – 应用程序中的小错误可能会擦除一些系统文件或…

  3. 当你以root身份登录时,你可以做所有事情 – 系统不会问!你想格式化这个磁盘吗?好吧,只需一次点击就完成了,因为你是根,你知道你在做什么……

第三种解决思路

以root身份运行很糟糕,因为:

  1. 愚蠢:没有什么能阻止你做一些愚蠢的事情。如果您尝试改变系统,那么可能有害,您需要执行sudo操作,这样可以在您输入密码时保证暂停,从而意识到您即将进行大规模/高成本的更改。

  2. 安全性:在这个问题中已经提到过很多次,但基本上它是一样的,如果你不知道管理员用户的登录帐户,就更难以破解。根意味着你已经拥有管理员凭证的一半工作集。

  3. 您并不需要它:如果您需要以root用户身份运行多个命令,并且在sudo过期时不得不输入密码多次,您所需要做的就是sudo -i,现在您已经是root用户了。想用管道运行一些命令?然后使用sudo sh -c "comand1 | command2"

  4. 您可以随时在恢复控制台中使用它:恢复控制台允许您尝试恢复做一些愚蠢的事情或修复应用程序导致的问题(您仍然必须以sudo身份运行:))Ubuntu没有密码对于这种情况下的root帐户,但是您可以在线搜索以改变这种情况,这会使任何有实际访问权限的人都难以受到伤害。

你找不到信息的原因是因为,互联网上的数据太多了,而且许多长期以来一直在使用Linux的人会像你一样思考。这种关于root帐户的思考方式是相当新的(十年也许呢?),很多人仍然因为不得不使用sudo而感到恼火。特别是如果他们在服务器上工作,这意味着他们有意进行系统更改。可能从之前的不良体验和安全标准带来的大多数系统管理员都知道更好,但他们仍然不喜欢它:)。

第四种思路

这是一个很好的问题。我认为答案略有不同,具体取决于您是在讨论服务器还是桌面安装。

在桌面上,使用root帐户并不常见。实际上,Ubuntu禁用了root权限。所有需要超级用户权限的更改均通过sudo及其图形关联gksudokdesudo完成。鉴于设置root密码很容易,但为什么人们不这样做呢?

一个原因是它为您提供了额外的安全层。如果您将程序作为root运行并且安全漏洞被利用,则攻击者可以访问所有数据并可以直接控制硬件。例如,它可能会在您的内核中安装木马或key-logger。但实际上,即使没有超级用户权限,攻击也可能造成大量的损失。毕竟,所有的用户数据 – 包括文档和存储的密码 – 都可以在没有root权限的情况下访问。

在single-user系统上更有效的一点是,防止用户意外地使系统无法使用。如果用户无意中发出删除所有文件的命令,即使数据丢失,它们仍然能够引导系统。

此外,目前大多数user-facing(X11)应用程序的构建假定它们是以普通用户帐户运行的,并且没有管理员权限。因此,当以root格式运行时,某些程序可能会出现错误。

在仅non-graphical shell 访问的multi-user系统上,许多这些原因不适用。但是,Ubuntu仍然合理地默认为无法访问的root帐户。首先,通过安全漏洞访问用户帐户(通过sudo权限)并访问root有一个真正的区别,就像在第一种情况下中断其他用户需要运行sudo并且仍然会提示输入帐户密码作为额外的安全措施。另一方面,从用户帐户执行许多管理任务并仅在绝对需要超级用户权限时才调用sudo非常有用。因此,当从源代码安装程序时,建议在用户目录内建立源代码 – 运行configuremake,并在最终步骤中仅使用sudo make install。再次,这使得在脚下拍摄自己(以及multi-user系统的其他用户)更加困难,并且减少了构建脚本对系统造成严重破坏的可能性。因此,即使在服务器上,坚持使用Ubuntu的sudo-based administration也是一个很好的建议。

第五种思路

没有(至今)被其他答案识别的根目录不能运行的一个原因是可追踪性。在主要是single-user机器(您的台式机或笔记本电脑)的机器上可能不太重要,但在服务器机器上,如果某人以root身份登录,则不知道应采取哪些措施。因此,大多数需要root权限的具有多个系统和多个管理员的专业组织需要用户使用自己的用户ID(和密码)进行登录,然后在必要时使用sudo或类似程序以root权限运行。

否则,不以root身份运行的主要原因是:

  • 最大限度地减少事故造成的损失风险。如果以root身份运行rm -fr / home/me/my-subdir,那么由于(第一个)斜杠后面的空格,您刚刚显著地消除了机器中所有重要的东西 – 因为首先放入的东西是先添加的东西 – 内核之类的小东西,/bin/etc目录。如果你失去这些,Unix会感到不安。

  • 最大限度地减少恶意外部网站造成的损害风险。如果您浏览为root,则您几乎容易受到drive-by恶意内容下载的影响。

我使用的MacOS X比我做的更多,但是在那里,root默认是禁用的,它仍然在我的机器上。我经常升级内核和其他类似的操作 – 使用sudo(在幕后)。通常类似的技术适用于Linux。

基本上,您应该只使用root的all-powerful权限来缩短工作时间,以避免出错的风险。

第六种思路

长话短说:只有当你必须做事时才能做根。 sudo使这非常容易。如果你启用了root登录,你仍然可以遵循这个规则,你只需要小心这样做。虽然启用root登录实际上不是不安全的,但如果正确完成,则不需要启用root登录,因为您拥有sudo

这里真的有两个相关的问题。

  • 为什么以日常计算机使用(网页浏览,电子邮件,文字处理,游戏等)为根登录是不好的?

  • 为什么Ubuntu默认禁用根登录,并使用sudopolkit来启用管理员以root身份运行特定命令?

为什么不一直以root身份运行一切?

大多数其他答案涵盖了这一点。它归结为:

  1. 如果您对不需要它们的任务使用根权力,并且您最终做了某件您不想要做的事情,那么您可能会以您不想要的方式更改或损害您的系统。

  2. 如果你在不需要的时候以root身份运行一个程序,它最终会做一些你并不想做的事情 – 例如,由于安全漏洞或其他错误 – 它可能会改变或伤害你的系统以你不想要的方式。

确实,即使没有以根为主,也会造成伤害。例如,您可以删除您自己的主目录中的所有文件,这通常包括您的所有文档,而无需以root身份运行! (希望你有备份。)

当然,作为根源,还有其他的方式来意外地销毁这些相同的数据。例如,您可以为dd命令指定错误的of=参数,并在您的文件中写入原始数据(这使得它们更容易恢复,比仅仅删除它们更难)。

如果您是唯一使用您的计算机的人,那么您只能以root身份执行的危害可能不会高于您对常规用户权限可能造成的伤害。但是,这仍然没有理由将风险扩大到包含其他混淆Ubuntu系统的方式。

如果使用non-root用户帐户运行,无法控制自己的计算机,那么这当然是一个不好的折衷。但它不会 – 任何时候你真的希望以root身份执行一个动作,你可以用sudo和其他方法来完成。

为什么不能以root身份登录?

以root身份登录的能力固有不安全的想法是一个神话。有些系统默认启用root帐户;其他系统默认使用sudo,有些系统配置了两者。

  • 例如,OpenBSD(广泛且合理地被认为是全球最安全的general-purpose操作系统)附带为本地password-based登录启用的root帐户。

  • 其他well-respected这样做的操作系统包括RHELCentOSFedora

  • Debian(Ubuntu derives)用户决定在系统安装期间将配置哪种方法。

如果有一个启用了root帐户的系统,这并不是客观的错误

  1. 你还是只在真正需要时才使用它,而且

  2. 您适当地限制对它的访问。

新手经常会问如何在Ubuntu中启用root帐户。我们不应该向他们隐瞒这些信息,但通常当人们问这是因为他们错误地认为他们需要启用根帐户。事实上,这几乎是不必要的,所以在回答这样的问题时,我们必须解释这一点。启用root帐户还可以使其变得自满,并以root身份执行不需要root权限的操作。但这并不意味着启用root帐户本身并不安全。

sudo鼓励并帮助用户仅在需要时以超级用户身份运行命令。要以root用户身份运行命令,请键入sudo(一个空格),然后键入该命令。这非常方便,许多技术水平的用户都喜欢这种方法。

总之,您不需要启用root登录,因为您拥有sudo。但是,只要您仅将它用于需要它的管理任务,只要以这些方式启用和以root登录即可同样安全:

  • 在本地,从non-graphical virtual console

  • 使用su命令时,从另一个帐户登录。

但是,如果您以这些方式以root用户身份登录,则会出现大量增加的安全风险:

  • 图形。当你以图形方式登录时,会运行很多东西来提供图形界面,并且最终会以root用户身份运行更多的应用程序,以便为任何事情使用该界面。这违背了仅以真正需要root权限的root身份运行程序的原则。其中一些程序可能包含错误,包括安全漏洞。此外,还有一个non-security理由可以避免这种情况。以root身份以图形方式登录并不被很好地支持 – 桌面环境和图形应用程序的开发者as loevborg mentions通常不会以root身份进行测试。即使他们这样做,以root身份登录图形桌面环境也不会得到用户的真实世界alpha和beta测试,因为几乎没有人尝试它(出于上面解释的安全原因)。如果您需要以root身份运行特定的图形应用程序,则可以使用gksudosudo -H。这比运行root帐户以图形方式登录的程序少得多。

  • 远程。 root帐户实际上可以做任何事情,并且在几乎每个Unix-like系统上都有相同的名称。通过ssh或其他远程机制以root身份登录,或者甚至通过配置远程服务来允许它,使入侵者(包括在僵尸网络上运行的自动化脚本和恶意软件)通过暴力,字典攻击(和可能还有一些安全漏洞)。如果只允许key-based,而不允许password-based根登录,则风险可能不是很高。

在Ubuntu中默认情况下,即使启用以root用户身份登录,也不会启用图形根用户登录或通过SSH进行远程登录。也就是说,即使您启用了root登录,它仍然只能以合理安全的方式启用。

  • 如果你在Ubuntu上运行ssh服务器并且没有更改/etc/sshd/ssh_config,它将包含行PermitRootLogin without-password。这将禁用password-based根登录,但允许key-based登录。然而,默认情况下没有配置密钥,所以除非你设置了一个密钥,否则这将不起作用。此外,key-based远程root登录比password-based远程root登录差得多,部分原因是它不会造成暴力和字典攻击的风险。

  • 即使默认设置应该保护你,但我认为检查你的ssh配置,如果你打算启用root帐户,还是个好主意。如果你正在运行其他提供远程登录的服务,比如f​​tp,你也应该检查它们。

结论是:

  • 只在需要的时候以root身份进行操作; sudo可以帮助您做到这一点,同时还可以随时为您提供完全的root权力。

  • 如果您了解root的工作原理以及滥用root的危险,从安全角度来看,启用root帐户并不是真正的问题。

  • 但是如果你明白这一点,你也知道你几乎肯定不需要启用root帐户。

有关root和sudo的更多信息,包括我没有在这里介绍的sudo的一些其他好处,我强烈建议在Ubuntu帮助wiki中使用RootSudo

第七种思路

根帐户默认是禁用的 – 意味着它存在但不可用(除了恢复模式)。这意味着攻击者知道你的root帐户,但即使他/她拥有root密码也不能使用它。因此,攻击者必须猜测具有管理员权限的user-name,以及该用户的密码(这比仅仅尝试计算root密码困难得多)。在XP中,如果安装了故障恢复控制台,任何有物理访问您的盒子可以启动它(RC) – 无需密码。与Ubuntu中的恢复模式相同。

在Ubuntu中,当他们说root被禁用时 – 真正意义的是该帐户被锁定。通过将密码更改为不匹配任何可能的加密值的值来锁定帐户。这有效地防止了任何人能够以root身份登录 – 因为他们不可能输入密码。由于仍然需要root访问权限 – Ubuntu内核已被修改为只允许在single-user模式下进行root本地登录。

另请参阅此page

第八种思路

非常好的问题…让我从实际的角度回答它:

当我开始使用十多年前的Linux时,主要的发行版并没有像今天一样使用non-root帐户进行广告宣传。正如我习惯于Windows,我也没有看到使用受限用户帐户的一点。特别是因为我不得不经常输入”su”–那时sudo并不那么受欢迎。 ;-)所以我总是以root身份登录,因为我需要进行大量的维护工作才能让我的系统配置良好。但想一想,新安装的系统很快就会变得非常不稳定。

例如一个具体问题:我没有为Linux预留足够多的硬盘空间,所以在我的分区上剩下0个字节时,我碰巧碰到过几次。也许我不是完全精确的,因为我不知道确切的机制,但是当您用non-root帐户填充磁盘时,总是剩下几千字节。但是如果你真的剩下0个字节的话,你的系统就会出现奇怪的错误,并且你可能最终会在系统中造成一些难以修复的损坏,因为后台运行着大量的系统软件。

另一件事是:根和non-root之间的划分保持您的系统well-organized。作为root-user,您可能会试图不干净地安装您的新应用程序,从而导致您的系统肮脏,难以维护。

但好事:现代发行版为您执行大部分管理任务,因此您很少必须使用root帐户摆弄Linux系统的内核。不时输入密码就足够了,剩下的工作由经销商的脚本完成。

但是我怀疑你的Windows系统没有问题,如果你使用95或者98.(至少我遇到过这个问题……)由于Administrator和普通用户”traditional”之间没有明确的区分Windows应用程序假定他们可以做任何事情安装间谍软件,如果他们觉得喜欢它,即使没有告诉你。微软在发布Vista时参与了这个问题。 (有效实施sudo机制。)所以人们开始非常讨厌的对话,说“你不能那样做”。对于某些non-Vista-compliant软件,您需要一些肮脏的黑客来安装它,即使是管理员…

第九种思路

它像用AK47武装一个小孩子,而他可以愉快地用他的彩弹枪玩。 😉

我的意思是它的错误,因为你和你的应用程序将有更多的特权,然后他们需要,那是当事情可以,有时会出错:(

第十种思路

这种方法背后有很多方面。他们之中有一些是:

根是非常强大的。

在Unix和Unix-like系统中,系统管理权限全部或全部不变。用户或者拥有root访问权限,root权限意味着完全控制一台机器。如果有问题的机器被多个人使用,或者root可以访问其他系统或用户文件,那么为某些用户提供部分root权限是可以接受的。

root用户可以隐藏他们的所有操作。

sudo记录每个通过sudo运行的命令。记录sudo所做的工作有助于我们诊断单个系统/流程和一般配置问题的问题,并帮助我们确定所需的改进。

root密码使您可以访问系统上的任何命令。

通过其配置文件,sudo可以为特定的一组命令提供用户root权限。这也避免了“全部或全部”的效果,使我们能够让个人用户更好地控制他们的机器并帮助他们摆脱常见问题。

这里有一篇很好的文章:http://cf.stanford.edu/policy/root

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/259.html,未经允许,请勿转载。