it-swarm.cn

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

即使我的非特权用户受到威胁,我也希望安全地拥有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身份登录?
124
stribika

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

像您描述的那样,LD_PRELOAD和PATH攻击假设已经有一个攻击者可以访问您的帐户,或者至少可以访问您的dotfile。 Sudo不能很好地防止这种情况的发生-毕竟,如果他们拥有密码,则无需稍后欺骗您...他们可以只使用Sudonow

重要的是要考虑Sudo最初设计的目的:特定命令(例如用于管理打印机的命令)的委派给“子管理员”(也许是实验室中的研究生)而不会完全放弃root。我现在看到的最普通的用法是使用Sudo来做[everything),但这不一定是程序要解决的问题(因此,配置文件语法异常复杂)。

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

请记住,大多数“网络犯罪”来自内部。借助所描述的root密码情况,很难找到谁做了什么-带有远程日志记录的Sudo可以很好地解决这一问题。

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

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

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

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

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

105
mattdm

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

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

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

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

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

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

30

安全的OpenWall GNU/*/Linux发行版的设计人员还对su(成为root用户)和Sudo发表了批评。您可能对阅读此线程感兴趣:

...不幸的是su和Sudo都有些微妙,但从根本上来说是有缺陷的。

除了讨论su的缺陷和其他问题外,Solar Designer还针对使用su的特定原因:

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

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

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

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

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

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

您还必须处理...

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

10

您似乎在假设使用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或其他环境变量(除非您专门将它们添加到应保留的变量白名单中)。

4
Cedric

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

4
Šimon Tóth

我只想添加一些话题。 (对于该主题,请在此处选中“/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

3
user5520

如果担心的是可以使用受损的用户帐户来嗅探用于Sudosu的密码,则对Sudosu

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

2
nowen

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

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

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

0
cornelinux