setreuid(2)

NAAM
setreuid, setregid - zet echte en/of geldende gebruiker of groep ID

BIBLIOTHEEK
Standaard C bibliotheek (libc, -lc)

SAMENVATTING
#include <unistd.h>

int setreuid(uid_t ruid, uid_t euid);
int setregid(gid_t rgid, gid_t egid);

    Feature Test Macro Requirements voor glibc (zie feature_test_macros(7)):

setreuid(), setregid():
    _XOPEN_SOURCE >= 500
        || /* Since glibc 2.19: */ _DEFAULT_SOURCE
        || /* Glibc <= 2.19: */ _BSD_SOURCE

BESCHRIJVING
setreuid() zet echte en geldende gebruiker ID's van het huidige proces.

Opgeven van een waarde van -1 voor of het echte of het geldende ID dwingt het systeem dat ID onveranderd te laten.

Niet-geprivilegieerde processen mogen alleen het effectieve gebruiker ID naar het geldende gebruiker ID, het effectieve gebruiker ID of het opgeslagen set-user-ID zetten.

On-geprivilegieerde gebruikers mogen het echte gebruiker ID naar het geldende gebruiker ID zetten en andersom.

Als het echte gebruiker ID veranderd wordt (i.e., ruid is niet -1) of het geldende gebruiker ID wordt naar een waarde gezet niet gelijk aan het vorige echte gebruiker ID, dan zal het bewaarde ID gezet worden naar het nieuwe geldende gebruiker ID.

Volledig analoog zet setregid() echte en effectieve groep ID´s van het aanroepende proces, en alles hierboven is geldig met "groep" in plaats van "gebruiker".

EIND WAARDE
Bij succes wordt nul teruggegeven. Bij falen wordt -1 teruggegeven en wordt errno overeenkomstig gezet.

Opmerking: er zijn gevallen waarbij setreuid() kan falen, zelfs wanneer de aanroeper UID 0 is; het is een grove veiligheidsfout om de terugkeer waarde van setreuid() niet te controleren.

FOUTEN

EAGAIN
    De aanroep zou de echte UID van de aanroeper veranderen (m.a.w., ruid komt niet overeen met de echte UID van de aanroeper), maar er trad een tijdelijke fout op bij het toekennen van de benodigde data structuren in de kernel.

EAGAIN
    ruid komt niet overeen met de echte gebruiker ID van de aanroeper en deze aanroep zou het aantal processen, behorende bij de echte gebruikers ID ruid, boven de resource limiet RLIMIT_NPROC van de aanroeper brengen. Vanaf Linux 3.1 komt deze fout niet meer voor (nog steeds zouden robuuste applicaties op deze fout moeten controleren); zie de beschrijving van EAGAIN in execvd(2).

EINVAL
    Een of meer van de doel gebruiker of groep ID´s is niet geldig in de gebruiker naamruimte.

EPERM
    De aanroepende proces is niet-geprivilegieerd (op Linux: heeft niet de noodzakelijke capaciteit in zijn gebruiker naamruimte: CAP_SETUID in het geval van setreuid(), of CAP_SETGID in het geval van setregid()) en een verandering anders dan (i) ruilen van het effectieve gebruiker (groep) ID met de echte gebruiker (groep) ID, of (ii) eentje zetten op de waarde van de ander of (iii) zetten van de effectieve gebruiker (groep) ID op de waarde van het opgeslagen set-user-ID (opgeslagen set-group-ID) werd gespecificeerd.

VERSIES
POSIX.1 specificeert niet alle UID veranderingen die Linux toestaat voor een niet-geprivilegieerd proces. Met setreuid() kan het effectieve gebruiker ID identiek gemaakt worden aan het echte gebruiker ID of het opgeslagen set-user-ID, en het is niet gespecificeerd of een niet-geprivilegieerd proces het echte gebruiker ID op het echte gebruiker ID, het echte groep ID of het opgeslagen set-user-ID mag zetten. Met setreuid() kan het echte groep ID verandert worden naar de waarde van het echte groep ID of het opgeslagen set-group-ID. De precieze details omtrent welke ID veranderingen toegestaan worden variëren per implementatie.

POSIX.1 specificeert het effect van deze aanroepen op de opgeslagen set-user-ID en opgeslagen set-group-ID niet.

STANDAARDEN
POSIX.1-2024.

HISTORIE
POSIX.1-2001, 4.3BSD (verschenen voor het eerst in 4.2BSD).

Zetten van het effectieve gebruiker (groep) ID op het opgeslagen set-user-ID (opgeslagen set-group-ID) is mogelijk vanaf Linux 1.1.37 (1.1.38).

De originele Linux setreuid() en setregid() systeem aanroepen ondersteunen alleen 16-bit gebruiker en groep IDs. Vervolgens, voegde Linux 2.4 setreuid32() en setregid32() toe voor 32-bit IDs ondersteuning. De glibc setreuid() en setregid() omwikkel functies handelen de variaties in kernel versies transparant af.

  C library/kernel verschillen
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 setreuid() en setregid()) 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).

ZIE OOK
getgid(2), getuid(2), seteuid(2), setgid(2), setresuid(2), setuid(2), capabilities(7), credentials(7), user_namespaces(7)

VERTALING
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.