.\" -*- coding: UTF-8 -*-
.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
.\"             and Copyright (C) 1993 Michael Haardt, Ian Jackson.
.\" and Copyright (C) 2004, 2006, 2007, 2014 Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified 1993-07-21 Rik Faith (faith@cs.unc.edu)
.\" Modified 1994-08-21 by Michael Chastain (mec@shell.portal.com):
.\"   Removed note about old kernel (pre-1.1.44) using wrong id on path.
.\" Modified 1996-03-18 by Martin Schulze (joey@infodrom.north.de):
.\"   Stated more clearly how it behaves with symbolic links.
.\" Added correction due to Nick Duffek (nsd@bbc.com), aeb, 960426
.\" Modified 1996-09-07 by Michael Haardt:
.\"   Restrictions for NFS
.\" Modified 1997-09-09 by Joseph S. Myers <jsm28@cam.ac.uk>
.\" Modified 1998-01-13 by Michael Haardt:
.\"   Using access is often insecure
.\" Modified 2001-10-16 by aeb
.\" Modified 2002-04-23 by Roger Luethi <rl@hellgate.ch>
.\" Modified 2004-06-23 by Michael Kerrisk
.\" 2007-06-10, mtk, various parts rewritten, and added BUGS section.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH access 2 "30 marca 2023 r." "Linux man\-pages 6.05.01" 
.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
.PP
\fBint access(const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB);\fP
.PP
\fB#include <fcntl.h>\fP            /* Definicja stałych \fBAT_*\fP */
\fB#include <unistd.h>\fP
.PP
\fBint faccessat(int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\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 */
.PP
\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
.PP
\fBint syscall(SYS_faccessat2,\fP
\fB            int \fP\fIdirfd\fP\fB, const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB, int \fP\fIflags\fP\fB);\fP
.fi
.PP
.RS -4
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.RE
.PP
\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
\fIpathname\fP. Jeśli \fIpathname\fP jest dowiązaniem symbolicznym, jest
rozwiązywana.
.PP
.\" 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.
.PP
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.
.PP
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ć.
.PP
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.
.PP
Jeśli ścieżka podana w \fIpathname\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()).
.PP
Jeśli \fIpathname\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()).
.PP
Jeśli ścieżka \fIpathname\fP jest bezwzględna, to \fIdirfd\fP jest ignorowane.
.PP
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_SYMLINK_NOFOLLOW\fP
Jeśli \fIpathname\fP jest dowiązaniem symbolicznym, nie rozwiązuje go: w zamian
zwraca informacje o samym dowiązaniu.
.PP
.\"
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 \fIpathname\fP (zob. też
\fBpath_resolution\fP(7)).
.TP 
\fBEBADF\fP
(\fBfaccessat\fP())  \fIpathname\fP jest względne, lecz \fIdirfd\fP nie wynosi ani
\fBAT_FDCWD\fP (\fBfaccessat\fP()), ani nie jest prawidłowym deskryptorem pliku.
.TP 
\fBEFAULT\fP
\fIpathname\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 \fIpathname\fP napotkano zbyt wiele dowiązań
symbolicznych.
.TP 
\fBENAMETOOLONG\fP
Ścieżka \fIpathname\fP jest zbyt długa.
.TP 
\fBENOENT\fP
Składnik \fIpathname\fP nie istnieje lub jest wiszącym dowiązaniem
symbolicznym.
.TP 
\fBENOMEM\fP
Brak pamięci jądra.
.TP 
\fBENOTDIR\fP
Składnik \fIpathname\fP, który powinien być katalogiem w rzeczywistości
katalogiem nie jest.
.TP 
\fBENOTDIR\fP
(\fBfaccessat\fP())  \fIpathname\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ż
\fBioctl_iflags\fP(2).
.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 \fIpathname\fP
jest względną ścieżką, 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\-2008.
.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)).
.PP
\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.
.PP
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.
.PP
Plik jest dostępny tylko wówczas, gdy uprawnienia każdego z katalogów w jego
ścieżce \fIpathname\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.
.PP
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.
.PP
.\"
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.
.PP
.\" 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.
.PP
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
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
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 .
