Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1176263
  • 博文数量: 115
  • 博客积分: 950
  • 博客等级: 准尉
  • 技术积分: 1734
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-08 20:46
文章分类

全部博文(115)

文章存档

2015年(5)

2014年(28)

2013年(42)

2012年(40)

分类: LINUX

2012-03-15 21:17:37

当时刚接触setuid命令时候,man了一下,还有一个sibling function:seteuid。effective uid,看完不知甚解。(本人水平有限,吼吼)

具体有关uid,euid可以参考APUE中的
8.11章节内容。
uid分为real user ID, effective user ID, and saved set-user-ID

对于setuid(id)命令:

1. 如果是超级用户,使用命令后会把所有三种用户ID都设置为id

2. 如果不是超级用户,判断id值是否和三种ID中任意一个相等:如果是,设置effective uid为id;如果不与任一个相等,返回error。

对于seteuid(id)命令:
 1. 如果是超级用户,设置effective UID的值为id
 2. 如果是普通用户,同样先判断id是否和三个中任一个相等:如果是, 设置effective UID为id;否则返回error。

对于setreuid(rid, eid)命令:
 1. 如果是超级用户,设置real UID和effective UID的值分别为rid和eid
 2. 如果是普通用户,先判断是否和三者中任一相等:如果是,设置real UID和effective UID值分别为rid和eid(如果rid和eid任意值为-1表示该UID不进行设置);否则返回error

一般情况下,三种UID值都相等。但如果程序设置
set-user-ID bit为on时候,会出现不相等的情况(使用chmod +s来开启)
目前系统用户martin id=500
某程序比如test的owner test_user id=505,而且test使用chmod +s设置
set-user-ID bit为on
如此martin运行test_user的test程序时候,程序的UID会是:
real uid=500, effective uid=505, saved uid=505.
这时候在test程序中,你可以使用500或者505作为参数调用setuid,seteuid,setreuid等程序。

real uid只会在超级用户使用setuid时候设置。
effective uid会在
1. 使用exec类函数时候设置:如果设置了set-user-id bit,其值为启动的程序的owner uid;否则则是调用者的uid
2. 使用setuid、seteuid、setreuid函数时候设置(普通用户、超级用户都可以)
save uid则是在
1. 使用exec类函数是从effective uid中copy得到。
2. 超级用户使用setuid命令设置


阅读(2219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~