.\" -*- coding: UTF-8 -*-
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH access 2 "29 października 2025 r." "Linux man\-pages 6.16" 
.SH NAZWA
access, faccessat, faccessat2 \- sprawdza prawa użytkownika do pliku
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <unistd.h>\fP
.P
\fBint access(const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB);\fP
.P
\fB#include <fcntl.h>\fP            /* Definicja stałych \fBAT_*\fP */
\fB#include <unistd.h>\fP
.P
\fBint faccessat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
                /* Różnice między biblioteką C a jądrem opisano poniżej */
.P
\fB#include <fcntl.h>\fP            /* Definicja stałych \fBAT_*\fP */
\fB#include <sys/syscall.h>\fP      /* Definicja stałych \fBSYS_*\fP */
\fB#include <unistd.h>\fP
.P
\fBint syscall(SYS_faccessat2,\fP
\fB            int \fP\fIdirfd\fP\fB, const char *\fP\fIpath\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.P
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.P
\fBfaccessat\fP():
.nf
    Od glibc 2.10:
        _POSIX_C_SOURCE >= 200809L
    Przed glibc 2.10:
        _ATFILE_SOURCE
.fi
.SH OPIS
\fBaccess\fP() sprawdza, czy wywołujący proces ma dostęp do pliku
\fIpath\fP. Jeśli \fIpath\fP jest dowiązaniem symbolicznym, jest rozwiązywana.
.P
.\" F_OK is defined as 0 on every system that I know of.
\fIMode\fP określa jakie sprawdzenia dostępności mają być wykonane i jest albo
wartością \fBF_OK\fP albo maską zawierającą sumę logiczną jednego lub więcej z
\fBR_OK\fP, \fBW_OK\fP i \fBX_OK\fP.  \fBF_OK\fP sprawdza istnienie pliku. \fBR_OK\fP,
\fBW_OK\fP i \fBX_OK\fP sprawdzają pod kątem istnienia pliku i, odpowiednio,
uprawnień odczytu, zapisu i wykonania.
.P
Sprawdzenie jest wykonywane za pomocą \fIprawdziwych\fP identyfikatorów
użytkownika i grupy procesu, zamiast identyfikatorów efektywnych, jak dzieje
się przy rzeczywistej próbie wykonania operacji (np. \fBopen\fP(2)) na
pliku. Podobnie, w przypadku użytkownika root, sprawdzenie używa zestawu
przywilejów (ang. capabilities) dozwolonych zamiast zestawu przywilejów
efektywnych; w przypadku użytkowników innych niż root, sprawdzenie używa
pustego zestawu przywilejów.
.P
Pozwala to programom korzystającym z ustawienia ID użytkownika podczas
wykonania (suid) oraz programom obsługującym przywileje (ang. capabilities)
na łatwe określenie uprawnień wywołującego użytkownika. Innymi słowy,
\fBaccess\fP() nie odpowiada na pytanie "czy mogę odczytać/zapisać/wykonać ten
plik?". Odpowiada na nieco inne "(zakładając, że jestem plikiem wykonywalnym
korzystającym z suid) czy \fIużytkownik, który mnie wywołał\fP może
odczytać/zapisać/wykonać ten plik?". Daje to programom korzystającym z suid
możliwość uniemożliwienia zmuszania ich przez złośliwych użytkowników do
odczytywania plików, których ci użytkownicy nie powinni móc odczytywać.
.P
Jeśli wywołujący proces jest uprzywilejowany (tzn. jego identyfikator
użytkownika wynosi zero), to sprawdzenie \fBX_OK\fP kończy się sukcesem, jeśli
zwykły plik posiada uprawnienie wykonania dla dowolnego właściciela pliku,
grupy itp.
.SS faccessat()
Wywołanie systemowe \fBfaccessat\fP() operuje w dokładnie taki sam sposób jak
\fBaccess\fP(), z wyjątkiem różnic opisanych tutaj.
.P
Jeśli ścieżka \fIpath\fP jest względna, jest to interpretowane w odniesieniu do
katalogu do którego odnosi się deskryptor pliku \fIdirfd\fP (zamiast w
odniesieniu do bieżącego katalogu roboczego procesu wywołującego, jak w
stosunku do ścieżek względnych robi to \fBaccess\fP()).
.P
Jeśli \fIpath\fP jest względna a \fIdirfd\fP ma wartość specjalną \fBAT_FDCWD\fP, to
\fIpathname\fP jest interpretowana w odniesieniu do bieżącego katalogu
roboczego procesu wywołującego (jak \fBaccess\fP()).
.P
Jeśli ścieżka \fIpath\fP jest bezwzględna, to \fIdirfd\fP jest ignorowane.
.P
Parametr \fIflags\fP jest tworzony jako suma logiczna (OR) zera lub większej
liczby następujących wartości:
.TP 
\fBAT_EACCESS\fP
Przeprowadza sprawdzenie za pomocą efektywnych identyfikatorów użytkownika i
grupy. Domyślnie \fBfaccessat\fP() używa identyfikatorów rzeczywistych (jak
\fBaccess\fP()).
.TP 
\fBAT_EMPTY_PATH\fP (od Linuksa 5.8)
Jeśli \fIpath\fP jest pustym łańcuchem, działa na pliku do którego odnosi się
\fIdirfd\fP (który mógł być pozyskany za pomocą znacznika \fBO_PATH\fP
\fBopen\fP(2)). W tym przypadku \fIdirfd\fP może odnosić się do dowolnego typu
pliku, a nie tylko katalogu. Jeśli \fIdirfd\fP wynosi \fBAT_FDCWD\fP, to wywołanie
działa na bieżącym katalogu roboczym. Znacznik ten jest charakterystyczny
dla Linuksa; należy zdefiniować \fB_GNU_SOURCE\fP, aby pozyskać jego definicję.
.TP 
\fBAT_SYMLINK_NOFOLLOW\fP
Jeśli \fIpath\fP jest dowiązaniem symbolicznym, nie rozwiązuje go: w zamian
zwraca informacje o samym dowiązaniu.
.P
.\"
Więcej informacji o potrzebie wprowadzenia \fBfaccessat\fP() można znaleźć w
podręczniku \fBopenat\fP(2).
.SS faccessat2()
Powyższy opis \fBfaccessat\fP() odnosi się do POSIX.1 i implementacji
dostarczonej przez glibc. Implementacja glibc nie była jednak wiernym
odwzorowaniem (zob. USTERKI), która prześlizgnęła się nad faktem, że surowe
wywołanie linuksowe \fBfaccessat\fP() nie posiadało argumentu \fIflags\fP. W celu
poprawnej implementacji, Linux 5.8 dodał wywołanie systemowe
\fBfaccessat2\fP(), które obsługuje argument \fIflags\fP i pozwala na prawidłową
implementację funkcji opakowującej \fBfaccessat\fP().
.SH "WARTOŚĆ ZWRACANA"
Gdy wszystko pójdzie dobrze (wszystkie żądane prawa są zapewnione, lub
\fImode\fP wynosi \fBF_OK\fP i plik istnieje), zwracane jest zero. W wypadku błędu
(przynajmniej jeden bit z żądanych w \fImode\fP uprawnień nie jest ustawiony,
\fImode\fP wynosi \fBF_OK\fP i plik nie istnieje lub wystąpiły inne błędy),
zwracane jest \-1 i ustawiane jest \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEACCES\fP
Brak uprawnień dla żądanego dostępu do pliku, albo brak uprawnień do
przeglądania któregoś z katalogów w ścieżce \fIpath\fP (zob. też
\fBpath_resolution\fP(7)).
.TP 
\fBEBADF\fP
(\fBfaccessat\fP())  \fIpath\fP jest względna, lecz \fIdirfd\fP nie wynosi ani
\fBAT_FDCWD\fP (\fBfaccessat\fP()), ani nie jest prawidłowym deskryptorem pliku.
.TP 
\fBEFAULT\fP
\fIpath\fP wskazuje poza dostępną dla użytkownika przestrzeń adresową.
.TP 
\fBEINVAL\fP
\fImode\fP zostało nieprawidłowo podane.
.TP 
\fBEINVAL\fP
(\fBfaccessat\fP())  Podano nieprawidłową opcję w \fIflags\fP.
.TP 
\fBEIO\fP
Wystąpił błąd wejścia/wyjścia.
.TP 
\fBELOOP\fP
Podczas rozwiązywania \fIpath\fP napotkano zbyt wiele dowiązań symbolicznych.
.TP 
\fBENAMETOOLONG\fP
\fIpath\fP jest zbyt długie.
.TP 
\fBENOENT\fP
Składowa \fIpath\fP nie istnieje lub jest wiszącym dowiązaniem symbolicznym.
.TP 
\fBENOMEM\fP
Brak pamięci jądra.
.TP 
\fBENOTDIR\fP
Składowa \fIpath\fP, która powinna być katalogiem, w rzeczywistości katalogiem
nie jest.
.TP 
\fBENOTDIR\fP
(\fBfaccessat\fP())  \fIpath\fP jest względna, a \fIdirfd\fP jest deskryptorem pliku
odnoszącym się do pliku zamiast do katalogu.
.TP 
\fBEPERM\fP
Żądano zapisu do pliku z ustawionym znacznikiem niezmienności. Zob. też
\fBFS_IOC_SETFLAGS\fP(2const).
.TP 
\fBEROFS\fP
Żądano zapisu do pliku położonego w systemie plików tylko do odczytu.
.TP 
\fBETXTBSY\fP
Wystąpiła próba dostępu z prawem zapisu do pliku aktualnie uruchomionego
programu.
.SH WERSJE
.\" HPU-UX 11 and Tru64 5.1 do this.
.\"
Jeśli proces posiada odpowiednie uprawnienia (tj. jest superużytkownikiem),
POSIX.1\-2001 zezwala na implementację wskazującą pomyślne zakończenie dla
sprawdzenia \fBX_OK\fP nawet wtedy, gdy nie jest ustawiony żaden z bitów
uruchamialności w prawach dostępu do pliku. Linux tego nie czyni.
.SS "Różnice biblioteki C/jądra"
.\"
Surowe wywołanie systemowe \fBfaccessat\fP() przyjmuje jedynie trzy pierwsze
argumenty. Znaczniki \fBAT_EACCESS\fP i \fBAT_SYMLINK_NOFOLLOW\fP są faktycznie
zaimplementowane w opakowującej funkcji glibc do \fBfaccessat\fP(). Jeśli nie
podano żadnego z tych znaczników, funkcja opakowująca używa \fBfstatat\fP(2) do
określenia uprawnień dostępu, zob. jednak USTERKI.
.SS "Uwagi dla glibc"
Na starszych wersjach jądra Linux, gdzie \fBfaccessat\fP() nie jest dostępne (i
gdzie znaczniki \fBAT_EACCESS\fP oraz \fBAT_SYMLINK_NOFOLLOW\fP nie są określone),
funkcja opakowująca z glibc wraca do używania \fBaccess\fP(). Gdy \fIpath\fP jest
względna, glibc konstruuje ścieżkę na bazie dowiązania symbolicznego w
\fI/proc/self/fd\fP, które odpowiada argumentowi \fIdirfd\fP.
.SH STANDARDY
.TP 
\fBaccess\fP()
.TQ
\fBfaccessat\fP()
POSIX.1\-2024.
.TP 
\fBfaccessat2\fP()
Linux.
.SH HISTORIA
.TP 
\fBaccess\fP()
SVr4, 4.3BSD, POSIX.1\-2001.
.TP 
\fBfaccessat\fP()
Linux 2.6.16, glibc 2.4.
.TP 
\fBfaccessat2\fP()
Linux 5.8.
.SH UWAGI
\fBOstrzeżenie\fP: Użycie tych wywołań w celu sprawdzenia, czy użytkownik ma
uprawnienia na przykład do otwarcia pliku, przed otwarciem tego pliku za
pomocą \fBopen\fP(2) tworzy lukę bezpieczeństwa, ponieważ użytkownik może
wykorzystać krótki moment pomiędzy sprawdzeniem pliku a otwarciem go do
manipulacji na pliku. \fBZ tego powodu należy unikać używania niniejszego wywołania systemowego\fP (w opisanym właśnie przykładzie, bezpieczniejszą
alternatywą byłoby tymczasowe przełączenie efektywnego identyfikatora
użytkownika na jego identyfikator rzeczywisty, a następnie wywołanie
\fBopen\fP(2)).
.P
\fBaccess\fP() zawsze podąża za dowiązaniami symbolicznymi. Jeśli konieczne
jest sprawdzenie uprawnień samego dowiązania symbolicznego, należy użyć
\fBfaccessat\fP() ze znacznikiem \fBAT_SYMLINK_NOFOLLOW\fP.
.P
Te wywołania zwracają błąd, jeśli jakikolwiek z żądanych w \fImode\fP rodzajów
dostępu zostanie odmówiony, nawet jeśli pozostałe typy dostępu z \fImode\fP są
dozwolone.
.P
Plik jest dostępny tylko wówczas, gdy uprawnienia każdego z katalogów w jego
ścieżce \fIpath\fP przyznają dostęp do przeszukiwania (tj. wykonania). Jeśli
dowolny katalog jest niedostępny, to wywołanie \fBaccess\fP() zawiedzie,
niezależnie od uprawnień samego pliku.
.P
Sprawdzane są jedynie bity dostępu, nie zawartość pliku czy jego
typ. Dlatego, jeśli katalog okazuje się "zapisywalny", znaczy to
prawdopodobnie, że można w nim tworzyć pliki, a nie, że do katalogu można
pisać jak do pliku. Podobnie, plik dosowy może zostać zgłoszony jako
"wykonywalny", lecz funkcja \fBexecve\fP(2) mimo to zawiedzie.
.P
.\"
Wywołania te mogą nie działać prawidłowo na systemach plików NFSv2 z
włączonym mapowaniem UID, ponieważ mapowanie to jest dokonywane na serwerze
i ukryte przed klientem sprawdzającym prawa dostępu (NFS w wersji 3 i
wyższej dokonują sprawdzeń na serwerze). Podobny problem może wystąpić przy
montowaniach FUSE.
.SH USTERKI
Ze względu na to, że wywołanie systemowe jądra Linux \fBfaccessat\fP() nie
obsługuje argumentu \fIflags\fP, funkcja opakowująca \fBfaccessat\fP() z glibc
udostępniona w glibc 2.32 i wcześniejszych, emuluje wymaganą funkcjonalność
za pomocą połączenia wywołania systemowego \fBfaccessat\fP() oraz
\fBfstatat\fP(2). Jednak emulacja ta nie bierze pod uwagę ACL\-i (list kontroli
dostępu do plików). Począwszy od glibc 2.33, funkcja opakowująca obchodzi tę
usterkę, wykorzystując wywołanie systemowe \fBfaccessat2\fP(), tam gdzie jest
ono zapewnione przez jądro.
.P
.\" This behavior appears to have been an implementation accident.
W Linuksie 2.4 (i wcześniejszych) obsługa testów \fBX_OK\fP dla
superużytkownika jest nieco dziwna. Jeśli wszystkie kategorie uprawnień
wykonania są wyłączone dla pliku niebędącego katalogiem, to jedynym testem
\fBaccess\fP() zwracającym \-1 jest sytuacja, gdy podany \fImode\fP wynosi tylko
\fBX_OK\fP; jeśli w \fImode\fP określono również \fBR_OK\fP lub \fBW_OK\fP, to
\fBaccess\fP() zwróci dla takich plików 0. Wczesny Linux 2.6 (do Linuksa 2.6.3
włącznie) zachowywał się również w ten sam sposób jak Linux 2.4.
.P
Przed Linuksem 2.6.20, wywołania te ignorowały wpływ znacznika \fBMS_NOEXEC\fP,
jeśli był on używany do wykonania \fBmount\fP(2) na systemie plików. Od Linuksa
2.6.20, znacznik \fBMS_NOEXEC\fP jest uwzględniany.
.SH "ZOBACZ TAKŻE"
\fBchmod\fP(2), \fBchown\fP(2), \fBopen\fP(2), \fBsetgid\fP(2), \fBsetuid\fP(2),
\fBstat\fP(2), \fBeuidaccess\fP(3), \fBcredentials\fP(7), \fBpath_resolution\fP(7),
\fBsymlink\fP(7)
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
