59. Solaris下究竟如何使用setuid/seteuid/setreuid
Q: 我被setuid/seteuid/setreuid搞疯了,到底怎么使用它们?
A: 下面是Solaris 7的setuid(2)手册页
系统调用 setuid(2)
名字
setuid、setegid、seteuid、setgid - 设置UID和GID
摘要
#include <sys/types.h>;
#include <unistd.h>;
int setuid ( uid_t uid );
int seteuid ( uid_t euid );
int setgid ( gid_t gid );
int setegid ( gid_t egid );
描述
seteuid()只设置EUID。如果当前EUID为0,形参euid任意指定。否则
形参euid应该是RUID、EUID、SUID之一。无论如何,最终只影响当前
EUID。
setegid()只设置EGID。如果当前EUID为0,形参egid任意指定。否则
形参egid应该是RGID、EGID、SGID之一。无论如何,最终只影响当前
EGID。
登录时,RUID、EUID、SUID设置成登录ID。
进程调用exec(2)执行一个程序文件,考虑两种情况:
a. 程序文件set-user-id,则相应进程EUID、SUID被设置成这个程序
文件的属主ID。
程序文件set-group-id,则相应进程EGID、SGID被设置成这个程
序文件的属组ID。
b. 程序文件没有set-user-id,则相应进程EUID、SUID不变。
程序文件没有set-group-id,则相应进程EGID、SGID不变。
如果当前EUID为0,任意调用setuid()同时设置RUID、EUID、SUID。
如果当前EUID为0,任意调用setgid()同时设置RGID、EGID、SGID。
如果当前EUID不为0,形参uid等于RUID或者SUID,调用setuid()后当
前EUID被设置成形参uid,RUID、SUID不受影响。
如果当前EUID不为0,形参gid等于RGID或者SGID,调用setgid()后当
前EGID被设置成形参gid,RGID、SGID不受影响。
返回值
0 成功
-1 失败,errno被设置
错误值
EINVAL 形参uid、gid等不在合法范围内
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 使用 如何 究竟 EUID 当前 ruid euid setuid 特权 设置 |
注册
个人空间
