比如你是普通用户testuser
一个文件
-rwsr-sr-x 1 root root 172185 Aug 18 14:09 nx_shutdown
testuser去调用nx_shutdown
在nx_shutdown运行的过程中,
realuser id是testuser
effective user id是root
系统是根据进程的effective user id去决定进程对资源的访问权限的.
但是,如果在nx_shutdown中再用system(cmd)去调用另外一条命令,
相当于用realuser id去进行调用,也就是相当于testuser在执行cmd命令.
而setuid(uid)的作用就是在进程中将realuser id也设置为uid,比如setuid(0)设置为root.
再执行system(cmd)命令,就相当于root在执行cmd命令.
-----------------------------------------------
除了一般的user id 和group id外,还有两个称之为effective 的id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。
一个进程如果没有SUID或SGID位,则euid=uid
egid=gid,分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202,foo用户的uid和gid为
200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问
的限制,其实就是kevin用户对资源访问的权限,和foo没关系。
如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。
SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。
阅读(1401) | 评论(0) | 转发(0) |