在Linux上seteuid系统调用?

迄今为止我所读过的所有关于seteuid的文献都是以系统调用来暗示的。 第2节man页从来不说如果一个函数是一个系统调用,所以seteuid(2)没有帮助。 如果不是系统调用,意味着内核不提供这个function,那么怎样才能“设置有效的UID”呢?

第2节手册页都是系统调用 – 这是第2节的目的。 第3节手册页都是库调用,因为这是第3节的目的。 请参阅man(1)( man本身的手册页)以获取部分列表以及它们是什么:

  1 Executable programs or shell commands 2 System calls (functions provided by the kernel) 3 Library calls (functions within program libraries) 4 Special files (usually found in /dev) 5 File formats and conventions eg /etc/passwd 6 Games 7 Miscellaneous (including macro packages and conventions), eg man(7), groff(7) 8 System administration commands (usually only for root) 9 coreel routines [Non standard] 

您可以轻松地验证它是否是系统调用,或者是通过编写一个小程序并在其上运行strace来在libc中定义它。 例如,

 int main() { seteuid(); } gcc -o main main.c -bash-4.2$ strace ./main 2>&1 | grep set setresuid(-1, 1, -1) = -1 EPERM (Operation not permitted) 

所以在这种情况下,seteuid是在libc中实现的。 看到这里的实施