8.11 进程控制_更改用户ID和组ID
来源:互联网 发布:手机版淘宝网首页 编辑:程序博客网 时间:2024/04/27 07:49
在UNIX系统中,特权是基于用户和组ID的。
- #include <unistd.h>
- int setuid(uid_t uid);
- int setgid(gid_t gid);
返回值:若成功则返回0,若出错则返回-1
setuid函数设置实际用户ID和有效用户ID,setgid函数设置实际组ID和有效组ID。
关于谁能更改ID有若干规则:
- 若进程具有超级用户特权,则setuid函数将实际用户ID、有效用户ID,以及保存的设置用户ID设置为uid。
- 若进程没有超级用户特权,但是uid等于实际用户ID或保存的设置用户ID,则setuid只将有效用户ID设置为uid。不改变实际用户ID和保存的设置用户ID。
- 如果上面两个条件都不满足,则将errno设置为EPERM,并返回-1。
在这里假定_POSIX_SAVED_IDS为真。如果没有提供这种功能,则上面所说的关于保存的设置用户ID部分都无效。
关于内核所维护的三个用户ID,还要主义下列几点:
- 只有超级用户进程可以更改实际用户ID。通常,实际用户ID是在用户登录时,由login(1)程序设置的,而且永远不会改变它。
- 仅当对程序文件设置了设置用户ID位时,exec函数才会设置有效用户ID。任何时候都可以调用setuid,将有效用户ID设置为实际用户ID或保存的设置用户ID。
- 保存的设置用户ID是exec复制有效用户ID而得来的。
getuid和geteuid函数只能获得实际用户ID和有效用户ID的当前值,而不能获得所保存的设置用户ID的当前值。
Figure 8.18. Ways to change the three user IDs
ID
exec
setuid(uid)
set-user-ID bit off
set-user-ID bit on
superuser
unprivileged user
real user ID
unchanged
unchanged
set to uid
unchanged
effective user ID
unchanged
set from user ID of program file
set to uid
set to uid
saved set-user ID
copied from effective user ID
copied from effective user ID
set to uid
unchanged
- #include <unistd.h>
- int setreuid(uid_t ruid, uid_t euid);
- int setregid(uid_t rgid, uid_t egid);
- int seteuid(uid_t uid);
- int setegid(uid_t gid);
返回值:若成功返回0,若出错则返回-1
setregid函数是交换实际用户ID和有效用户ID的值。seteuid和setegid它们只更改有效用户ID和有效组ID。
一个非特权用户可将其有效用户ID设置为其实际用户ID或其保存的设置用户ID。对于一个特权用户,则可将有效用户ID设置为uid。
Figure 8.19. Summary of all the functions that set the various user IDs
- 8.11 进程控制_更改用户ID和组ID
- 进程控制之更改用户ID和组ID
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
- 进程的基本属性:进程ID、父进程ID、进程组ID、会话和控制终端
- 更改用户id
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- Linux进程的实际用户ID和有效用户ID
- 强大的BugTracker工具——Mantis环境搭建系列四(Mantis)
- 使SWT的Table根据TableItem显示Tooltip -转摘
- 74系列芯片功能说明
- 74系列芯片功能说明
- 玩魔方
- 8.11 进程控制_更改用户ID和组ID
- java远程控制详解-转载
- 请大家帮个忙?
- Femtocontainer — The IoC container built into the JDK
- 去了杭电
- 框架页面查询功能的实现
- AS3 去空格函数 trim
- doc 的命令(全屏,进文件啊,等等...)
- junit源码学习-交织的TestCase和TestResult