您当前的位置:首页 > 计算机 > 系统应用 > Linux

用户ID 与 组ID

时间:12-14来源:作者:点击数:

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);
  1. 若进程具有 root 权限,则 setuid 函数 将实际用户 ID,有效用户 ID 及保存的设置用户 ID 设置为 uid
  2. 若root权限进程要只设置实际用户ID或有效用户ID,则需使用 setreuid/seteuid 函数
  3. 若进程无 root 权限,但uid等于 实际用户ID或保存的设置用户ID,则 setuid 只将 有效用户ID 设置为 uid,不改变实际用户ID和保存的设置用户ID
  4. 若上面条件都不满足,则将 errno 设置为 EPERM,并返回 -1

2.1 关于设置用户 ID 的规则说明

  1. 只有超级用户进程可以更改实际用户 ID
  2. 只有当程序文件设置了 设置用户ID位 时,exec 函数才会设置有效用户ID为程序文件的所有者. 否则有效用户ID为实际用户ID
  3. 保存的设置用户ID 是由exec函数复制 有效用户ID 得来的,即这两个用户ID的值在刚 exec 时是一致的,但有效用户ID可能在后期被设置为实际用户ID
  4. 非超级用户进程,其实际用户ID和 保存的设置用户ID 一经 exec 设置完毕后,就不能更改,能更改的只有有效用户ID
  5. 若非 root 权限,当设置有效用户ID时,uid的值只能为实际用户ID或 保存的设置用户ID

2.2 关于设置组ID 的规则说明

  1. 组ID 的规则类似用户ID的规则
  2. 附加组ID 不受 setgid、seetregid 或 setegid 函数的影响
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐