获得root权限最安全的方法是:sudo、su还是login?

获得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 身份登录?

答案1

安全总是需要做出权衡。就像众所周知的位于海底安全、未插电的服务器一样root最多如果根本无法访问它,那么它是安全的。

您所描述的 LD_PRELOAD 和 PATH 攻击假设攻击者已经可以访问您的帐户,或者至少可以访问您的点文件。 Sudo 根本不能很好地防范这种情况——毕竟,如果他们知道你的密码,以后就不需要再欺骗你了……他们可以使用sudo 现在

重要的是要考虑 Sudo 最初设计的目的:委托具体的命令(如管理打印机的命令)发送给“子管理员”(可能是实验室的研究生),而无需完全放弃root权限。使用 sudo 来做一切是我现在看到的最常见的用途,但这不一定是程序要解决的问题(因此配置文件语法极其复杂)。

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

请记住,大多数“网络犯罪”都来自内部。根据所描述的 root 密码情况,很难追踪谁做了什么——带有远程日志记录的 sudo 可以很好地处理。

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

使用密码根本不因为 SSH 是危险的,因为我见过的 90% 的现实系统泄露中都安装了密码嗅探木马 ssh 守护进程。最好使用 SSH 密钥,并且这也可以成为远程 root 访问的可行系统。

但问题是现在您已经从密码管理转向密钥管理,并且 ssh 密钥实际上不太易于管理。没有办法限制副本,如果有人确实制作了副本,他们可以尝试暴力破解密码。您可以制定政策规定密钥必须存储在可移动设备上,并且仅在需要时安装,但没有办法强制执行 - 现在您引入了可移动设备丢失或被盗的可能性。

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

不过,这对于家庭来说可能有点过分了,因为在家庭中,只要遵循合理的安全实践,就不会遇到真正的管理麻烦。

答案2

这是一个非常复杂的问题。马特德姆 已经涵盖了很多要点

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

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

我怀疑 Ubuntu 的决定部分是为了简单性(只需记住一个密码),部分是为了共享计算机(企业或家庭)上的安全性和凭证分发的方便性。

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

限制成为 root 的方式并不总是有利于安全。还记得第三位成员吗安全三合会保密,正直,可用性。将自己锁定在系统之外可能会阻止您对事件做出响应。

答案3

安全 OpenWall GNU/*/Linux 发行版的设计者也对su(成为 root)和sudo.您可能有兴趣阅读此主题:

...不幸的是 su 和 sudo 都有微妙但根本上的缺陷。

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

是的,系统管理员通常会选择“su root”而不是以 root 身份登录。当被问及时,那些实际上能够提出这种偏好的有效理由的人会提到通过这种方法实现的更好的问责制。是的,这确实是支持这种方法的一个很好的理由。但它也是唯一的一个。 ...(阅读更多)

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

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

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

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

(对于带有 X 的桌面,这会变得更加棘手。)

您还绝对必须处理...

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

答案4

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

相关内容