为什么没有设置 setuid 位来安装“nethogs”?

ari*_*lCo 3 security setuid

我已经使用nethogs了一段时间了,sudo每次都必须使用,同时ping设置了 setuid 位。今天我为 nethogs 设置了它并且它有效:

$ ls -l $(which nethogs) $(which ping)
-rwxr-xr-x 1 root root  64496 Nov  2  2011 /usr/sbin/nethogs
-rwsr-xr-x 1 root root 44168 May  7 17:21 /bin/ping

$ sudo chmod u+s  $(which nethogs)

$ ls -l $(which nethogs)
-rwsr-xr-x 1 root root 64496 Nov  2  2011 /usr/sbin/nethogs

$ nethogs
Run Code Online (Sandbox Code Playgroud)

你能想到什么理由不这样默认安装吗?

Mic*_*mer 6

ping是 setuid 因为它虽然相当“安全”,但需要能够打开原始套接字。因此它需要CAP_NET_RAW能力,或者是root。

nethogs由于以下几个原因而不同:值得注意的是,它不仅需要对网络堆栈的特权访问,而且还显示有关其他用户的信息。在多用户系统上,您可能不希望任何用户都能看到谁在使用什么。

另一个原因是这nethogs是一个相当复杂的程序。运行 setuid 的程序需要格外安全:例如,缓冲区溢出可能导致任意权限提升。ping需要相当小心以确保安全,甚至可以检测谁实际运行它以使其行为不同(例如,ping -f仅当您实际上是 root 时才有效)。在一个小的非交互式程序中比在像nethogs.

要求用户拥有 root 访问权限已经避免了这些问题,或者将它们委托给sudo. 当您已经是 root 时,就没有(尽可能多)关注特权提升。一般来说,程序不会被设置为默认设置,除非它对它们的功能非常必要,比如passwd.

也就是说,在单用户系统上,或者在您不关心这些问题的系统上,为了您自己的方便而将其设置为 setuid 并不是什么大问题。