Provided by: manpages-de-dev_1.11-1_all bug

BEZEICHNUNG

       chown, fchown, lchown, fchownat - Besitzverhältnisse einer Datei ändern

ÜBERSICHT

       #include <unistd.h>

       int chown(const char *pathname, uid_t owner, gid_t group);
       int fchown(int fd, uid_t owner, gid_t group);
       int lchown(const char *pathname, uid_t owner, gid_t group);

       #include <fcntl.h>           /* Definition der AT_*-Konstanten */
       #include <unistd.h>

       int fchownat(int dirfd, const char *pathname,
                    uid_t owner, gid_t group, int flags);

   Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

       fchown(), lchown():
           _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
           || /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L

       fchownat():
           Seit Glibc 2.10:
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Bis Glibc 2.10:
               _ATFILE_SOURCE

BESCHREIBUNG

       Diese  Systemaufrufe  ändern  den Eigentümer und die Gruppe einer Datei. Die Systemaufrufe
       fchown() und lchown() unterscheiden sich nur in der Angabe der Datei:

       * chown() ändert die Besitzverhältnisse der von pathname angegebenen Datei. Falls das  ein
         symbolischer Link ist, wird er dereferenziert.

       * fchown()  ändert  die Besitzverhältnisse der Datei, die über den offenen Dateideskriptor
         fd festgelegt wird.

       * lchown() ist wie chown(), dereferenziert aber keine symbolischen Links.

       Nur ein privilegierter Prozess (Linux: verfügt über  die  CAP_CHOWN-Capability)  kann  den
       Eigentümer  einer  Datei  ändern. Der Eigentümer einer Datei kann die Gruppenzugehörigkeit
       der Datei in jede Gruppe ändern,  der  er  selber  angehört.  Ein  privilegierter  Prozess
       (Linux: mit CAP_SHOWN) kann die Gruppenzugehörigkeit beliebig ändern.

       Falls owner oder group als -1 übergeben werden, dann wird diese ID nicht geändert.

       Werden   der  Eigentümer  oder  die  Gruppe  einer  ausführbaren  Datei  von  einem  nicht
       privilegierten Nutzer geändert, werden die Modus-Bits S_ISUID und S_ISGID gelöscht.  POSIX
       legt nicht fest, ob dies auch dann geschehen sollte, wenn Root das chown() durchführt. Das
       Verhalten von Linux ist in diesem Falle abhängig von der Kernel-Version. Falls  die  Datei
       für  die  Gruppe  nicht  ausführbar  ist (d.h. eine, für die das S_IXGRP-Bit nicht gesetzt
       ist), zeigt das S_ISGID-Bit verbindliche Sperren (mandatory locks) für die  Datei  an  und
       wird nicht durch ein chown() gelöscht.

   fchownat()
       Der  Systemaufruf  fchownat() funktioniert genauso wie chown, außer den hier beschriebenen
       Unterschieden.

       Falls der in pathname übergebene Pfadname relativ ist  wird  er  als  relativ  zu  dem  im
       Dateideskriptor   dirfd   referenzierten  Verzeichnis  interpretiert  (statt  relativ  zum
       aktuellen Arbeitsverzeichnis des aufrufenden Prozesses,  wie  es  bei  chown()  für  einen
       relativen Pfadnamen erfolgt).

       Falls  pathname  relativ  ist und dirfd den besonderen Wert AT_FDCWD annimmt wird pathname
       als relativ zum aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert  (wie
       chown()).

       Falls pathname absolut ist wird dirfd ignoriert.

       Das  Schalter-Argument  ist  eine  Bitmaske,  die  durch bitweises ODER null oder mehr der
       folgenden Werte enthält:

       AT_EMPTY_PATH (seit Linux 2.6.39)
              Falls Pfadname eine leere Zeichenkette ist, wird mit der Datei gearbeitet, auf  die
              dirfd  verweist  (dies  kann mit dem O_PATH-Schalter von open(2) ermittelt werden).
              Falls dirfd is AT_FDCWD ist, erfolgt der Aufruf im aktuellen Arbeitsverzeichnis. In
              diesem  Fall  kann  sich  dirfd  auf  jeden  Dateityp beziehen, nicht unbedingt ein
              Verzeichnis. Dieser Schalter ist Linux-spezifisch; definieren Sie  _GNU_SOURCE,  um
              dessen Definition zu ermitteln.

       AT_SYMLINK_NOFOLLOW
              Wenn  der Pfadname ein symbolischer Link ist, wird er nicht dereferenziert: es wird
              stattdessen mit dem Link selbst gearbeitet, wie bei lchown(). In der Voreinstellung
              dereferenziert fchownat() symbolische Links, wie chown().

       Lesen Sie openat(2) für eine Beschreibung der Notwendigkeit von fchownat().

RÜCKGABEWERT

       Bei  Erfolg  wird  Null  zurückgegeben.  Bei  einem Fehler wird -1 zurückgegeben und errno
       entsprechend gesetzt.

FEHLER

       Je nach Dateisystem können andere als die unten aufgeführten Fehler zurückgegeben werden.

       Die allgemeineren Fehler von fchown() sind im Folgenden aufgeführt:

       EACCES Eine  Komponente  des  Pfad-Präfix  darf  nicht  durchsucht  werden.  (Siehe   auch
              path_resolution(7).)

       EFAULT pathname zeigt aus dem für Sie zugänglichen Adressraum heraus.

       ELOOP  Bei der Auflösung von pathname wurden zu viele symbolische Links gefunden.

       ENAMETOOLONG
              pathname ist zu lang.

       ENOENT Die Datei existiert nicht.

       ENOMEM Es war nicht genügend Kernel-Speicher verfügbar.

       ENOTDIR
              Eine Komponente des Pfad-Präfixes ist kein Verzeichnis.

       EPERM  Der  aufrufende  Prozess  hatte  nicht  die  benötigten Rechte (siehe oben), um den
              Eigentümer und/oder die Gruppe zu ändern.

       EROFS  Die angegebene Datei befindet sich auf einem nur lesbaren (read-only) Dateisystem.

       Die allgemeinen Fehler von fchown() sind im Folgenden aufgeführt:

       EBADF  Der Dateideskriptor ist ungültig.

       EIO    Bei der Bearbeitung des Inodes trat  ein  system-/hardwarenaher  E/A-Fehler  (engl.
              I/O) auf.

       ENOENT Siehe oben.

       EPERM  Siehe oben.

       EROFS  Siehe oben.

       Die  gleichen  Fehler,  die bei chown() auftreten, können auch bei fchownat auftreten. Die
       folgenden zusätzlichen Fehler können bei fchownat() auftreten:

       EBADF  dirfd ist kein zulässiger Dateideskriptor.

       EINVAL In flags wurde ein ungültiger Schalter angegeben.

       ENOTDIR
              pathname ist relativ und dirfd ist ein Dateideskriptor, der sich auf eine von einem
              Verzeichnis verschiedene Datei bezieht.

VERSIONEN

       fchownat()  wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde in
       Glibc in Version 2.4 hinzugefügt.

KONFORM ZU

       chown(), fchown(), lchown(): 4.4BSD, SVr4, POSIX.1-2001, POSIX.1-2008.

       Die Version aus 4.4BSD kann nur vom Superuser verwendet  werden  (d.h.,  normale  Benutzer
       können keine Dateien weggeben).

       fchownat(): POSIX.1-2008.

ANMERKUNGEN

   Eigentümerschaft neuer Dateien
       Wenn  eine  neue  Datei  erzeugt wird (zum Beispiel durch open(2) oder mkdir(2)), wird der
       Eigentümer der gleiche wie die  Dateisystem-Benutzer-ID  des  erzeugenden  Prozesses.  Die
       Gruppe  der  Datei  hängt  von  einer  Reihe  von  Faktoren ab, einschließlich der Art des
       Dateisystems, den beim Einhängen des Dateisystems verwendeten Optionen  und  der  (Nicht-)
       Aktivierung  des  Set-Group-ID-Modusbits  für  das  übergeordnete  Verzeichnis.  Falls das
       Dateisystem die Optionen -o grpid (oder synonym -o bsdgroups) und -o 0grpid (oder  synonym
       -o sysvgroups) von mount(8) unterstützt, dann sind die Vorschriften wie folgt:

       * Falls das Dateisystem mit -o grpid eingehängt wurde, wird die Gruppe der neuen Datei vom
         übergeordneten Verzeichnis übernommen.

       * Falls das Dateisystem mit -o nogrpid eingehängt wurde und das Set-Group-ID-Bit wurde für
         das  übergeordnete  Verzeichnis  deaktiviert,  wird die Gruppe einer neuen Datei auf die
         Dateisystem-GID des Prozesses gesetzt.

       * Falls das Dateisystem mit -o nogrpid eingehängt wurde und das Set-Group-ID-Bit wurde für
         das  übergeordnete  Verzeichnis  aktiviert,  wird  die  Gruppe  einer  neuen  Datei  vom
         übergeordneten Verzeichnis übernommen.

       Seit Linux 2.6.25 werden die Einhängeoptionen -o grpid und -o nogrpid von ext2, ext3, ext4
       und  XFS  unterstützt.  Dateisysteme,  die  diese  Optionen nicht unterstützen, folgen den
       -o nogrpid-Regeln.

   Anmerkungen zur Glibc
       Mit  älteren  Kernels,   in   denen   fchownat()   nicht   verfügbar   ist,   weicht   die
       Glibc-Wrapper-Funktion  auf chown() und lchown() aus. Wenn Pfadname ein relativer Pfadname
       ist, dann konstruiert die Glibc einen  Pfadnamen,  der  auf  jenem  symbolischen  Link  in
       /proc/self/fd, der dem Argument dirfd entspricht.

   NFS
       Die  Semantik  von  chown() wird auf NFS-Dateisystemen mit aktiviertem UID-Mapping bewusst
       verletzt. Außerdem wird bei allen Systemaufrufen, die auf den Dateiinhalt  zugreifen,  die
       Semantik  verletzt, da chown() einen sofortigen Entzug des Zugriffs bei bereits geöffneten
       Dateien bewirken kann. Zwischenspeicherung (Caching) seitens des  Clients  kann  zu  einer
       Verzögerung  zwischen dem Zeitpunkt der Änderung der Besitzverhältnisse, um einem Benutzer
       Zugriff zu ermöglichen, und dem Zeitpunkt, zu  dem  er  auf  anderen  Clients  tatsächlich
       zugreifen kann, führen.

   Historische Details
       Die  ursprünglichen  Linux-Systemaufrufe  chown(), fchown() und lchown() unterstützten nur
       16-Bit-Benutzer- und Gruppen-IDs. Anschließend fügte Linux 2.4 chown32(),  fchown32()  und
       lchown32()  zur  Unterstützung von 32-Bit-IDs hinzu. Die Glibc-Wrapper-Funktionen chown(),
       fchown() und lchown() gehen transparent mit den Variationen zwischen den  Kernel-Versionen
       um.

       In Linux-Versionen vor 2.1.81 (außer 2.1.46) folgte chown() nicht symbolischen Links. Seit
       Linux 2.1.81 folgt chown()  symbolischen  Links  und  es  gibt  einen  neuen  Systemaufruf
       lchown(),  der symbolischen Links nicht folgt. Ab Linux 2.1.86 hat dieser neue Aufruf (der
       die gleiche Semantik wie das alte chown() hat) die  gleiche  Systemaufruf-Nummer  (syscall
       number) und chown() erhielt die neu eingeführte Nummer.

BEISPIEL

       Das  folgende  Programm  ändert den Eigentümer der Datei im zweiten Befehlszeilen-Argument
       auf den Wert, der als erstes Befehlszeilen-Argument angegeben wird. Der neue Besitzer kann
       entweder als numerische Benutzer-ID oder als Benutzername (die mittels   getpwnam(3) durch
       einen Suchlauf in der System-Passwortdatei in eine Benutzer-ID umgewandelt wird) angegeben
       werden.

   Programmquelltext
       #include <pwd.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           uid_t uid;
           struct passwd *pwd;
           char *endptr;

           if (argc != 3 || argv[1][0] == '\0') {
               fprintf(stderr, "%s <Eigentümer> <Datei>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           uid = strtol(argv[1], &endptr, 10); /* eine numerische Zeichenkette
                                                  erlauben */

           if (*endptr != '\0') {         /* String war nicht rein numerisch */
               pwd = getpwnam(argv[1]);   /* versuchen, UID für den Benutzernamen
                                             zu bestimmen */
               if (pwd == NULL) {
                   perror("getpwnam");
                   exit(EXIT_FAILURE);
               }

               uid = pwd->pw_uid;
           }

           if (chown(argv[2], uid, -1) == -1) {
               perror("chown");
               exit(EXIT_FAILURE);
           }

           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       chmod(2), flock(2), path_resolution(7), symlink(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.04  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 http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die   deutsche   Übersetzung  dieser  Handbuchseite  wurde  von  Florian  Jenn  <jennf@tu-
       cottbus.de>,   Helge   Kreutzmann   <debian@helgefjell.de>,   Martin   Eberhard    Schauer
       <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

       Diese  Übersetzung  ist  Freie  Dokumentation;  lesen  Sie  die GNU General Public License
       Version  3  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 <debian-l10n-german@lists.debian.org>.