2016-11-22 1 views
3

내가 지금까지 읽은 모든 문헌은 setuid은 시스템 호출임을 의미하는 방식으로 seteuid에 대해 이야기합니다. 섹션 2 man 페이지는 함수가 시스템 호출인지 아닌지를 알려주지 않으므로 seteuid(2)은 도움이되지 않습니다. 그리고 그것이 시스템 호출이 아니라면, 커널이 기능을 제공하지 않는다는 것을 의미하고, "효과적인 UID를 어떻게 설정할 수 있습니까?"Linux에서 시스템 호출을 설정합니까?

답변

6

섹션 2 맨 페이지는 모두 시스템 호출입니다. 이것이 섹션 2의 내용입니다. 섹션 3 맨 페이지는 모든 라이브러리 호출이며, 섹션 3의 내용입니다. 섹션의 목록 (man 자체에 대한 매뉴얼 페이지) 사람 (1)를 참조하십시오 그리고 그들은 무엇 :

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] 
0

쉽게이 시스템 호출 인 경우 확인하거나 할 수 그것은를 작성하여 libc의에 정의되어있는 경우 작은 프로그램과 실행중인 strace. 예 :

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을 참조하십시오.

관련 문제