.\" -*- 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 .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" 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 "21. Dezember 2020" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG access, faccessat, faccessat2 \- prüft die Zugriffsrechte des Benutzers an einer Datei .SH ÜBERSICHT .nf \fB#include \fP .PP \fBint access(const char *\fP\fIPfadname\fP\fB, int \fP\fIModus\fP\fB);\fP \fB#include \fP/* Definition der AT_*\-Konstanten */ \fB#include \fP .PP \fBint faccessat(int \fP\fIVerzdd\fP\fB, const char *\fP\fIPfadname\fP\fB, int \fP\fIModus\fP\fB, int \fP\fISchalter\fP\fB);\fP /* Siehe aber auch C\-Bibliothek/Kernel\-Unterschiede, unten */ \fBint faccessat2(int \fP\fIVerzdd\fP\fB, const char *\fP\fIPfadname\fP\fB, int \fP\fIModus\fP\fB, int \fP\fISchalter\fP\fB);\fP .fi .PP .RS -4 Mit Glibc erforderliche Makros (siehe \fBfeature_test_macros\fP(7)): .RE .PP \fBfaccessat\fP(): .PD 0 .ad l .RS 4 .TP 4 Seit Glibc 2.10: _POSIX_C_SOURCE\ >=\ 200809L .TP Vor Glibc 2.10: _ATFILE_SOURCE .RE .ad .PD .SH BESCHREIBUNG \fBaccess\fP() prüft, ob der Prozess auf die Datei \fIPfadname\fP zugreifen kann. Falls \fIPfadname\fP ein symbolischer Link ist, werden die Zugriffsrechte der referenzierten Datei geprüft. .PP .\" F_OK is defined as 0 on every system that I know of. \fIModus\fP gibt an, welche Zugriffsprüfungen durchgeführt werden sollen. Das ist entweder der Wert \fBF_OK\fP oder eine Bitmaske, die aus einem der Werte \fBR_OK\fP, \fBW_OK\fP, \fBX_OK\fP und \fBF_OK\fP besteht (oder dem bitweisen ODER mehrerer dieser Werte). \fBF_OK\fP überprüft, ob die Datei existiert. \fBR_OK\fP, \fBW_OK\fP und \fBX_OK\fP überprüfen, ob die Datei existiert und entsprechend Lese\-, Schreib\- und Ausführungsrechte gewährt. .PP Diese Prüfung wird mit der \fIrealen\fP UID und der \fIrealen\fP GID des Prozesses durchgeführt und nicht mit den effektiven Kennungen, wie das beim tatsächlichen Versuch, eine Operation auszuführen, der Fall ist (z.B. mit \fBopen\fP(2) auf eine Datei zugreifen). Ähnlich verwendet die Prüfung für den Benutzer »root« die Menge der erlaubten Capabilities statt die Menge der effektiven Capabilities und für nicht\-root\-Benutzer verwendet die Prüfung die leere Menge an Capabilities. .PP Dadurch können »set\-UID«\-Programme und Programme, die mit Capabilities ausgestattet sind, leicht die Berechtigungen des Aufrufenden feststellen. Mit anderen Worten, \fBaccess\fP() beantwortet nicht die Frage: »Kann ich diese Datei lesen/schreiben/ausführen?«. Es beantwortet eine etwas andere Frage: »Unter der Annahme, dass ich ein »setuid«\-Programm bin: Kann \fIder Benutzer, der mich aufrief\fP, diese Datei lesen/schreiben/ausführen?«. Dies ermöglicht »set\-user\-ID«\-Programmen, bösartige Benutzer davon abzuhalten, Dateien zu lesen, die sie nicht lesen können sollten. .PP Falls der aufrufende Prozess privilegiert ist (d.\ h., seine reale UID ist null), wird eine \fBX_OK\fP\-Prüfung für eine reguläre Datei erfolgreich sein, wenn Ausführungsrechte für Eigentümer, Gruppe oder Andere gegeben sind. .SS faccessat() \fBfaccessat\fP() funktioniert genauso wie \fBaccess\fP(), außer mit den hier beschriebenen Unterschieden. .PP Falls der in \fIPfadname\fP übergebene Pfadname relativ ist, wird er als relativ zu dem vom Dateideskriptor \fIVerzdd\fP referenzierten Verzeichnis interpretiert (statt relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses, wie es bei \fBaccess\fP() für einen relativen Pfadnamen erfolgt). .PP Falls \fIPfadname\fP relativ ist und \fIVerzdd\fP den speziellen Wert \fBAT_FDCWD\fP annimmt, wird \fIPfadname\fP als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie \fBaccess\fP()). .PP Falls \fIPfadname\fP absolut ist, wird \fIVerzdd\fP ignoriert. .PP \fISchalter\fP wird durch bitweises ODER aus null oder mehr der folgenden Werte konstruiert: .TP \fBAT_EACCESS\fP Eine Zugriffsprüfung wird mittels der effektiven Benutzer\- und Gruppenkennungen ausgeführt. In der Voreinstellung verwendet \fBfaccessat\fP() die realen Kennungen (wie \fBaccess\fP()). .TP \fBAT_SYMLINK_NOFOLLOW\fP Falls \fIPfadname\fP ein symbolischer Link ist, wird er nicht dereferenziert: stattdessen wird eine Information zum Link selbst zurückgegeben. .PP .\" Lesen Sie \fBopenat\fP(2) für eine Beschreibung der Notwendigkeit von \fBfaccessat\fP(). .SS faccessat2() Die oben dargestellte Beschreibung von \fBfaccessat\fP() entspricht POSIX.1 und der von Glibc bereitgestellten Implementierung. Allerdings war die Glibc\-Implementierung eine nicht perfekte Nachbildung (siehe FEHLER), die die Tatsache kaschierte, dass der rohe Linux\-Systemaufruf \fBfaccessat\fP() über kein Argument \fISchalter\fP verfügt. Um eine korrekte Implementierung zu erlauben, fügte Linux 5.8 den Systemaufruf \fBfaccessat2\fP() hinzu, der das Argument \fISchalter\fP unterstützt und eine korrekte Implementierung der Wrapper\-Funktion \fBfaccessat\fP() erlaubt. .SH RÜCKGABEWERT Bei Erfolg (alle abgefragten Zugriffsrechte sind gegeben oder \fIModus\fP ist \fBF_OK\fP und die Datei existiert) wird Null zurückgegeben. Bei einem Fehler (mindestens eine in \fIModus\fP abgefragte Zugriffsart fehlt oder \fIModus\fP ist \fBF_OK\fP und die Datei existiert nicht oder ein anderer Fehler trat auf) wird \-1 zurückgegeben und \fIerrno\fP entsprechend gesetzt. .SH FEHLER \fBaccess\fP() und \fBfaccessat\fP() schlagen fehl, falls: .TP \fBEACCES\fP Die abgefragte Zugriffsart auf die Datei würde verwehrt oder das Suchen wird in einem der Verzeichnisse des Pfadpräfixes von \fIPfadname\fP verweigert (siehe auch \fBpath_resolution\fP(7)). .TP \fBELOOP\fP Bei der Auflösung von \fIPfadname\fP wurden zu viele symbolische Links gefunden. .TP \fBENAMETOOLONG\fP \fIPfadname\fP ist zu lang. .TP \fBENOENT\fP Eine Komponente von \fIPfadname\fP existiert nicht oder ist ein toter symbolischer Link. .TP \fBENOTDIR\fP Eine als Verzeichnis benutzte Komponente von \fIPfadname\fP ist kein Verzeichnis. .TP \fBEROFS\fP Es wurde Schreibberechtigung für eine Datei auf einem nur lesbaren Dateisystem abgefragt. .PP \fBaccess\fP() und \fBfaccessat\fP() können fehlschlagen, falls: .TP \fBEFAULT\fP \fIPfadname\fP zeigt aus dem für Sie zugänglichen Adressraum heraus. .TP \fBEINVAL\fP \fIModus\fP wurde falsch angegeben. .TP \fBEIO\fP Es ist ein E/A\-Fehler (engl. I/O) aufgetreten. .TP \fBENOMEM\fP Es war nicht genügend Kernelspeicher verfügbar. .TP \fBETXTBSY\fP Es wurde Schreibzugriff für ein ausführbares Programm abgefragt, das gerade ausgeführt wird. .PP Die folgenden Fehler können bei \fBfaccessat\fP() zusätzlich auftreten: .TP \fBEBADF\fP \fIVerzdd\fP ist kein zulässiger Dateideskriptor. .TP \fBEINVAL\fP Unzulässiger Schalter in \fISchalter\fP angegeben. .TP \fBENOTDIR\fP \fIPfadname\fP ist relativ und \fIVerzdd\fP ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. .SH VERSIONEN \fBfaccessat\fP() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde in Glibc in Version 2.4 hinzugefügt. .PP \fBfaccessat2\fP() wurde zu Linux in Version 5.8 hinzugefügt. .SH "KONFORM ZU" \fBaccess\fP(): SVr4, 4.3BSD, POSIX.1\-2001, POSIX.1\-2008. .PP \fBfaccessat\fP(): POSIX.1\-2008. .PP \fBfaccessat2\fP(): Linux\-spezifisch. .SH ANMERKUNGEN \fBWarnung\fP: Werden diese Aufrufe dazu verwandt, mittels \fBopen\fP(2) zu prüfen, ob einem Benutzer beispielsweise erlaubt ist, eine Datei zu öffnen, bevor dies tatsächlich erfolgt, führt dies zu einem Sicherheitsloch. Der Benutzer könnte diesen kurzen Zeitraum zwischen der Überprüfung und dem Öffnen der Datei benutzen, um sie zu verändern. \fBDarum sollte die Verwendung dieses Systemaufrufs vermieden werden.\fP (Im gerade beschriebenen Beispiel wäre eine sicherere Alternative, vorübergehend die effektive Benutzerkennung des Prozesses auf die reale Benutzerkennung zu setzen und dann \fBopen\fP(2) aufzurufen.) .PP \fBaccess\fP() löst immer symbolische Links auf. Wenn Sie Rechte eines symbolischen Links prüfen müssen, verwenden Sie \fBfaccessat\fP() mit dem Schalter \fBAT_SYMLINK_NOFOLLOW\fP. .PP Diese Aufrufe geben einen Fehler zurück, wenn irgendeine der Zugriffsarten in \fIModus\fP verwehrt wird, sogar wenn einige der anderen Zugriffsarten in \fIModus\fP gestattet sind. .PP .\" HPU-UX 11 and Tru64 5.1 do this. Falls der aufrufende Prozess über entsprechende Privilegien verfügt (d.\ h. Superuser ist), gestattet POSIX.1\-2001 einer Implementierung, für eine \fBX_OK\fP\-Prüfung Erfolg zu melden, auch wenn keines der Datei\-Ausführungsbits gesetzt ist. Linux tut das nicht. .PP Auf eine Datei kann nur zugegriffen werden, wenn jedes der Verzeichnisse im Pfadpräfix von \fIPfadname\fP suchenden (d.\ h. ausführenden) Zugriff zulässt. Wenn auf irgendein Verzeichnis nicht zugegriffen werden kann, schlägt unabhängig von den Zugriffsrechten für die Datei selbst der Aufruf von \fBaccess\fP() fehl. .PP Nur die Zugriffs\-Bits werden geprüft, nicht der Dateityp oder \-inhalt. Deshalb bedeutet ein als beschreibbar erkanntes Verzeichnis wahrscheinlich, dass in ihm Dateien erstellt werden können und nicht, dass das Verzeichnis als Datei geschrieben werden kann. Ebenso kann eine DOS\-Datei als »ausführbar« diagnostiziert werden, aber ein Aufruf von \fBexecve\fP(2) kann immer noch fehlschlagen. .PP .\" .\" Diese Aufrufe arbeiten wahrscheinlich nicht korrekt mit NFS\-Dateisystemen, für die UID\-Mapping aktiviert ist, weil das UID\-Mapping auf dem Server erfolgt und dem Client, der die Berechtigungen prüft, verborgen bleibt (NFS\-Versionen ab 3 führen die Überprüfung auf dem Server aus). Ähnliche Probleme können mit FUSE\-Einhängungen auftreten. .SS "Unterschiede C\-Bibliothek/Kernel" .\" Der reine \fBfaccessat\fP()\-Systemaufruf akzeptiert nur die ersten drei Argumente. Die Schalter \fBAT_EACCESS\fP und \fBAT_SYMLINK_NOFOLLOW\fP sind eigentlich in der Glibc\-Wrapper\-Funktion für \fBfaccessat\fP() implementiert. Falls einer dieser Schalter angegeben ist, dann nutzt die Wrapper\-Funktion \fBfstatat\fP(2), um die Zugriffsrechte zu ermitteln; siehe aber auch FEHLER. .SS "Anmerkungen zur Glibc" Wenn in älteren Kerneln \fBfaccessat\fP() nicht verfügbar sind und die Schalter \fBAT_EACCESS\fP und \fBAT_SYMLINK_NOFOLLOW\fP nicht angegeben sind, dann weicht die Glibc\-Wrapper\-Funktion auf \fBaccess\fP() aus. Wenn \fIPfadname\fP ein relativer Pfadname ist, konstruiert die Glibc einen Pfadnamen, der auf dem symbolischen Link in \fI/proc/self/fd\fP basiert, der dem \fIVerzdd\fP\-Argument entspricht. .SH FEHLER Da der Linux\-Kernel\-Systemaufruf \fBfaccessat\fP() das Argument \fISchalter\fP nicht unterstützt, stellte die Glibc\-Wrapperfunktion \fBfaccessat\fP() in Glibc 2.32 und älter eine Nachahmung bereit, die ACLs nicht berücksichtigt. Beginnend mit Glibc 2.33, vermeidet die Wrapper\-Funktion diesen Fehler, indem sie den Systemaufruf \fBfaccessat2\fP() verwendet, sofern er vom zugrundeliegenden Kernel unterstützt wird. .PP .\" This behavior appears to have been an implementation accident. Im Kernel 2.4 (und früher) ist das Verhalten bei der Handhabung von \fBX_OK\fP\-Prüfungen für Superuser etwas seltsam. Falls alle Kategorien der Ausführungsberechtigung für eine Datei, die kein Verzeichnis ist, deaktiviert sind, gibt nur die Zugriffsprüfung \-1 zurück, für die \fIModus\fP lediglich als \fBX_OK\fP angegeben ist; falls auch \fBR_OK\fP oder \fBW_OK\fP in \fIModus\fP angegeben ist, gibt \fBaccess\fP() für solche Dateien 0 zurück. Frühe 2.6\-Kernel (bis einschließlich 2.6.3) verhielten sich in der gleichen Weise wie 2.4\-Kernel. .PP In Kerneln vor 2.6.20 ignorierten diese Aufrufe den Effekt des Schalters \fBMS_NOEXEC\fP, wenn dieser für das Einhängen (den Aufruf von \fBmount\fP(2)) für das zugrunde liegende Dateisystem verwendet wurde. Seit Kernel 2.6.20 wird der Schalter \fBMS_NOEXEC\fP beachtet. .SH "SIEHE AUCH" \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) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux\-\fIman\-pages\fP. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter \%https://www.kernel.org/doc/man\-pages/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Elmar Jansen , Martin Schulze , Martin Eberhard Schauer , Mario Blättermann , Helge Kreutzmann und Dr. Tobias Quathamer erstellt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@\:lists.\:debian.\:org Mailingliste der Übersetzer .ME .