当时刚接触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) |