我有一个包装器脚本A
,它正在调用程序B
。A
必须以 root 身份调用,以便进行一些初始设置。之后,A
调用 setuid() 和 setgid() 以降低其自身权限,以确保安全。然后,A
调用B
。
问题是,B
当且仅当A
在调用之前调用了 setuid()/setgid()时,才会表现出不良行为。当我通过 直接以不同用户B
身份调用时,不会发生这种情况。据我所知(如果我错了请纠正我),唯一可以知道已更改用户的方式是通过系统调用(我已检查环境变量;它们匹配)。B
sudo -u xxx -g xxx
B
A
issetuid()
我怎样才能清除此位,以便B
正常运行?似乎使用 issetuid() 是为了跟踪进程是否“被污染”,即携带来自较低权限环境的工件(?)。但我已经减少我的权限,而不是提升它们!而且,无论如何,我已经清除了我的环境变量!
除了 issetuid() 的非常简洁的手册页外,我几乎找不到有关此系统调用/神奇程序状态的任何信息。有人可以提供更好的理解吗?
答案1
如果没有更多信息(例如 A 和 B 软件的名称),则很难诊断。
但是,我会查看环境变量,肯定有一个变量没有被 A 清理,并且被 sudo 清理了。