用户ID 与 组ID

发布于 2023-03-01 20:53:59 字数 1231 浏览 137 评论 0

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 函数的影响

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

浊酒尽余欢

暂无简介

文章
评论
29 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文