二进制文件“以 root 身份运行”意味着什么以及如何确定进程的它?

二进制文件“以 root 身份运行”意味着什么以及如何确定进程的它?

我听说“以 root 身份运行”的 Linux 程序(在本例中为二进制文件)中的漏洞是危险的,因为例如,如果某些网络/Web 服务器“以 root 身份运行”,则在例如前线数据包解析器,这可能会让攻击者比不“以 root 身份运行”的程序更严重地危害机器。

我熟悉setuid二进制文件,其中setuid设置了位,这意味着即使二进制文件由用户 A 运行,它也会在不同用户的上下文中运行。但我想我的困惑在于措辞——程序如何“以 root 身份运行?”它本身是否process采用机器上的根用户身份?为什么process以 root 身份运行的进程更危险?我如何才能准确地知道哪些进程在我的 Linux 系统上以 root 身份运行?我看到例如一些可执行文件是拥有的root用户或组,但这是否意味着本质上,当它们被程序加载器加载到内存中时,它们总是“以 root 身份运行”?

答案1

程序不“以 root 身份运行“!
当程序是……程序时,root(在此上下文中)是用户。

  • 用户以 root(用户)身份运行程序。
  • 非root用户以(如果他们是)root(用户)身份运行程序。

在这种情况下,用户(无论其真实身份) 被认为具有与 root 用户相同的权限。
因此,该程序将能够杀死/更改root拥有的进程的优先级,相对于root的访问权限访问文件/目录/设备节点,并利用更有利的安全限制。

如果出现以下情况,可能会出现这种情况:

  • 该程序是 root 拥有的可执行文件,其执行时设置用户 ID放,
  • 如果某个用户使用启动该程序sudo
  • 当然,如果 root 用户启动了该程序。

a 的第一列ps -ef将告诉您有效的系统上运行的所有进程的所有者。如果你能读懂然后,该进程代表具有 root 权限的用户运行。

由于上面列出的功能,这具有潜在的危险。如果该程序有错误或者任何类型的程序成功地利用了它的某些漏洞,那么它很可能会不恰当地使用 root 的权限。

另请注意,如果使用 root 权限启动的程序可以删除它们setuid系统调用并最终使用以下命令在某个时刻重新获得这些特权seteuid系统调用。
因此,进程的所有者在进程的整个生命周期中不一定是固定的。

答案2

当人们说“以 root 身份运行”时,他们指的是以下任何或所有情况:

  • 分配有 setuid 位的程序由用户 A 运行。
  • 由操作系统设置为守护进程运行的程序。
  • 通过隐藏在检测范围内的内核 root 工具包以 root 身份运行的程序。

最常见的情况可能是守护进程,使用可利用的代码。例如 OpenSSH 守护程序或 Apache 等其他服务器中的漏洞。

相关内容