Provided by: manpages-de-dev_2.16-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():
           /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || _XOPEN_SOURCE >= 500
               || /* Glibc-Versionen <= 2.19: */ _BSD_SOURCE
       fchownat():
           Seit Glibc 2.10:
               _POSIX_C_SOURCE >= 200809L
           Vor 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.

       Wird   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; seit Linux 2.2.13
       wird  root  wie  jeder  andere  Benutzer  behandelt.  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.

       Wenn der Eigentümer oder  die  Gruppe  einer  Programmdatei  (durch  igendeinen  Benutzer)
       geändert werden, werden alle Capability-Mengen für diese Datei zurückgesetzt.

   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 Pfadname 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). In
              diesem  Fall  kann  sich  dirfd  auf  jeden  Dateityp  beziehen,  nicht  nur  einem
              Verzeichnis.   Falls   dirfd   AT_FDCWD   ist,  erfolgt  der  Aufruf  im  aktuellen
              Arbeitsverzeichnis.  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 Kernelspeicher 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.

       EPERM  Die   Datei   ist   als   unveränderlich   oder   nur-anhängbar   markiert   (siehe
              ioctl_iflags(2))

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

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

       EBADF  fd ist kein zulässiger offener Dateideskriptor.

       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 Unzulässiger Schalter in flags angegeben.

       ENOTDIR
              Pfadname  ist  relativ  und  dirfd ist ein Dateideskriptor, der sich auf eine Datei
              bezieht, die kein Verzeichnis ist.

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 Elternverzeichnis.  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
         Elternverzeichnis übernommen.

       * Falls das Dateisystem mit -o nogrpid eingehängt wurde und das Set-Group-ID-Bit wurde für
         das  Elternverzeichnis  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 Elternverzeichnis aktiviert, wird die Gruppe einer neuen Datei vom Elternverzeichnis
         übernommen.

       Unter  Linux 4.12 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 Gruppenkennungen. Anschließend fügte Linux 2.4 chown32(), fchown32()
       und lchown32() zur Unterstützung von 32-Bit-Kennungen 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 Benutzerkennung oder als  Benutzername  (die  mittels  getpwnam(3)
       durch einen Suchlauf in der System-Passwortdatei in eine Benutzerkennung 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

       chgrp(1), chown(1), chmod(2), flock(2), path_resolution(7), symlink(7)

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  5.03  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  Florian   Jenn   <jennf@tu-
       cottbus.de>,   Martin   Eberhard   Schauer  <Martin.E.Schauer@gmx.de>,  Mario  Blättermann
       <mario.blaettermann@gmail.com>,  Dr.  Tobias  Quathamer   <toddy@debian.org>   und   Helge
       Kreutzmann <debian@helgefjell.de> 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>.