可以为子进程清除 issetuid() 吗?

可以为子进程清除 issetuid() 吗?

我有一个包装器脚本A,它正在调用程序BA必须以 root 身份调用,以便进行一些初始设置。之后,A调用 setuid() 和 setgid() 以降低其自身权限,以确保安全。然后,A调用B

问题是,B当且仅当A在调用之前调用了 setuid()/setgid()时,才会表现出不良行为。当我通过 直接以不同用户B身份调用时,不会发生这种情况。据我所知(如果我错了请纠正我),唯一可以知道已更改用户的方式是通过系统调用(我已检查环境变量;它们匹配)。Bsudo -u xxx -g xxxBAissetuid()

我怎样才能清除此位,以便B正常运行?似乎使用 issetuid() 是为了跟踪进程是否“被污染”,即携带来自较低权限环境的工件(?)。但我已经减少我的权限,而不是提升它们!而且,无论如何,我已经清除了我的环境变量!

除了 issetuid() 的非常简洁的手册页外,我几乎找不到有关此系统调用/神奇程序状态的任何信息。有人可以提供更好的理解吗?

答案1

如果没有更多信息(例如 A 和 B 软件的名称),则很难诊断。

但是,我会查看环境变量,肯定有一个变量没有被 A 清理,并且被 sudo 清理了。

相关内容