快捷搜索:

solaris下究竟如何使用setuid/seteuid/setreuid

Q: 我被setuid/seteuid/setreuid搞疯了,到底怎么应用它们?

A: 下面是Solaris 7的setuid(2)手书页

系统调用 setuid(2)

名字

setuid、setegid、seteuid、setgid - 设置UID和GID

择要#include

#include

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等不在合法范围内

EPERM 当前EUID不为0,形参指定不相符前面描述

属性___________________________________________________________

| ATTRIBUTE TYPE | ATTRIBUTE VALUE |

| ____________________________|_____________________________|

| MT-Level | setuid() and setgid() and|

| | Async-Signal-Safe |

|_____________________________|_____________________________|

参看

intro(2)、exec(2)、getgroups(2)、getuid(2)、attributes(5)

stat(5)

A: 下面是Solaris 7的setreuid(2)手书页

系统调用 setreuid(2)

名字

setreuid - 设置RUID、EUID

择要#include

int setreuid ( uid_t ruid, uid_t euid );描述

setreuid()设置RUID、EUID,终极可能导致SUID改变。

假如形参ruid为-1,RUID不变。假如形参euid为-1,EUID不变。形参ruid、euid可以不合。

假如EUID为0,形参ruid、euid可所以随意率性合法值。

假如EUID不为0,形参ruid可以即是当前RUID、当前EUID,形参euid可以即是当前RUID、当前EUID、当前SUID。

两种环境下,假如RUID被成功改动(形参ruid不为-1),或者EUID被成功改动(形参euid不为-1)并且不即是终极RUID,则终极SUID被设置成终极EUID。

返回值

0 成功

-1 掉败,errno被设置

差错值

EINVAL 形参ruid、euid等不在合法范围内。

/usr/include/limits.h中定义了合法范围

[0, 2147483647(UID_MAX)]。

EPERM 当前EUID不为0,形参指定不相符前面描述。

用法

您可能还会对下面的文章感兴趣: