Mus*_*oon 210 security root users administrator
我经常在论坛或其他网站上看到有人开玩笑说以 root 身份运行/登录,好像这是一件可怕的事情,每个人都应该知道它。然而,关于此事的搜索并没有透露太多信息。
Linux 专家可能广为人知,但我真的不知道为什么。我记得多年前我第一次尝试 Linux(Redhat 和 Mandrake)时总是以 root 身份运行,不记得因此遇到任何问题。
实际上有一些发行版具有明亮的红色背景,上面到处都是警告标志作为 root 用户(SuSe?)的墙纸。我仍然使用“管理员”帐户在我的 Windows 安装中经常使用,并且也没有遇到任何问题。
laz*_*wer 166
它击败了多年来一直存在的安全模型。应用程序旨在以非管理安全性(或作为普通人)运行,因此您必须提升他们的权限才能修改底层系统。例如,您不希望最近的 Rhythmbox 崩溃/usr
由于错误而清除您的整个目录。或者刚刚发布在 ProFTPD 中的漏洞,允许攻击者获得 ROOT shell。
在任何操作系统上,在用户级别运行您的应用程序并将管理任务留给 root 用户,并且仅在每个需要的基础上,这都是很好的做法。
Voj*_*fny 87
只有一个字:安全。
Mar*_*lon 53
以 root 身份运行很糟糕,因为:
sudo -i
您现在是 root 用户。想使用管道运行一些命令吗?然后使用sudo sh -c "comand1 | command2"
.你找不到关于它为什么不好的信息的原因是,互联网上有太多的数据:) 并且很多已经使用 Linux 很长时间的人和你一样思考。这种考虑 root 帐户的方式是相当新的(也许是十年?),而且很多人仍然对必须使用 sudo 感到恼火。特别是如果他们在服务器上工作,这意味着他们打算进行系统更改。大多数系统管理员可能更了解以前的糟糕经历和安全标准,但他们仍然不喜欢它:)。
loe*_*org 39
这是一个很好的问题。我认为答案会略有不同,具体取决于您是在谈论服务器还是桌面安装。
在台式机上,使用该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 的管理也是很好的建议。
Jon*_*ler 34
不以 root 身份运行(到目前为止)还没有被其他答案识别的一个原因是可追溯性。在主要是单用户机器(您的台式机或笔记本电脑)的机器上,这可能不太重要,但在服务器机器上,如果有人以 身份登录root
,您不知道应该为所采取的行动负责谁。因此,大多数需要root
权限的多系统和多管理员的专业组织都要求人们使用自己的用户名(和密码)登录,然后在必要时使用sudo
或类似程序以root
权限进行操作。
否则,不以 root 身份运行的主要原因是:
将事故造成的损坏风险降至最低。如果您rm -fr / home/me/my-subdir
以 root 用户身份运行,那么您就因为(第一个)斜杠后面的空间而显着消除了机器中所有重要的东西-因为首先添加的东西是最先添加的东西-像内核这样的小东西,在/bin
和/etc
目录。如果您丢失了这些,Unix 会感到不安。
最大限度地降低恶意外部站点造成损害的风险。如果您以 浏览root
,则您更容易受到恶意材料的偷渡式下载。
我使用 MacOS X 的次数多于使用 Ubuntu 的次数,但是默认情况下 root 是禁用的,它仍然在我的机器上。我经常升级内核和其他类似的操作 - 使用sudo
(在幕后)。类似的技术通常适用于 Linux。
基本上,您应该只在root
缩短的工作期间使用全能权限,以避免出错的风险。
Eli*_*gan 23
TL;DR:仅在必要时才以 root 身份执行操作。sudo
使这很容易。如果您启用 root 登录,您仍然可以遵循此规则,但您必须小心这样做。尽管如果操作正确,启用 root 登录实际上并不是不安全的,但您不需要启用 root 登录,因为您拥有sudo
.
这里真的有两个相关的问题。
sudo
和polkit使管理员能够运行特定命令的根?大多数其他答案都涵盖了这一点。归结为:
确实,即使不以 root 身份执行操作,您也可能会造成伤害。例如,您可以删除您自己的主目录中的所有文件,该目录通常包括您的所有文档,而无需以 root 身份运行!(希望你有备份。)
当然,作为 root,还有其他方法可以意外破坏这些相同的数据。例如,您可以of=
为dd
命令指定错误的参数并在文件上写入原始数据(这使得它们比仅删除它们更难恢复)。
如果您是唯一使用您的计算机的人,那么您只能以 root 身份造成的危害可能并不比您使用普通用户权限所能造成的危害更大。但是,这仍然没有理由扩大你的风险,包括附加的方式搞乱你的Ubuntu系统。
如果使用非 root 用户帐户运行会阻止您对自己的计算机进行控制,那么这当然是一个糟糕的权衡。但事实并非如此——任何时候您确实希望以 root 用户身份执行操作,您都可以使用sudo
和 其他方法来执行此操作。
以 root 身份登录的能力本质上不安全的想法是一个神话。某些系统默认启用 root 帐户;其他系统sudo
默认使用,有些系统同时配置。
拥有一个启用 root 帐户的系统在客观上并没有错,前提是
经常有新手问如何在 Ubuntu 中启用 root 帐户。我们不应该向他们隐瞒这些信息,但通常当人们问这个问题时,是因为他们错误地认为他们需要启用 root 帐户。事实上,这几乎从来没有必要,所以在回答此类问题时,我们解释这一点很重要。启用 root 帐户也很容易变得自满并以 root 身份执行不需要 root 权限的操作。但这并不意味着启用 root 帐户本身是不安全的。
sudo
鼓励并帮助用户仅在需要时以 root 身份运行命令。要以 root 身份运行命令,请键入sudo
、一个空格,然后键入命令。这是非常方便的,许多不同技能水平的用户都喜欢这种方法。
简而言之,您不需要启用 root 登录,因为您拥有sudo
. 但是只要您仅将它用于需要它的管理任务,以 root 身份启用和登录也同样安全,只要它仅通过以下方式:
但是,如果您以 root 身份登录,则会出现大量额外的安全风险:
以图形方式。当您以图形方式登录时,会运行大量内容以提供图形界面,而您最终将以 root 身份运行更多应用程序以使用该界面进行任何操作。这违背了仅以 root 身份运行真正需要 root 权限的程序的原则。其中一些程序可能包含错误,包括安全错误。
此外,还有一个非安全原因可以避免这种情况。以 root 身份以图形方式登录并没有得到很好的支持——正如 loevborg 提到的那样,桌面环境和图形应用程序的开发人员通常不会以 root 身份对其进行测试。即使他们这样做了,以 root 身份登录到图形桌面环境也不会得到用户的真实世界 alpha 和 beta 测试,因为几乎没有人尝试过(出于上述安全原因)。
如果您需要以 root 身份运行特定的图形应用程序,您可以使用gksudo
或sudo -H
。与您实际使用 root 帐户以图形方式登录相比,这以 root 身份运行的程序要少得多。
远程。该root
帐户实际上可以做任何事情,并且它在几乎所有类 Unix 系统上都具有相同的名称。通过以 root 身份ssh
或其他远程机制登录,甚至配置远程服务以允许它,您可以更轻松地让入侵者(包括在僵尸网络上运行的自动化脚本和恶意软件)通过暴力破解、字典攻击(可能还有一些安全漏洞)。
可以说,如果您只允许基于密钥而不是基于密码的root 登录,那么风险并不是非常高。
默认情况下,在 Ubuntu 中,图形 root 登录和通过 SSH 的远程登录都不启用,即使您启用以 root 身份登录。也就是说,即使您启用 root 登录,它仍然只能以相当安全的方式启用。
/etc/sshd/ssh_config
,它将包含该行PermitRootLogin without-password
。这将禁用基于密码的 root 登录,但允许基于密钥的登录。但是,默认情况下没有配置任何密钥,因此除非您设置了一个,否则这也不起作用。此外,基于密钥的远程 root 登录远没有基于密码的远程 root 登录那么糟糕,部分原因是它不会产生暴力破解和字典攻击的风险。综上所述:
sudo
帮助您做到这一点,同时仍然可以随时随地为您提供 root 的全部功能。有关 root 和 的更多信息sudo
,包括sudo
我在此处未介绍的一些其他好处,我强烈推荐Ubuntu 帮助 wiki 中的RootSudo。
kar*_*k87 15
默认情况下禁用Root 帐户- 这意味着它存在但不可用(除非在恢复模式下)。这意味着攻击者知道您的 root 帐户,但即使他/她拥有 root 密码也无法使用它。因此,攻击者必须猜测具有管理员权限的用户名和该用户的密码(这比仅仅尝试计算 root 密码要困难得多)。在 XP 中,如果您安装了故障恢复控制台,那么任何人可以物理访问您的盒子可以启动它(RC) - 不需要密码。与 Ubuntu 中的恢复模式相同。
在 Ubuntu 中,当他们说 root 被禁用时 - 真正的意思是帐户被锁定。通过将密码更改为与任何可能的加密值都不匹配的值来锁定帐户。这有效地防止了任何人能够以 root 身份登录 - 因为他们不可能输入密码。由于有时仍需要 root 访问权限 - Ubuntu 内核已被修改为仅允许在单用户模式下进行 root 本地登录。
另请参阅此页面
ome*_*eid 14
这就像用 AK47 武装一个小孩,而他可以愉快地玩他的彩弹枪。;)
我的意思是它错了,因为您和您的应用程序将拥有比他们需要的更多特权,这就是事情可能并且有时会出错的时候:(
Phi*_*lip 11
很好的问题……我从实际的角度回答一下:
当我在 10 多年前开始使用 Linux 时,主要发行版并没有像今天那样宣传使用非 root 帐户。由于我习惯了 Windows,我也没有看到使用受限用户帐户的意义。特别是因为我必须经常输入“su”——当时 sudo 并不流行。;-) 所以我总是以 root 身份登录,因为我有很多维护工作要做才能使我的系统配置良好。但是你猜怎么着,任何新安装的系统很快就会变得非常不稳定。
例如,一个具体的问题:我没有为 Linux 保留那么多的硬盘空间,所以我遇到过几次我的分区上剩余 0 字节的情况。也许我不完全准确,因为我不知道确切的机制,但是当您使用非 root 帐户填满磁盘时,总会剩下几千字节。但是如果你真的有 0 字节剩余,你的系统就会出现奇怪的错误,你可能最终会在系统中遇到一些难以修复的损坏,因为有很多系统软件在后台运行......
另一件事是:root 和非 root 之间的划分使您的系统井井有条。作为 root 用户,您可能不想干净地安装新应用程序,这会给您留下一个肮脏、难以维护的系统。
但好消息是:现代发行版为您完成了大部分管理任务,因此您很少需要使用 root 帐户来摆弄 Linux 系统的内部结构。不时输入密码就足够了,其余的由分发者的脚本完成。
但我怀疑如果您使用 95 或 98,您的 Windows 系统是否没有问题。(至少我遇到了问题......)因为管理员和普通用户“传统”之间缺乏明确的分离" Windows 应用程序假定它们可以做任何事情,例如安装间谍软件,只要他们愿意,即使没有告诉您。微软在发布 Vista 时就遇到了这个问题。(有效地实现了 sudo 机制。)所以人们得到了非常烦人的对话,说“你不能那样做”。对于一些非 Vista 兼容的软件,您需要一些肮脏的黑客来安装它,即使是管理员...
ane*_*hep 10
这种方法背后有很多方面。他们之中有一些是:
这是一篇好文章:http : //cf.stanford.edu/policy/root
rm /*
Run Code Online (Sandbox Code Playgroud)
假设您一直在清理一个行政区域。你厌倦了密码,所以你sudo su
。你会分心一秒钟,忘记你 cd 到/
. 那你rm *
。我已经做到了。你可以把它全部拿回来,但它是一个 PITA。哦,它也下降/media
了!
虽然您可以为超级用户帐户创建一个密码,允许您以 root 身份登录,但值得一提的是,这不是“Ubuntu”的做事方式。出于某种原因,Ubuntu 特别选择默认情况下不提供 root 登录名和密码。相反,默认的 Ubuntu 安装将使用sudo
.
Sudo 是为人们提供 root 密码以执行超级用户职责的替代方法。在默认的 Ubuntu 安装中,安装操作系统的人默认被授予“sudo”权限。
任何拥有“sudo”权限的人都可以通过预先挂起sudo
他们的命令来“作为超级用户”执行某些操作。例如,要apt-get dist-upgrade
以超级用户身份运行,您可以使用:
sudo apt-get dist-upgrade
Run Code Online (Sandbox Code Playgroud)
sudo 方法的好处
使用 sudo,您可以提前选择哪些用户具有 sudo 访问权限。他们不需要记住 root 密码,因为他们使用自己的密码。
如果您有多个用户,您可以通过删除他们的 sudo 权限来撤销一个超级用户的访问权限,而无需更改 root 密码并通知每个人新密码。
您甚至可以选择允许用户使用 sudo 执行哪些命令以及禁止该用户执行哪些命令。
最后,如果存在安全漏洞,在某些情况下它可以留下更好的审计跟踪,显示哪个用户帐户被盗。
Sudo 使使用超级用户权限执行单个命令变得更容易。使用 root 登录,您将永久保留在超级用户 shell 中,必须使用exit
或退出logout
。这可能会导致人们在超级用户 shell 中停留的时间超过必要的时间,因为它比稍后注销和再次登录更方便。
使用 sudo,您仍然可以选择使用以下命令打开永久(交互式)超级用户 shell:
sudo su
Run Code Online (Sandbox Code Playgroud)
...并且这仍然可以在没有任何 root 密码的情况下完成,因为sudo
为su
命令授予超级用户权限。
同样,su -
您可以使用sudo su -
甚至sudo -i
.
但是,这样做时,您只需要注意您是作为每个命令的超级用户。一个很好的安全原则是不要作为超级用户停留超过必要的时间,只是为了减少意外对系统造成某些损坏的可能性(没有它,您只能损坏用户拥有的文件)。
只是为了澄清,如果您选择这样做,您可以为 root 用户提供一个允许以 root 身份登录的密码。我只是想让您了解 Ubuntu 的首选约定,sudo
并尝试解释为什么 Ubuntu 倾向于将这种方法作为默认设置的一些原因。
为什么不允许通过 SSH 进行 root 登录?
即使您的 root 用户确实有密码使您能够以 root 身份登录,禁用从外部直接 root 登录仍然是一个很好的安全做法,例如在 SSH 中。用户必须su -
或sudo
在初始登录之后是合理的。
这样做的潜在好处主要与安全相关:
它通过消除远程暴力破解 root 密码的可能性来减少攻击向量。互联网上的服务器经常被试图通过 SSH 强行破解 root 密码的尝试所包围。
它创建了一个更好的审计跟踪,这样即使在攻击者后来确实获得超级用户权限的违规事件中,您也可以看到谁的用户帐户被用于获得访问权限。
小智 5
我可以补充一点,Windows 中的管理员和 Unix 中的 root 之间存在差异。管理员在系统中还是有一些限制的,root 没有任何限制。Windows 中 root 的正确模拟是系统用户。
在 root/System 下使用 PC 的坏处是你可能会在没有操作系统警告的情况下意外破坏任何东西。