红联Linux门户
Linux帮助

Linux下执行ping命令创建得到的进程的有效用户不是root

发布时间:2016-02-18 15:43:06来源:linux网站作者:AllInCode

一、问题描述
Linux下的"/bin/ping"文件的权限设置如下所示:

Linux下执行ping命令创建得到的进程的有效用户不是root

那么按照SUID位的定义,如果某个普通用户(作者使用dsl用户)执行ping命令,那么使用
ps -o args -o euser -e | grep 'ping'
命令来查看执行ping命令得到的进程的有效用户,结果应该是root
而实际的结果如下图所示:

Linux下执行ping命令创建得到的进程的有效用户不是root


二、原因分析
ping进程需要打开socket,这个需要root权限。但是在ping的内部实现中,一旦打开socket之后,ping进程就会把自身进程的有效用户又设置成为实际用户。


参考
ping needs root so it can open a socket in raw mode. That's literally the first thing it does when it starts up:

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
socket_errno = errno;

That's the only thing it needs root for, so like many programs, it immediately drops its privilege level back to your normal user account:

uid = getuid();
if (setuid(uid)) {
perror("ping: setuid");
exit(-1);
}


本文永久更新地址:http://www.linuxdiyf.com/linux/18183.html