Provided by: manpages-nl-dev_4.13-4_all 

NAAM
access, faccessat, faccessat2- controleer gebruikers rechten voor een bestand.
SAMENVATTING
#include <unistd.h>
int access(const char *padnaam, int toestand);
#include <fcntl.h> /* Definitie van AT_* constanten */
#include <unistd.h>
int faccessat(int mapbi, const char *padnaam, int toestand, int vlaggen);
/* Maar zie C library/kernel verschillen, hieronder */
int faccessat(int mapbi, const char *padnaam, int toestand, int vlaggen);
Test Macro´s in glibc (zie feature_test_macros(7)):
faccessat():
Vanaf glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Vóór glibc 2.10:
_ATFILE_SOURCE
BESCHRIJVING
access() controleert of het aanroepende proces het bestand padnaam mag benaderen. Als padnaam een
symbolische koppeling is, dan wordt deze zelf gebruikt.
De toestand specificeert welke toegangscontroles moeten gedaan worden, en is ofwel de waarde van F_OK,
ofwel een masker bestaande uit een bitgewijze OF van een of meer van R_OK, W_OK, en X_OK. F_OK
controleert op het bestaan van het bestand. R_OK, W_OK, en X_OK controleert of het bestand bestaat en
respectievelijk lees, schrijf en uitvoer permissies toe staat.
De controle wordt gedaan gebruik makend van de echte UID en GID van het aanroepende proces, in plaats
van de effectieve ID´s zoals gedaan tijdens het uitvoeren van een operatie (b.v. open(2)) op het bestand.
Op dezelfde manier, voor de systeembeheerder, de controle gebruikt een verzameling van toegestane
mogelijkheden in plaats van een verzameling van effectieve mogelijkheden; en voor niet-systeembeheerders
gebruikt de controle een lege verzameling van mogelijkheden.
Dit maakt het mogelijk dat set-user-ID programma´s en gerechtigde programma´s om makkelijk de autoriteit
van aanroepende gebruikers te bepalen. Met andere woorden , access() beantwoord de "kan ik het bestand
lezen/schrijven/uitvoeren" vraag niet. Het beantwoord een lichtelijk andere vraag: "(aannemende dat ik
een setuid binaire ben) mag de gebruiker die mij aanriep dit bestand lezen/schrijven/uitvoeren?", dit
geeft set-user-ID programma´s de mogelijkheid om te voorkomen dat kwaadaardige gebruikers bestanden lezen
die ze niet zouden moeten kunnen lezen.
Als het aanroepende proces gerechtigd is (m.a.w. zijn effectieve UID is nul), dan zal een X_OK controle
succesvol zijn voor een regulier bestand als het uitvoer-recht is ingeschakeld voor een van de
bestandsbits: eigenaar, groep of ander.
faccessat()
De faccessat() systeem aanroep werkt op precies dezelfde wijze als access(), behalve voor de hier
beschreven verschillen.
Als het pad gegeven in padnaam relatief is, dan wordt deze geïnterpreteerd als relatieve aan de map
aangewezen door de bestandsbeschrijving mapbi (in plaats van relatief aan de huidige werkmap van het
aanroepende proces, zoals gedaan door access() voor een relatieve padnaam).
Als padnaam relatief is en mapbi heeft de speciale waarde AT_FDCWD, dan wordt padnaam geïnterpreteerd als
relatief aan de huidige werkmap van het aanroepende proces (zoals access()).
Als padnaam absoluut is, dan wordt mapbi genegeerd.
vlaggen wordt gemaakt door OF´en van een of meer van de volgendewaarden:
AT_EACCESS
Voer toegangscontrole uit gebruikmakend van de effectieve gebruiker en groeps ID´s. Standaard
gebruikt faccessat() echte ID´s (zoals access()).
AT_SYMLINK_NOFOLLOW
Als padnaam een symbolische koppeling is, volg deze niet: in plaats daarvan, retourneer informatie
over de koppeling zelf.
Zie openat(2) voor een uitleg over de noodzaak van faccessat().
faccessat2()
De hierboven gegeven beschrijving van faccessat() komt overeen met POSIX.1 en met de implementatie
voorzien in glibc. Hoewel de glibc implementatie een imperfecte emulatie (zie BUGS) was die struikelde
over het feit dat de onbewerkte Linux faccessat() systeem aanroep geen vlaggen argument heeft. Om te
voorzien in een juiste implementatie, voegde Linux 5.8 de faccessat2() systeem aanroep toe, die het
vlaggen argument ondersteund en een juiste implementatie van de faccessat() mogelijk maakt.
EIND WAARDE
Bij succes (alle gevraagde permissies toegestaan, of toestand is F_OK en het bestand bestaat), nul wordt
teruggegeven. Bij een fout (minstens een gevraagd bit in toestand voor een permissie werd geweigerd, of
toestand is F_OK en het bestand bestaat niet, of een andere fout trad op), -1 wordt terug gegeven, en
errno wordt gezet om de fout aan te duiden.
FOUTEN
access() en faccessat() moeten falen als:
EACCES De gevraagde toegang tot het bestand zou geweigerd worden, of zoek toestemming werd geweigerd in
een van de mappen in padnaam. Zie ook path_resolution(7).
ELOOP Teveel symbolische koppelingen werden tegengekomen bij het vaststellen van padnaam.
ENAMETOOLONG
padnaam is te lang.
ENOENT Een map-deel van padnaam zou toegankelijk geweest zijn maar bestaat niet of was een zwevende
symbolische koppeling.
ENOTDIR
Een onderdeel gebruikt als map in padnaam is in feite geen map.
EROFS Schrijf toestemming werd gevraagd voor een bestand op een alleen-lezen bestandsysteem.
access() en faccessat() mogen falen als:
EFAULT padnaam wijst buiten de voor u toegankelijke adresruimte.
EINVAL toestand werd ongeldig opgegeven.
EIO Een Invoer/Uitvoer fout trad op.
ENOMEM Onvoldoende kernelgeheugen voorhanden.
ETXTBSY
Schrijf toegang werd gevraagd aan een uitvoerbaar bestand dat wordt uitgevoerd.
De volgende aanvullende fouten kunnen optreden voor faccessat():
EBADF mapbi is geen geldige bestandsindicator.
EINVAL Ongeldige vlag opgegeven in vlaggen.
ENOTDIR
padnaam is relatief en mapbi is een bestandsindicator die naar een bestand wijst die geen map is.
VERSIES
faccessat() werd toegevoegd aan Linux in kernel 2.6.16; bibliotheek ondersteuning werd toegevoegd aan
glibc in versie 2.4.
faccessat2() werd toegevoegd aan Linux in versie 5.8.
VOLDOET AAN
access(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
faccessat(): POSIX.1-2008.
faccessat2(): Linux-specifiek.
OPMERKINGEN
Waarschuwing: Deze aanroepen gebruiken om te controleren of een gebruiker is gerechtigd om, bij
voorbeeld, een bestand te openen alvorens het echt te doen door open(2) te gebruiken, creëert een
veiligheidslek, omdat de gebruiker het korte tijdinterval tussen de controle en het openen van het
bestand kan gebruiken om het te manipuleren. Om deze reden moet het gebruik van deze systeem aanroep
worden vermeden. (In het hier beschreven voorbeeld, is een veiliger alternatie om tijdelijk het
effectieve gebruikers ID te veranderen naar het echte ID en dan open(2) aan te roepen.)
access() volgt symbolische koppelingen altijd. Als u de rechten van een symbolische koppeling zelf wilt
controleren, gebruik dan faccessat() met de vlag AT_SYMLINK_NOFOLLOW.
Deze aanroepen geven een fout terug zodra een van de toegang typen in toestand wordt geweigerd, zelfs als
een van de andere typen in toestand wordt toegestaan.
Als het aanroepende proces gepaste rechten heeft (m.a.w. systeembeheerder), staat POSIX.1-2001 een
implementatie toe om succes te melden voor een X_OK controle zelfs als géén van de uitvoer-recht bits
zijn gezet. Linux doet dit niet.
Een bestand is alleen toegankelijk als de rechten in elk van de mappen in het pad voorvoegsel van padnaam
zoeken toestaat (m.a.w. uitvoer) recht heeft. Als enige map niet toegankelijk is dan zal de access()
aanroep falen, onafhankelijk van de rechten van het bestand zelf.
Alleen toegangs bits worden gecontroleerd, niet het bestandstype of inhoud. Daarom, als de map als
schrijfbaar werd bevonden, betekent dit dat hoogstwaarschijnlijk bestanden in deze map kunnen worden
aangemaakt, en niet dat de map als een bestand kan worden geschreven. Vergelijkbaar, kan een DOS bestand
gevonden worden als "uitvoerbaar", maar de execve(2) aanroep zal falen.
Deze aanroepen kunnen niet correct werken op een NFSv2 bestandssysteem met UID-mapping ingeschakeld,
omdat UID-mapping op de server plaats vind en onzichtbaar is vanaf de client, die de rechten
controleert, (NFS versie 3 en hoger voeren de controle op de server uit.) Vergelijkbare problemen kunnen
optreden op FUSE koppeling.
C library/kernel verschillen
De onbewerkte faccessat() systeem aanroep gebruikt alleen de eerste drie argumenten. De AT_EACCESS en
AT_SYMLINK_NOFOLLOW vlaggen zijn daadwerkelijk geïmplementeerd. in de glibc omwikkel functie voor
faccessat(). Als een van deze vlaggen werd opgegeven, dan gebruikt de omwikkel functie fstatat(2) om de
toegangsrechten te bepalen.
Glibc-opmerkingen
Op oudere kernels waar faccessat() niet beschikbaar is (en indien de AT_EACCESS en AT_SYMLINK_NOFOLLOW
vlaggen werden niet opgegeven, valt de glibc omwikkel functie terug op het gebruik van access(). Als
padnaam een relatieve padnaam is, dan construeert glibc een padnaam gebaseerd op de symbolische koppeling
in /proc/self/fd die overeenkomt met het mapbi argument.
BUGS
Omdat de Linux kernel´ faccessat() systeem aanroep het vlaggen argument niet ondersteund, emuleert
glibc´s faccessat() omwikkel functie, voorzien in glibc 2.32 en eerder, de vereiste functionaliteit
gebruik makende van een combinatie van de faccessat() systeem aanroep en fstatat(2). Hoewel deze
emulatie ACL´s niet in in aanmerking neemt. Vanaf glibc 2.33, vermijd de omwikkel functie deze bug door
gebruik te maken van de faccessat2() systeem aanroep waar het in wordt voorzien de de onderliggende
kernel.
In kernel 2.4 (en eerder) is er iets vreemds in het behandelen van X_OK testen voor de systeembeheerder.
Wanneer alle categorieën van uitvoer-rechten zijn uitgeschakeld voor een niet-map bestand, dan is de
enige access() test die -1 retourneert is wanneer toestand werd gespecificeerd als alleen X_OK; indien
R_OK of W_OK ook werden gespecificeerd in toestand, dan retourneert access() een 0 voor zulke bestanden.
Vroegere 2.6 kernels (tot en met 2.6.3) gedroegen zich op dezelfde manier als kernel 2.4.
In kernels voor 2.6.20, ignoreerden deze aanroepen het effect van de MS_NOEXEC vlag als deze was gebruikt
om te mount(2)´en het onderliggende bestandssysteem. Vanaf kernel 2.6.20 wordt de MS_NOEXEC vlag
gehonoreerd.
ZIE OOK
chmod(2), chown(2), open(2), setgid(2), setuid(2), stat(2), euidaccess(3), credentials(7),
path_resolution(7), symlink(7)
COLOFON
Deze pagina is onderdeel van release 5.10 van het Linux man-pages-project. Een beschrijving van het
project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op
https://www.kernel.org/doc/man-pages/ te vinden.
VERTALING
De Nederlandse vertaling van deze handleiding is geschreven door 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.
Linux 21 december 2020 ACCESS(2)