.\" -*- 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 .\" .\" 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 .\" 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 .\" 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 \fP .PP \fBint access(const char *\fP\fIpathname\fP\fB, int \fP\fImode\fP\fB);\fP .PP \fB#include \fP /* Definicja stałych \fBAT_*\fP */ \fB#include \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 \fP /* Definicja stałych \fBAT_*\fP */ \fB#include \fP /* Definicja stałych \fBSYS_*\fP */ \fB#include \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 , Andrzej Krzysztofowicz i Michał Kułach . .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 .