Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1260550
  • 博文数量: 264
  • 博客积分: 10772
  • 博客等级: 上将
  • 技术积分: 2325
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-25 11:54
文章分类

全部博文(264)

文章存档

2012年(4)

2011年(51)

2010年(31)

2009年(57)

2008年(51)

2007年(70)

分类: LINUX

2008-08-18 15:22:02

比如你是普通用户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) |
给主人留下些什么吧!~~