Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1924566
  • 博文数量: 261
  • 博客积分: 8073
  • 博客等级: 中将
  • 技术积分: 2363
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-10 15:23
文章分类

全部博文(261)

文章存档

2013年(1)

2012年(1)

2011年(50)

2010年(34)

2009年(4)

2008年(17)

2007年(55)

2006年(99)

分类:

2007-11-09 12:10:13

    suid其实是进程访问资源的一种控制方式.一般来说,一个进程只能访问执行该进程的用户所拥有的资源,

而如果设置了一个可执行文件的suid,那么就可以访问改可执行文件所有者的资源了.

    当执行一个进程时,涉及到四个权限控制uid(执行该程序的用户id), guid(执行该程序的组id), euid

(有效用户id), egid(有效组id).有效**id控制着该进程是否有访问某资源的权限.

    例如,以AMD登录,其组为AMD,其uid = 2, gid = 2, 其创建了一个程序testSuid.c和一个常规文件

testSuid.txt, testSuid.c为打开testSuid.txt并读出内容写到标准输出.利用ls命令可以看到如下结

果:

-rwxr-wr-w 1 AMD AMD .... testSuid.c
-rw----r-- 1 AMD AMD .... testSuid.txt
-rwxr-wr-w 1 AMD AMD .... testSuid

这是testSuid.txt的设置为euid = 2 的用户可以读写该文件, 其他用户可以读该文件(euid为非2).

编译正常执行后会成功返回:

this file is created by AMD

    当以haha登录后(uid = 3, gid = 3),执行testSuid命令,也可以成功返回

this file is created by AMD

    因为此时testSuid.txt设置为其他用户可以读取,所以其他用户读取没有什么问题.

    以AMD登录并修改testSuid.txt(chmod 600 testSuid.txt)

-rw------- 1 AMD AMD .... testSuid.txt

    这表明只有euid = 2的用户才能读写该文件.这时再以haha登录,执行testSuid,则不能访问成功,查看

errno,是权限拒绝.

    整个过程是这样的:

    当以AMD执行testSuid时, euid = uid = 2, eguid = uid = 2, 满足testSuid.txt的访问权

限(AMD是testSuid.txt的所有者), 当以haha执行testSuid时,euid = uid = 3, eguid = uid = 3

由于 testSuid.txt设置了其他人可以访问,所以也没有问题.当修改了testSuid.txt为只有所有者可以读

写:

-rw------- 1 AMD AMD .... testSuid.txt

haha执行testSuid就会返回权限拒绝(因为只有euid = 2的用户才可以读写该文件, 但此时euid = 3).

    这时,如果设置了testSuid可执行文件的suid位:

    chmod 4755 testSuid

    -rwsr-wr-w 1 AMD AMD .... testSuid

    没有设置可执行文件的suid时,euid = uid, egid = gid.

    当设置了可执行文件的suid时,euid = 可执行文件的所有者id, egid = 可执行文件的所有组id

    当haha执行testSuid时, 由于设置了suid位, uid = 3, gid = 3, 而euid = 2, egid = 2,所以

可以访问testSuid.txt文件,成功读出内容.
阅读(1214) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-03-31 09:36:37

好东西 斑竹很强阿