int kill(pid_t pid, int sig);
的{p> man说:
如果pid等于-1,则将sig发送到每个进程 调用进程有权发送信号,但进程1除外 (init),但见下文。
这是否意味着如果我的程序以root权限运行并且它意外地(由于内存损坏或黑客攻击)提供-1
作为pid
参数 - 这将导致整个DoS系统
如果是这样,是否建议在调用此潜在的灾难性呼叫之前始终对pid
参数值进行双重检查? (只是说')
答案 0 :(得分:0)
这是否意味着如果我的程序使用root权限运行它 意外(由于内存损坏或黑客攻击)提供-1作为pid 参数 - 这将导致整个系统的完整DoS?
是的,这种情况是可能的。但它发生的可能性非常小。因为没有以root权限运行的程序会做这样的事情。如果恶意用户/二进制文件以某种方式获得了root权限,那么发送信号只是其中一个问题。
如果是这样,建议始终对pid进行双重检查 在调用这个潜在的灾难性呼叫之前的参数值?
那只是超级偏执的想法。有数以千计的方法可以进行灾难性的活动。您可能会担心:
如果没有在系统启动时运行的恶意守护程序,该怎么办:
kill(-1, SIGKILL);
您如何知道您所创建的库函数是否不会调用reboot(2)
并重启您的系统?
等
此外,PID不仅仅是用户提供的需要消毒的值。 PID主要是使用系统调用或库调用在程序中获取的值。所以“意外”使用-1的几率为零。基本上,你某人/程序拥有root权限并决定搞砸你的系统,那么你无能为力。