seteuid是Linux上的系统调用吗?

时间:2016-11-22 00:32:16

标签: linux setuid

到目前为止,我在setuid上阅读的所有文献都以一种暗示它是系统调用的方式讨论了seteuid。第2节man页面从不说明函数是否是系统调用,因此seteuid(2)没有帮助。如果它不是系统调用,意味着内核不提供功能,那么如何实现“设置有效的UID”?

2 个答案:

答案 0 :(得分:6)

第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), e.g.
       man(7), groff(7)
   8   System administration commands (usually only for root)
   9   Kernel routines [Non standard]

答案 1 :(得分:0)

您可以通过编写一个小程序并在其上运行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中实现的。有关实施,请参阅here