linux下提供了一种机制,针对命令,可以给个u+s标记位,最典型的就是命令passwd,如下图所示:
现在假设test3用户要修改密码,他敲passwd命令,如下所示:
查看passwd进程的有效用户id和实际用户id,发现有效用户id是root,表明其进程执行时,具有root权限,这样它才有权限修改密码文件/etc/shadow(该文件属于root)。
后面自己随意写了一个命令,比如叫setuidtest,所属用户也是root,也给u+s权限。我发现将此命令放于/var/run目录下时,实际执行时,进程的有效用户不是root,如下所示:
放到/usr/bin或者/tmp下,有效用户才是root,如下所示:
到底放到哪些目录下才有root权限,哪位大神,请不吝赐教,告知下里面的门道。