如果我使root权限进程冒充一些较小的用户,并且分叉一个孩子,是否可以安全地假设孩子具有用户权限,而与root无关?我正在使用默认的自定义方法作为用户进行nonosnate并恢复到所有者的信用(root)。它们是抽象的。但通常,这些方法会将进程的整个上下文更改为用户的上下文(可能包括uid,gid等)。
答案 0 :(得分:1)
fork
不会更改流程ID,但exec
可以。 exec
ing将使用当前有效的uid重写已保存的uid。除非可执行文件是setuid可执行文件,否则有效uid将保持不变,在这种情况下,它将从可执行文件的所有者中复制。
我认为最好使用以下内容:
int print_ids(void)
{
long ruid, euid, suid;
getresuid(&ruid, &euid, &suid);
return printf("%ld %ld %ld\n", ruid, euid, suid);
}
使用不同的场景在不同的上下文中打印uid,以验证它们在哪些上下文中发生变化,以及它们不在哪些上下文中。