2016-11-22 3 views
3

Alle Literatur, die ich bisher auf setuid gelesen habe, spricht über seteuid in einer Weise, die impliziert, dass es sich um einen Systemaufruf handelt. Der Abschnitt 2 man Seiten sagen nie, ob eine Funktion ein Systemanruf ist oder nicht, so seteuid(2) ist keine Hilfe. Und wenn es sich nicht um einen Systemaufruf handelt, was bedeutet, dass die Funktionalität nicht vom Kernel bereitgestellt wird, wie kann dann eine "effektive UID" eingestellt werden?Ist ein Systemaufruf unter Linux seteuid?

Antwort

6

Die Abschnitt 2 man Seiten sind alle Systemaufrufe - das ist, was Abschnitt 2 ist für. Die Manpages von Abschnitt 3 sind alle Bibliotheksaufrufe, da Abschnitt 3 dafür zuständig ist. Siehe man (1) (die manuelle Seite für man selbst) für die Liste der Abschnitte und was sie sind:

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

Sie können ganz einfach überprüfen, ob es sich um ein Systemaufruf ist oder wenn es in libc definiert durch ein Schreiben kleines Programm und laufen strace darauf. Beispiel:

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) 

In diesem Fall ist seteuid in libc implementiert. Siehe here für die Implementierung

Verwandte Themen