获得root特权的最安全方法是:sudo,su或login?


120

即使我的非特权用户受到威胁,我也希望安全地拥有root帐户。

在Ubuntu上,默认情况下只能出于“安全原因”使用sudo。但是,我不确定它是否比在文本模式控制台上使用登录名更安全。如果攻击者可以以我的普通用户身份运行代码,则可能会出错。例如,添加别名,向我的PATH添加内容,设置LD_PRELOAD和X11键盘记录器,仅举几例。我唯一看到的好处是超时,因此我永远不会忘记注销。

我对su也有同样的疑问,但是它甚至没有时间限制。某些操作(尤其是IO重定向)对su更为方便,但是从安全角度而言,这似乎更糟。

在文本模式控制台上登录似乎是最安全的。由于它是由init启动的,因此如果攻击者可以控制PATH或LD_PRELOAD,则他已经是root。X上运行的程序无法拦截按键事件。我不知道X上运行的程序是否可以拦截[ctrl] + [alt] + [f1](并打开一个看起来像控制台的全屏窗口)或就像Windows上的[ctrl] + [alt] + [del]一样安全。除此之外,我看到的唯一问题是缺少超时。

那我想念什么吗?为什么Ubuntu家伙决定只允许sudo?如何提高任何一种方法的安全性?

SSH呢?传统上,root用户无法通过SSH登录。但是使用上述逻辑并不是最安全的做法:

  • 通过SSH允许root
  • 切换到文字模式
  • 以root身份登录
  • SSH到另一台机器
  • 以root身份登录?

在您的ssh解决方案中,您是否意味着要从另一个盒子中放入可能受感染的盒子中?1 /如果是,那么,按照您的思路,必须确保其他盒子不被破坏,然后再使用它。2 /如果否,那么您有同样的问题。
asoundmove 2011年

@asoundmove:我的ssh情况有4个用户:root @ hosta,root @ hostb,stribika @ hosta,stribika @ hostb。假设攻击者可以同时运行两个stribika(毕竟他们都运行了flashplugin,无论如何),我仍然希望安全的root用户访问权限。因此,这两个盒子可能会部分受损。
stribika 2011年

Answers:


105

安全总是要权衡取舍。就像众所周知的服务器一样,如果根本无法访问它,则该服务器位于海底安全,未插电的地方,root将是安全的。

像您描述的那样,LD_PRELOAD和PATH攻击假设已经有一个攻击者可以访问您的帐户,或者至少可以访问您的dotfile。须藤不保护是很清楚的话-如果他们有自己的密码,毕竟,没有必要试图欺骗你以后......他们可以只使用sudo 现在

重要的是要考虑Sudo最初是为什么设计的:将特定命令(例如管理打印机的命令)委派给“子管理员”(也许是实验室中的研究生)而无需完全放弃root。我现在看到的最普遍的用法是使用sudo来完成所有操作,但这并不一定是程序要解决的问题(因此,配置文件语法非常可笑)。

但是,sudo-for-unrestricted-root 确实解决了另一个安全问题:root密码的可管理性。在许多组织中,它们往往像糖果一样被传递,写在白板上,并永远保留下去。这留下了很大的漏洞,因为撤销或更改访问权限成为了一个大生产量。即使跟踪哪台计算机具有什么密码也是一个挑战-更不用说跟踪谁知道哪台计算机了。

请记住,大多数“网络犯罪”来自内部。借助所描述的root密码情况,很难找到谁做了什么-远程日志中的sudo处理得很好。

在您的家庭系统上,我认为更多的是不必记住两个密码的便利。很可能许多人只是简单地将它们设置为相同,或者更糟的是,最初将它们设置为相同,然后让它们不同步,从而使root密码失效。

对于SSH完全使用密码是很危险的,因为密码嗅探的特洛伊木马ssh守护程序已放置在大约 90%的真实系统漏洞中。使用SSH密钥要好得多,而且这对于远程根访问也是一个可行的系统。

但是现在的问题是,您已经从密码管理转移到了密钥管理,并且ssh密钥并不是非常易于管理。没有办法限制复制,如果有人确实复制了副本,他们就会尝试用暴力破解密码短语。您可以制定政策,要求密钥必须存储在可移动设备上,并且仅在需要时才安装,但是无法强制执行—现在,您介绍了可移动设备丢失或被盗的可能性。

最高的安全性将通过一次性密钥或基于时间/计数器的加密令牌来实现。这些可以通过软件来完成,但是防篡改的硬件甚至更好。在开源世界中,有WiKiDYubiKeyLinOTP,当然还有专有的重量级RSA SecurID。如果您是中型或大型组织,或者甚至是一个注重安全的小型组织,我强烈建议您研究其中一种用于管理访问的方法。

但是,如果您遵循明智的安全实践,那么对于家庭来说,这可能算是过高了,而您实际上并没有管理上的麻烦。


我会接受这个作为答案,因为它可以使Ubuntu开发人员在将sudo设置为默认方法时的思考变得更加清晰。远程日志记录似乎也是个好主意,考虑到我已经在使用syslog-ng,设置起来应该不会太困难,因此我的所有计算机都将日志记录到所有其他计算机上。我将坚持目前切换到文本模式并从那里登录以进行完全root访问的做法。委派部分权限当然是使用sudo的好方法,而我从未考虑过。
stribika 2011年

7
sudo与Windows Vista中的“用户帐户控制”非常相似。两者的设计实际上都不是为了增加安全性,而是实际上是使其更容易以受控方式降低安全性。但是,由于它们使以低摩擦方式临时提升特权变得更加容易,因此您无需长时间以提升特权运行,从而提高了安全性。(这在Unix中并不是什么大问题,但是我记得在Windows中连续几天运行Administrator,只是因为切换非常痛苦。)
JörgW Mittag

密码嗅探木马ssh守护进程?如果它们可以替换ssh守护程序,则它们已经具有root用户。
psusi 2011年

@psusi:是的,在系统上;在多个系统之间共享密码(通过目录服务)的环境中,这种折衷很容易以这种方式传播。即使是单个系统,在检测到漏洞后重新安装后,重新配置每个人的密码也很麻烦。
mattdm

1
Ops报告卡root的最后一项还提到了更改公司所有密码的潜在困难,非常值得一读。
通配符

30

这是一个非常复杂的问题。mattdm 已经涵盖了许多要点

在su和sudo之间,当您考虑一个用户时,su更加安全,因为找到密码的攻击者无法立即获得root特权。但是,攻击者所需要的只是找到一个本地根漏洞(相对不常见)或安装特洛伊木马程序,然后等待您运行su。

当有多个用户时,Sudo甚至比控制台登录更具优势。例如,如果系统配置了远程防篡改日志,则始终可以找出谁最后运行了sudo(或谁的帐户被盗),但您不知道是谁在控制台上键入了root密码。

我怀疑Ubuntu的决定部分是出于简单性的考虑(仅记住一个密码),部分是出于安全性和易于在共享机器(企业或家庭)上分发凭据的考虑。

Linux没有用于身份验证的安全注意密钥或其他安全用户界面。据我所知,甚至OpenBSD都没有。如果您担心root访问,则可以完全禁用正在运行的系统的root访问:如果要成为root用户,则需要在引导加载程序提示符下键入一些内容。显然,这并不适合所有用例。(* BSD的安全级别按以下方式工作:在高安全级别上,有些事情您必须重新启动,例如降低安全级别或直接访问已安装的原始设备。)

限制人可以扎根的方式并不一定能获得安全性。记住安全三合会的第三个成员:机密性完整性可用性。将自己锁定在系统之外可以阻止您对事件做出响应。


如果他们可以找到您的密码,那么他们可以轻松地找到根密码。您也可以将sysrq-k用作安全注意序列。
psusi 2011年

Linux具有安全注意事项,请查看内核文档
btshengsheng

@btshengsheng Linux 可以具有“安全注意密钥”,但是由于可以对其进行配置,因此您不确定它可以在任何特定计算机上运行。它也取决于键盘布局,因此可以通过重新分配其中一个键来绕过它。它被称为 “安全注意键”,但不完全符合要求。
吉尔斯(Gilles)2016年

9

安全的OpenWall GNU / * / Linux发行版的设计者还对su(成为root)和表示了批评sudo。您可能对阅读此主题感兴趣:

...不幸的是,su和sudo都存在一些细微但从根本上来说是有缺陷的。

除了讨论su其他方面的缺陷外,Solar Designer还针对使用的一个特定原因su

是的,“ su root”而不是root登录通常是sysadmin的常识。少数人在被问到时能提出这种偏爱的正当理由,他们会说这种方法实现了更好的问责制。是的,这确实是支持此方法的一个很好的理由。但这也是唯一的。...(阅读更多)

在他们的发行版中,他们“在默认安装中完全摆脱了SUID根程序”(即,包括su;并且他们不使用此功能):

对于服务器,我认为人们需要重新考虑,并且在大多数情况下,不允许用户调用su和sudo。与以非root用户和root用户直接登录(两个单独的会话)相比,旧的“以非root用户身份登录,然后以su或sudo身份登录到root”系统管理员“智慧”并没有增加安全性。相反,从安全角度来看,后一种方法是唯一正确的方法:

http://www.openwall.com/lists/owl-users/2004/10/20/6

(为了对多个系统管理员负责,系统需要像Owl一样支持拥有多个root特权帐户。)

(对于带有X的台式机,这将变得更加棘手。)

您还必须处理...

顺便说一句,它们将替换为suloginmsulogin以允许使用多个根帐户进行设置:msulogin进入单用户模式时,允许一个用户也输入用户名(并保留“问责制”)(此信息来自此俄语讨论) 。


1
对于基本上是防火墙的系统,这没多大好处,但是,如果您打算运行(例如,随机运行)mysql / postgresql / bind / powerdns / apache和生产系统中的其他程序,则可以开始运行遇到问题时,就像用X描述的那样。本质上,他们已经在一定程度的安全性上交换了很多可用性;由系统管理员决定这是否是一个公平的权衡。就个人而言,我会坚持使用Debian。
Shadur

4

您似乎假设使用sudo始终保留环境变量,但情况并非总是如此。这是sudo联机帮助页的摘录:

有两种不同的方法来处理环境变量。默认情况下,env_reset sudoers选项处于启用状态。这将使命令在最小环境下执行,该环境包括TERM,PATH,HOME,SHELL,LOGNAME,USER和USERNAME,以及env_check和env_keep sudoers选项允许的调用过程中的变量。实际上有一个环境变量白名单。

但是,如果在sudoers中禁用了env_reset选项,则env_check和env_delete选项未明确拒绝的任何变量将从调用过程中继承。在这种情况下,env_check和env_delete的行为类似于黑名单。由于不可能将所有潜在危险的环境变量列入黑名单,因此建议使用默认的env_reset行为。

在所有情况下,都将删除以()开头的值的环境变量,因为它们可以解释为bash函数。当以root用户身份运行时,sudo允许或拒绝的环境变量列表包含在sudo -V的输出中。

因此,如果env_reset启用(默认设置),则攻击者无法覆盖您的PATH环境变量或其他环境变量(除非您专门将其添加到应保留的变量白名单中)。


1
我的意思是,如果攻击者可以控制我的路径,那么他可以使我运行任何东西,而不是真正的/ usr / bin / sudo。例如,/ tmp / sudo Password: 会在我键入内容时不显示任何内容,将我键入的内容发送给他,说密码错误,然后执行真正的sudo。
stribika 2011年

嗯,我想在那种情况下,您可以直接运行/ usr / bin / sudo而不是依靠shell为您找到它。但是你是对的,这是我没想到的问题。
Cedric

1
@CedricStaub:据我所知,似乎没有人想到这一点。我可以给出完整的路径,但可以尝试以下方法:alias /usr/bin/sudo="echo pwned"除了涉及大量程序(X,xterm,shell)外,任何程序都可以窃取密码。这就是为什么我说安全切换存在太多问题。
stribika 2011年

1
你试过了吗?我做了:bash: alias: `/usr/bin/sudo': invalid alias name
maaartinus 2011年

@maaartinus:有趣。它在ZSH中工作。
2011年

4

最安全的方法是使用(至少)2048个长密钥(禁用密码登录)使用物理设备存储密钥的ssh登录。


1
当然可以,但是从根到根或从无特权到无特权然后切换到root?(为了安全起见,我实际上使用的是4096位密钥。到处都不支持较大的密钥。)
stribika 2011年

@stribika好吧,两个。如果机器受到威胁,您仍然不要松开钥匙。这样可以防止扩散(密码最大的问题)。
Let_Me_Be

3

我只想添加一些话题。(对于该主题,请在此处选中“ / bin / su-”)

我认为上述“安全性”也应与我们要保护的实际数据相关联。

如果我们要确保安全,它将并且应该有所不同:my_data,my_company_data,my_company_network。

通常,如果我谈论安全性,那么我也谈论“数据安全性”和备份。我们还可以添加容错系统等。

鉴于此,我认为整个安全性是可用性,“数据安全性”与实现安全系统所需的努力之间的平衡。

Ubuntu的目标用户是(而且仍然是)最终用户:Sudo是默认用户。

Fedora是RedHat的免费版本,而RedHat则是面向服务器的:Sudo以前被禁用。

对于其他发行版,我没有直接信息。

我现在使用的大部分是fedora。作为旧式用户,我从未输入过“ su”。但是即使我不是打字员,我也可以在很短的时间内输入“ / bin / su-”。PATH变量..应该没有问题(我输入路径)。原则上,“-”(减号)也应删除我的用户环境变量,并仅加载根变量。即避免一些额外的麻烦。可能也是LS_PRELOAD。

对于其余的部分,我猜@mattdm非常精确。

但让我们将其放在正确的框中。假设脚本智能工具包可以访问我的数据。您认为他要怎么办?-发布我的照片?我的?-试图找出我的女友名字,并告诉她我访问了色情网站?

在单个用户图片中,两种最坏的情况是:-孩子删除了我的所有数据:出于娱乐或错误-孩子使用我的机器对其他实体进行了进一步攻击。或类似目标。

对于第一种情况,我在上面提到过,在备份上要比在网络安全上投入更多的精力。是的,您保存。我的意思是硬件崩溃没有什么不同。

第二种情况更加微妙。但是有关于这些活动的信号。无论如何,您都可以做到,但是我不会配置家用PC免受恐怖袭击!

我将跳过其他情况。

欢呼F


2

如果担心的是可以使用受损的用户帐户来嗅探用于sudo或的密码su,则对sudo和使用一次性密码su

您可以为远程用户强制使用密钥,但是出于合规性目的,密钥可能不会通过。设置需要双重身份验证的SSH网关盒,然后从那里允许密钥使用可能会更有效。这是有关这种设置的文档:使用WiKID两因素身份验证保护SSH部署


0

您还可以查看privacyIDEA,它不仅使您可以使用OTP登录到计算机(或执行su / sudo),还可以脱机进行OTP。

此外,它能够管理您的SSH密钥。即,如果您有多台计算机和几个root用户,则所有SSH密钥都集中存储。因此,如果密钥不再受信任,则很容易“撤消” /删除SSH密钥。

当然,有组织任务和工作流可以保护系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.