鉴于 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 读取密码,您就无法使用调试器提取它们。)