用户ID 与 组ID
1 实际ID、有效ID 与保存的设置ID
2 更改用户/组 ID 函数
#include <unistd.h> int setuid(uid_t uid); int setgid(gid_t gid); /* 同时设置实际/有效ID */ int setreuid(uid_t ruid,uid_t euid); int setregid(gid_t rgid,gid_t egid); /* 只更改有效ID */ int seteuid(uid_t uid); int setegid(gid_t gid);
- 若进程具有 root 权限,则 setuid 函数 将实际用户 ID,有效用户 ID 及保存的设置用户 ID 设置为 uid
- 若root权限进程要只设置实际用户ID或有效用户ID,则需使用 setreuid/seteuid 函数
- 若进程无 root 权限,但uid等于 实际用户ID或保存的设置用户ID,则 setuid 只将 有效用户ID 设置为 uid,不改变实际用户ID和保存的设置用户ID
- 若上面条件都不满足,则将 errno 设置为 EPERM,并返回 -1
2.1 关于设置用户 ID 的规则说明
- 只有超级用户进程可以更改实际用户 ID
- 只有当程序文件设置了 设置用户ID位 时,exec 函数才会设置有效用户ID为程序文件的所有者. 否则有效用户ID为实际用户ID
- 保存的设置用户ID 是由exec函数复制 有效用户ID 得来的,即这两个用户ID的值在刚 exec 时是一致的,但有效用户ID可能在后期被设置为实际用户ID
- 非超级用户进程,其实际用户ID和 保存的设置用户ID 一经 exec 设置完毕后,就不能更改,能更改的只有有效用户ID
- 若非 root 权限,当设置有效用户ID时,uid的值只能为实际用户ID或 保存的设置用户ID
2.2 关于设置组ID 的规则说明
- 组ID 的规则类似用户ID的规则
- 附加组ID 不受 setgid、seetregid 或 setegid 函数的影响
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

上一篇: Linux 进程关系
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论