Provided by: manpages-de_4.13-4_all bug

BEZEICHNUNG

       path_resolution - Wie ein Pfadname zu einer Datei aufgelöst wird

BESCHREIBUNG

       Einige  UNIX/Linux-Systemaufrufe  haben  als  Parameter einen oder mehrere Dateinamen. Ein
       Dateiname (oder Pfadname) wird wie folgt aufgelöst:

   Schritt 1: Start des Auflösungsprozesses
       Falls der Pfadname mit dem Zeichen »/« beginnt, wird das Wurzelverzeichnis des aufrufenden
       Prozesses   als  Startverzeichnis  beim  Nachschlagen  verwandt.  Ein  Prozess  erbt  sein
       Wurzelverzeichnis von seinem Elternprozess. Normalerweise wird dies das  Wurzelverzeichnis
       der  Dateihierarchie  sein.  Durch  die  Verwendung  des  Systemaufrufs chroot(2) kann ein
       Prozess ein anderes Wurzelverzeichnis erhalten oder er kann  mittels  openat2(2)  mit  dem
       gesetzten Schalter RESOLVE_IN_ROOT temporär ein anderes Wurzelverzeichnis erhalten.

       Ein  Prozess kann einen komplett privaten Einhängenamensraum erhalten, falls er—oder einer
       seiner Vorgänger—durch einen Systemaufruf von clone(2) mit gesetztem Schalter  CLONE_NEWNS
       gestartet wurde. Dieser handhabt den »/«-Anteil des Pfadnamens.

       Falls der Pfadname nicht mit dem Zeichen »/« beginnt, ist das Nachschlage-Startverzeichnis
       für den Pfadauflösungsprozess das aktuelle Arbeitsverzeichnis  des  Prozesses  —  oder  im
       Falle  von  Systemaufrufen  im  Stil  von  openat(2),  das Argument dfd (oder das aktuelle
       Arbeitsverzeichnis, falls  AT_FDCWD  als  Argument  dfd  übergeben  wurde).  Das  aktuelle
       Arbeitsverzeicnis  wird  vom  Elternprozess  geerbt  und  kann  mittels  des Systemaufrufs
       chdir(2) geändert werden.

       Pfadnamen, die mit dem Zeichen »/«  beginnen,  werden  absolute  Pfadnamen  genannt.  Alle
       anderen Pfadnamen heißen relative Pfadnamen.

   Schritt 2: Ablaufen entlang des Pfades
       Das  aktuelle  Nachschlageverzeichnis  wird  auf das Nachschlage-Startverzeichnis gesetzt.
       Jetzt wird für jede nicht abschließende  Komponente  des  Pfadnamens  diese  im  aktuellen
       Nachschlageverzeichnis  nachgeschlagen. Hierbei ist eine Komponente eine Teilzeichenkette,
       die durch das Zeichen »/« abgetrennt wird.

       Falls der Prozess  über  keine  Suchberechtigungen  im  aktuellen  Nachschlage-Verzeichnis
       verfügt, wird der Fehler EACCES (»Keine Berechtigung«) zurückgeliefert.

       Falls  die Komponente nicht gefunden wird, wird der Fehler ENOENT (»Datei oder Verzeichnis
       nicht gefunden«) zurückgeliefert.

       Falls eine Komponente gefunden wird, aber weder ein Verzeichnis noch ein symbolischer Link
       ist, wird der Fehler ENOTDIR (»Ist kein Verzeichnis«) zurückgeliefert.

       Falls   die   Komponente  gefunden  wird  und  ein  Verzeichnis  ist,  wird  das  aktuelle
       Nachschlage-Verzeichnis auf  dieses  Verzeichnis  gesetzt  und  zur  nächsten  Komponenten
       gewechselt.

       Falls  die  Komponente  gefunden wird und ein symbolischer Link (Symlink) ist, wird zuerst
       dieser symbolische Link  aufgelöst  (mit  dem  anfänglichen  Nachschlage-Verzeichnis).  Im
       Fehlerfall  wird  dieser  Fehler zurückgeliefert. Falls das Ergebnis kein Verzeichnis ist,
       wird der Fehler ENOTDIR  zurückgeliefert.  Falls  die  Auflösung  des  symbolischen  Links
       erfolgreich    ist    und    ein    Verzeichnis    zurückliefert,    wird   das   aktuelle
       Nachschlage-Verzeichnis  auf  dieses  Verzeichnis  gesetzt  und  zur  nächsten  Komponente
       gewechselt.  Bachten  Sie, dass dieser Auflösungsprozess Rekursionen enthalten kann, falls
       die Präfixkomponente (»dirname«)  eines  Pfadnamens  einen  Dateinamen  enthält,  der  ein
       symbolischer  Link  ist,  der sich auf ein Verzeichnis auflöst (wobei die Präfixkomponente
       dieses Verzeichnisses einen symbolischen Link enthalten könnte  und  so  weiter).  Um  den
       Kernel  gegen  eine  Stapelüberlauf und auch eine Diensteverweigerung zu schützen, gibt es
       Begrenzungen zur Rekursionstiefe und der maximalen Anzahl an gefolgten symbolischen Links.
       Ein  Fehler  ELOOP  wird  zurückgeliefert, wenn das Maximum überschritten wurde (»Zu viele
       Ebenen aus symbolischen Links«).

       Derzeit ist in Linux die  maximale  Anzahl  von  beim  Auflösen  von  Pfadnamen  gefolgten
       symbolischen  Links  auf  40  begrenzt.  In  Kerneln  vor  2.6.18  war  die Begrenzung der
       Rekursionstiefe 5. Seit Linux 2.6.18 wurde diese Begrenzung auf 8  erhöht.  In  Linux  4.2
       wurde der Code für die Pfadnamenauflösung überarbeitet, um die Verwendung von Rekursion zu
       beseitigen, so dass die einzige verbliebene Begrenzung die maximalen  40  Auflösungen  für
       den gesamten Pfadnamen ist.

       Die  Auflösung  symbolischer  Links während dieser Stufe kann mittels openat2(2) durch den
       gesetzten Schalter RESOLVE_NO_SYMLINKS verhindert werden.

   Schritt 3: Finden des finalen Eintrags
       Das Nachschlagen der finalen Komponente des Pfadnamens erfolgt genau  wie  der  von  allen
       anderen  Komponenten,  wie  im vorherigen Schritt beschrieben, mit zwei Unterschieden: (i)
       die  finale  Komponente  muss  kein  Verzeichnis   sein   (zumindest   soweit,   wie   der
       Pfadauflösungsprozess  betroffen  ist  –  es  mag ein Verzeichnis oder keines sein müssen,
       abhängig von den Anforderungen des spezifischen  Systemaufrufs)  und  (ii)  es  ist  nicht
       unbedingt  ein  Fehler,  falls  die  Komponente  nicht gefunden wird – vielleicht wird sie
       gerade erstellt. Die Details der Behandlung des  abschließenden  Eintrags  werden  in  den
       Handbuchseiten der jeweiligen Systemaufrufe beschrieben.

   . und ..
       Herkömmlicherweise  hat  jedes  Verzeichnis zwei Einträge (».« und »..«), die sich auf das
       Verzeichnis selbst bzw. sein übergeordnetes Verzeichnis beziehen.

       Der Pfadauflösungsprozess wird annehmen, dass  diese  zwei  Einträge  ihre  konventionelle
       Bedeutung  haben, unabhängig davon, ob sie im physischen Dateisystem tatsächlich vorhanden
       sind.

       Sie können nicht höher als die Wurzel aufsteigen: »/..« ist zu »/« identisch.

   Einhängepunkte
       Nach einem Befehl »mount Gerät Pfad« bezieht sich der Pfadname »Pfad« auf die  Wurzel  der
       Dateisystemhierarchie  auf  dem  Gerät  »Gerät« und nicht auf etwas, worauf es sich vorher
       bezog.

       Sie können sich außerhalb des eingehängten Dateisystems bewegen:  »Pfad/..«  bezieht  sich
       auf  das  übergeordnete  Verzeichnis  von  »Pfad«  außerhalb der Dateisystemhierarchie von
       »Gerät«.

       Durchlauf  von  Einhängepunkten  kann  mittels  openat2(2)  mit  dem  gesetzten   Schalter
       RESOLVE_NO_XDEV  verhindert  werden (beachten Sie allerdings, dass dies auch den Durchlauf
       von Bind-Einhängungen beschränkt).

   Abschließende Schrägstriche
       Falls ein Pfadname mit einem »/« endet, der die Auflösung der vorherigen Komponente  gemäß
       Schritt 2 erzwingt: Sie muss existieren und sich auf ein Verzeichnis auflösen. Andernfalls
       wird ein abschließender »/« ignoriert. (Oder ein Pfadname mit einem abschließenden »/« ist
       äquivalent zu einem Pfadnamen, der durch Anhängen von ».« an ihn erhalten wird.)

   Finaler Symlink
       Falls  die  letzte  Komponente  des  Pfadnamens  ein  symbolischer  Link ist, hängt es vom
       Systemaufruf ab, ob die Datei, auf die referenziert wird, ein symbolischer Link  ist  oder
       das  Ergebnis  der  Pfadauflösung  seiner  Inhalte.  Beispielsweise  wird der Systemaufruf
       lstat(2) auf einem Symlink agieren, während stat(2) auf der  Datei  agiert,  auf  die  der
       Symlink zeigt.

   Längenbeschränkung
       Es  gibt eine maximale Länge für Pfadnamen. Falls der Pfadname (oder ein Zwischenpfadname,
       der beim Auflösen von symbolischen Links erhalten wurde) zu  lang  ist,  wird  ein  Fehler
       ENAMETOOLONG zurückgeliefert (»Der Dateiname ist zu lang«).

   Leere Pfadnamen
       Im  ursprünglichen  UNIX  bezogen  sich  leere  Pfadnamen  auf  das  aktuelle Verzeichnis.
       Heutzutage beschließt POSIX, dass ein leerer Pfadname nicht erfolgreich  aufgelöst  werden
       darf. Linux liefert in diesem Fall ENOENT zurück.

   Berechtigungen
       Die  Berechtigungsbits einer Datei bestehen aus drei Gruppen von drei Bits: siehe chmod(1)
       und stat(2). Die erste Gruppe der drei wird verwandt, wenn die  effektive  Benutzerkennung
       des  aufrufenden  Prozesses  identisch  zu der Eigentümerkennung der Datei ist. Die zweite
       Gruppe der drei wird  verwandt,  wenn  die  Gruppenkennung  der  Datei  entweder  mit  der
       effektiven   Gruppenkennung   des   aufrufenden  Prozesses  übereinstimmt  oder  eine  der
       ergänzenden  Gruppenkennungen  des  aufrufenden  Prozesses  ist  (wie  durch  setgroups(2)
       gesetzt). Falls nichts davon zutrifft, wird die dritte Gruppe verwandt.

       Von  den  drei verwandten Bits bestimmt das erste Bit die Leseberechtigung, das zweite die
       Schreibberechtigung und das letzte  die  Ausführberechtigung  im  Falle  von  gewöhnlichen
       Dateien oder die Suchberechtigung im Falle von Verzeichnissen.

       Linux  verwendet fsuid anstelle der effektiven Benutzerkennung bei Berechtigungsprüfungen.
       Normalerweise ist die fsuid identisch mit der effektiven Benutzerkennung, aber  die  fsuid
       kann mit dem Systemaufruf setfsuid(2) geändert werden.

       (Hier  steht »fsuid« für etwas wie »Dateisystembenutzerkennung«. Das Konzept wurde für die
       Implementierung von NFS-Servern im Benutzerbereich zu einem Zeitpunkt benötigt, zu dem ein
       Prozess  ein  Signal  zu einem anderen Prozess mit der gleichen effektiven Benutzerkennung
       senden konnte. Dies ist jetzt veraltet. Niemand sollte setfsuid(2) verwenden.)

       Auf ähnliche Weise verwendet Linux die fsgid  (»Dateisystemgruppenkennung«)  anstelle  der
       effektiven Gruppenkennung. Siehe setfsgid(2).

   Umgehen von Berechtigungsprüfungen: Superuser und Capabilitys
       Auf   einem  traditionellen  UNIX-System  ist  der  Superuser  (root,  Benutzerkennung  0)
       allmächtig und umgeht alle Berechtigungseinschränkungen beim Zugriff auf Dateien.

       Unter  Linux   sind   die   Superuser-Privilegien   in   Capabilitys   aufgeteilt   (siehe
       capabilities(7)).  Zwei  Capabilitys  sind  für  Dateiberechtigungsüberprüfungen relevant:
       CAP_DAC_OVERRIDE und CAP_DAC_READ_SEARCH. (Ein Prozess hat diese Capabilitys, falls  seine
       fsuid 0 ist.)

       Die  Capability  CAP_DAC_OVERRIDE  setzt  alle  Berechtigungsprüfungen  außer  Kraft, aber
       gewährt   die   Ausführberechtigung    nur,    falls    mindestens    eines    der    drei
       Ausführ-Berechtigungs-Bits der Datei gesetzt ist.

       Die  Capability CAP_DAC_READ_SEARCH gewährt Lese- und Suchberechtigungen für Verzeichnisse
       und Leseberechtigungen für gewöhnliche Dateien.

SIEHE AUCH

       readlink(2), capabilities(7), credentials(7), symlink(7)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  5.10  des  Projekts  Linux-man-pages.  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/.

ÜBERSETZUNG

       Die   deutsche   Übersetzung   dieser   Handbuchseite   wurde   von    Helge    Kreutzmann
       <debian@helgefjell.de> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version 3 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 Mailingliste der Übersetzer ⟨debian-l10n-german@lists.debian.org⟩.