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

为什么安装“nethogs”时没有设置 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

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

答案1

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

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

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

要求用户拥有 root 访问权限已经避免了这些问题,或者将它们委托给sudo.当您已经是 root 时,就不用担心特权提升了。一般来说,程序不会默认设置 setuid,除非它对其功能至关重要,例如passwd.

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

相关内容