AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 16178
Accepted
Mussnoon
Mussnoon
Asked: 2010-12-05 09:00:42 +0800 CST2010-12-05 09:00:42 +0800 CST 2010-12-05 09:00:42 +0800 CST

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

  • 772

我经常在论坛或其他网站上看到人们开玩笑说以 root 身份运行/登录的帖子,好像这很糟糕,每个人都应该知道。但是,搜索并没有发现太多关于此事的信息。

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

实际上,有些发行版的背景为鲜红色,并带有警告标志,作为 root 用户(SuSe?)的壁纸。我仍然在我的 Windows 安装中使用“管理员”帐户进行常规使用,并且在那里也没有遇到任何问题。

security root users administrator
  • 22 22 个回答
  • 153010 Views

22 个回答

  • Voted
  1. Best Answer
    lazyPower
    2010-12-05T09:08:31+08:002010-12-05T09:08:31+08:00

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

    在任何操作系统上,在用户级别运行您的应用程序并将管理任务留给 root 用户,并且仅在每个需要的基础上都是一种很好的做法。

    • 171
  2. Vojtech Trefny
    2010-12-05T09:10:00+08:002010-12-05T09:10:00+08:00

    就一个字:安全。

    1. 您以 root 身份登录 = 所有应用程序都以 root 权限运行 - Firefox、Flash、OpenOffice 等中的每个漏洞现在都可以破坏您的系统,因为现在可能的病毒无处不在。是的,Ubuntu/Linux 的病毒很少,但这也是因为良好的安全性和默认的非特权用户。
    2. 这不仅与病毒有关——应用程序中的小错误可能会删除一些系统文件或...
    3. 当您以 root 身份登录时,您可以做任何事情——系统不会询问!是否要格式化此磁盘?好的,只需单击一下即可完成,因为您是root用户并且知道自己在做什么...
    • 87
  3. Marlon
    2010-12-05T10:43:01+08:002010-12-05T10:43:01+08:00

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

    1. 愚蠢:没有什么能阻止你做愚蠢的事情。如果您尝试以任何可能有害的方式更改系统,则需要执行 sudo ,这几乎可以保证在您输入密码时暂停,以便您意识到您即将进行可能的大/昂贵的更改。
    2. 安全性: 在这个问题中已经提到了很多次,但基本上是一样的,如果你不知道管理员用户的登录帐户,就更难破解。root 意味着您已经拥有一半的管理员凭据工作集。
    3. 您实际上并不需要它:如果您需要以 root 身份运行多个命令,并且在 sudo 过期时必须多次输入密码而感到恼火,那么您需要做的就是sudo -i现在您是 root。想使用管道运行一些命令吗?然后使用sudo sh -c "comand1 | command2".
    4. 您始终可以在故障恢复控制台中使用它: 故障恢复控制台允许您尝试从做一些愚蠢的事情或修复由应用程序引起的问题中恢复(您仍然必须以 sudo 运行 :))Ubuntu 没有密码在这种情况下,对于 root 帐户,但您可以在线搜索以进行更改,这将使任何可以物理访问您的盒子的人更难以造成伤害。

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

    • 53
  4. loevborg
    2010-12-05T09:24:12+08:002010-12-05T09:24:12+08:00

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

    在桌面上,使用该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 的管理也是一个不错的建议。

    • 39
  5. Jonathan Leffler
    2010-12-05T15:10:20+08:002010-12-05T15:10:20+08:00

    不以 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基本上,您应该只在较短的工作时间内使用全能权限,以避免出错的风险。

    • 34
  6. Eliah Kagan
    2015-05-04T09:12:46+08:002015-05-04T09:12:46+08:00

    TL;DR:仅在必要时以 root 身份执行操作。sudo让这很容易。如果您启用 root 登录,您仍然可以遵循此规则,您只需要小心这样做。尽管如果操作正确,启用 root 登录实际上并不是不安全的,但您不需要启用 root 登录,因为您拥有sudo.

    这里确实有两个相关的问题。

    • 为什么在日常计算机使用(网页浏览、电子邮件、文字处理、游戏等)中以 root 身份登录是不好的?
    • 为什么 Ubuntu 默认完全禁用 root 登录并使用sudopolkit使管理员能够以 root 身份运行特定命令?

    为什么不一直以 root 身份运行所有内容?

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

    1. 如果您将 root 权限用于不需要它们的任务,并且您最终做了一些您不打算做的事情,您可能会以您不想要的方式更改或损害您的系统。
    2. 如果您在不需要时以 root 身份运行程序,并且它最终会做一些您不希望它做的事情——例如,由于安全漏洞或其他错误——它可能会改变或损害你的系统以你不想要的方式。

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

    当然,作为 root,还有其他方法可以意外破坏这些相同的数据。例如,您可以of=为命令指定错误的参数dd并在文件上写入原始数据(这使得它们比您仅仅删除它们更难恢复)。

    如果您是唯一一个使用您的计算机的人,那么您仅以 root 身份所能造成的危害可能并不真正高于您使用常规用户权限所能造成的危害。但这仍然没有理由将您的风险扩大到包括弄乱您的 Ubuntu 系统的其他方法。

    如果使用非 root 用户帐户运行会阻止您对自己的计算机进行控制,那么这当然是一个糟糕的权衡。但它不会——只要您真正希望以 root 身份执行操作,您可以使用sudo和其他方法来执行此操作。

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

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

    • 例如,被广泛且合理地认为是世界上最安全的通用操作系统的OpenBSD附带启用了 root 帐户以进行基于密码的本地登录。
    • 其他备受推崇的操作系统包括RHEL、CentOS和Fedora。
    • Debian(从Ubuntu 派生)让用户决定在系统安装期间将配置哪种方法。

    拥有启用 root 帐户的系统在客观上没有错误,前提是

    1. 你仍然只在你真正需要的时候使用它,并且
    2. 您适当地限制对它的访问。

    经常有新手问如何在 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 登录,它仍然只能以相当安全的方式启用。

    • 如果您在 Ubuntu 上运行 ssh 服务器并且没有更改/etc/sshd/ssh_config,它将包含该行PermitRootLogin without-password。这将禁用基于密码的 root 登录,但允许基于密钥的登录。但是,默认情况下没有配置任何键,因此除非您设置了一个,否则它也不起作用。此外,基于密钥的远程 root 登录远没有基于密码的远程 root 登录那么糟糕,部分原因是它不会产生暴力破解和字典攻击的风险。
    • 即使默认设置应该保护您,我认为如果您要启用 root 帐户,检查您的 ssh 配置仍然是一个好主意。如果您正在运行其他提供远程登录的服务,例如 ftp,您也应该检查它们。

    综上所述:

    • 仅在需要时以 root 身份执行操作;sudo可以帮助您做到这一点,同时仍可随时为您提供 root 的全部功能。
    • 如果您了解 root 的工作原理以及过度使用它的危险,那么从安全角度来看,启用 root 帐户并不是真正的问题。
    • 但是,如果您了解这一点,您也知道您几乎可以肯定不需要启用 root 帐户。

    有关 root 和 的更多信息sudo,包括我在这里没有介绍的一些额外好处sudo,我强烈推荐Ubuntu 帮助 wiki 中的RootSudo。

    • 23
  7. karthick87
    2010-12-05T09:18:59+08:002010-12-05T09:18:59+08:00

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

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

    另请参阅此页面

    • 15
  8. omeid
    2010-12-05T17:33:12+08:002010-12-05T17:33:12+08:00

    这就像用AK47武装一个小孩,而他可以愉快地玩他的彩弹枪。;)

    我的意思是它错了,因为您和您的应用程序将拥有比他们需要的更多的特权,这就是事情可能而且有时会出错的时候:(

    • 14
  9. Philip
    2010-12-05T12:02:18+08:002010-12-05T12:02:18+08:00

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

    当我开始使用 10 多年前的 Linux 时,主要发行版并没有像今天那样宣传使用非 root 帐户。因为我习惯了 Windows,所以我也没有看到使用受限用户帐户的意义。特别是因为我必须经常输入“su”——当时 sudo 并没有那么流行。;-) 所以我总是以 root 身份登录,因为我需要进行大量维护才能使我的系统配置良好。但是你猜怎么着,任何新安装的系统很快就会变得非常不稳定。

    例如,一个具体的问题:我没有为 Linux 保留那么多硬盘空间,所以有几次我的分区上还剩下 0 个字节。也许我并不完全准确,因为我不知道确切的机制,但是当你用非 root 帐户填满磁盘时,总会剩下几千字节。但是如果你真的只剩下 0 个字节,你的系统就会出现奇怪的错误,并且你最终可能会在你的系统中造成一些难以修复的损坏,因为有很多系统软件在后台运行......

    另一件事是:根和非根之间的划分使您的系统井井有条。作为 root 用户,您可能会不想干净地安装新应用程序,这会给您留下肮脏、难以维护的系统。

    但好在:现代发行版为您完成了大部分管理任务,因此您很少需要使用 root 帐户来处理 Linux 系统的内部问题。时不时输入密码就够了,剩下的就由发行商的脚本来完成。

    但是我怀疑如果您使用 95 oder 98,您的 Windows 系统上是否没有遇到问题。(至少我对此有问题......)因为管理员和普通用户之间没有明确的区分“传统" Windows 应用程序假设他们可以做任何事情,例如,如果他们愿意,可以安装间谍软件,即使不告诉你。微软在发布 Vista 时就涉及到了这个问题。(有效地实现了一个 sudo 机制。)所以人们得到了非常烦人的对话,说“你不能那样做”。对于一些不兼容 Vista 的软件,您需要一些肮脏的黑客来安装它,即使是管理员...

    • 11
  10. aneeshep
    2010-12-19T05:52:53+08:002010-12-19T05:52:53+08:00

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

  11. 根是所有强大的。
  12. 在 Unix 和类 Unix 系统中,系统管理权限是全部或全部。用户要么具有root访问权限,要么没有root访问权限,root访问意味着对机器的完全控制。如果有问题的机器被多人使用,或者 root 可以访问其他系统或用户文件,则给予某些用户部分 root 权限是更可接受的。

  13. root 用户可以隐藏他们的所有操作。
  14. sudo 记录通过 sudo 运行的每个命令。记录使用 sudo 所做的事情有助于我们诊断个别系统/进程的问题和一般配置问题,并帮助我们确定需要改进的地方。

  15. root 密码使您可以访问系统上的任何命令。
  16. 通过其配置文件,sudo 可以为用户授予特定命令集的 root 访问权限。这也避免了“全有或全无”效应,使我们能够让个人用户更好地控制他们的机器并帮助他们自己解决常见问题。

    这是一篇好文章:http ://cf.stanford.edu/policy/root

  • 10

相关问题

  • 从 Ubuntu 中完全删除密钥环是否安全?

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • iptables 的图形用户界面?

  • 如何防止自己在多用户设置中自动注销?

  • 如何与无头服务器进行图形交互?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve