Provided by: manpages-de-dev_2.5-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 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). 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
              pathname  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 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

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

KOLOPHON

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