为什么在没有 root 权限的情况下使用“lsof”时,我自己的 virtualbox 进程的 TCP 连接会被排除?

为什么在没有 root 权限的情况下使用“lsof”时,我自己的 virtualbox 进程的 TCP 连接会被排除?

鉴于 virtualboxvm 是我的用户拥有的一个进程,如果我使用,我希望显示 virtualbox 进程的 TCP 连接lsof

考虑以下示例 - 假设我的用户名是 eddy:

$sudo lsof -n -a -i -ueddy`
COMMAND   PID   USER  FD   TYPE DEVICE SIZE/OFF  NODE NAME 
...
VirtualBo 25679 eddy  95u  IPv4 315623      0t0  TCP  192.168.` ... etc.
...

lsof -n -a -i -ueddy为什么当我使用w/o sudo时没有显示上述连接?

答案1

它属于一个特权可执行文件——尽管它现在使用您的 UID/EUID 运行,实际/usr/lib/virtualbox/VirtualBoxVM文件具有“setuid”位设置,这意味着它最初以其“有效”EUID 开始被设置为其他人(文件所有者,大多数情况下为“root”),并且由于它具有特权,您无权检查它。

即使它后来放弃了其有效权限,系统也会假定该进程可能仍在内存中拥有敏感信息并保持对其的保护(或“不可转储”,因为它在崩溃时也不会产生内存转储)。

(例如,sudo同样是一个 setuid 程序;它的进程最初属于您,但具有 root 作为其 EUID,因此您无权检查它的功能,例如,如果它从 /etc/shadow 读取密码,您就无法使用调试器提取它们。)

相关内容