setuid(2) | System Calls Manual | setuid(2) |
setuid - zet gebruiker identiteit
Standard C bibliotheek (libc, -lc)
#include <unistd.h>
int setuid(uid_t uid);
setuid() zet het effectieve gebruiker ID van het huidige proces. Als het huidige proces gerechtigd is (preciezer: als het proces de CAP_SETUID capaciteit in zijn gebruiker naamruimte heeft), dan worden zowel de echte UID als de opgeslagen set-user-ID ook gezet.
Onder Linux is setuid() geïmplementeerd zoals de POSIX versie met het _POSIX_SAVED_IDS kenmerk. Dit staat een set-user-ID programma (anders dan root) toe, al zijn gebruikers rechten te laten vallen, vervolgens niet-gerechtigd werk uit te voeren, en dan het origineel geldende gebruikers ID opnieuw op een veilige manier in te zetten.
Als de gebruiker root is of het programma is setuid root, dan moet er extra opgepast worden. De setuid() functie test het geldende uid van de aanroeper en als het de systeem beheerder is, worden alle met het proces verbonden ID's naar uid gezet. Nadat dit heeft plaatsgevonden is het onmogelijk voor het programma om root privileges terug te krijgen.
Dus een setuid-root programma dat wenst om tijdelijk root privileges te laten vallen, de identiteit aan te nemen van een niet-root gebruiker, en dan de root privileges te herwinnen, kan setuid() niet gebruiken. U kunt dat voor elkaar krijgen met de aanroep seteuid().
Bij succes wordt nul teruggegeven. Bij falen wordt -1 teruggegeven en wordt errno overeenkomstig gezet.
Opmerking: er zijn gevallen waarbij setuid() kan falen, zelfs wanneer de aanroeper UID 0 is; het is een grove veiligheidsfout om de terugkeer waarde van setuid() niet te controleren.
POSIX.1-2001, POSIX.1-2008, SVr4. Niet geheel compatibel met de 4.4BSD aanroep, die alle echte, opgeslagen en effectieve gebruiker ID´s zet.
Linux gebruikt het idee van bestandsysteem-gebruiker-ID, normaal is dat hetzelfde als het geldende gebruiker ID. De setuid() aanroep zet ook de bestandssysteem gebruiker ID van het huidige proces. Zie setfsuid(2).
Als uid verschillend is van het oude geldende uid, dan zal het proces geen core-dumps mogen achterlaten.
De originele Linux setuid() systeem aanroep ondersteunde alleen 16-bit gebruiker IDs. Vervolgens, voegde Linux 2.4 setuid32() toe voor 32-bit IDs ondersteuning. De glibc setuid() omwikkel functies handelt de variaties in kernel versies transparant af.
Op kernel niveau zijn gebruiker ID en groep ID een per-thread attribute. Hoewel POSIX vereist dat alle threads van een proces dezelfde identiteit delen. De NPTL implementatie van threads implementeert de POSIX eis door in omwikkel functies te voorzien voor de diverse systeem aanroepen die de UID´s en GID´s veranderen. Deze omwikkel functies (inclusief die ene voor setuid() gebruiken een op signalen gebaseerde techniek om er van zeker te zijn dat als een thread zijn identiteit verandert, alle andere threads van dat proces ook hun identiteit veranderen. Zie voor details nptl(7).
getuid(2), seteuid(2), setfsuid(2), setreuid(2), capabilities(7), credentials(7), user_namespaces(7)
De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema <joshb@xs4all.nl>, Mario Blättermann <mario.blaettermann@gmail.com> en Luc Castermans <luc.castermans@gmail.com>
Deze vertaling is vrije documentatie; lees de GNU General Public License Version 3 of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID.
Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar debian-l10n-dutch@lists.debian.org.
30 oktober 2022 | Linux man-pagina's 6.03 |