为什么许多服务器改变其uid和gid,有什么好处?

cpu*_*uer 6 c unix security

我在许多开源项目中看到了这样的逻辑:

if (setuid() == 0) {
   if (setgid(ccf->group) == -1) {
   ...
   if (initgroups(ccf->username, ccf->group) == -1) {
Run Code Online (Sandbox Code Playgroud)

我有2个问题:

  1. 改变另一个gid和uid的好处是什么?
  2. 什么是initgroups为了?IMO,改变GID和UID,setuid()以及setgid()就足够了.

Fré*_*idi 5

大多数情况下,系统守护进程由 init 脚本生成,因此作为root. 调用setuid()setgid()允许他们放弃超级用户权限并模拟系统上的另一个用户(通常远不如 强大root)。这样,错误和安全漏洞对系统的致命性就会降低。

关于您问题的第二部分,调用initgroups()以重新初始化组访问列表并添加ccf->groupccf->username所属组的列表中。这可能是因为调用setgid()不足以将与新组关联的访问权限传播到进程。

  • initgroups 设置辅助组...更改整个列表... setgid 只是设置为一个组 ID。调用 initgroups 对于用户属于多个组等的系统很重要。 (2认同)