Provided by: manpages-de-dev_4.23.1-1_all bug

BEZEICHNUNG

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

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <unistd.h>

       int chown(const char *Pfadname, uid_t Eigentümer, gid_t Gruppe);
       int fchown(int fd, uid_t Eigentümer, gid_t Gruppe);
       int lchown(const char *Pfadname, uid_t Eigentümer, gid_t Gruppe);

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

       int fchownat(int Verzdd, const char *Pfadname,
                    uid_t Eigentümer, gid_t Gruppe, int Schalter);

   Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

       fchown(), lchown():
           /* Seit Glibc 2.12: */ _POSIX_C_SOURCE >= 200809L
               || _XOPEN_SOURCE >= 500
               || /* Glibc <= 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 Pfadname angegebenen Datei. Falls das ein
          symbolischer Link ist, wird er dereferenziert.

       •  fchown()  ändert die Besitzverhältnisse der Datei, die über den offenen Dateideskriptor
          fd angegeben 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 Eigentümer oder Gruppe 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 Pfadname übergebene Pfadname relativ ist  wird  er  als  relativ  zu  dem  im
       Dateideskriptor   Verzdd  referenzierten  Verzeichnis  interpretiert  (statt  relativ  zum
       aktuellen Arbeitsverzeichnis des aufrufenden Prozesses,  wie  es  bei  chown()  für  einen
       relativen Pfadnamen erfolgt).

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

       Falls Pfadname absolut ist, wird Verzdd 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   auf   der   durch   Verzdd
              referenzierten  Datei  gearbeitet  (die  mittels  des  Schalters O_PATH von open(2)
              erlangt worden sein kann). In diesem Fall  kann  sich  Verzdd  auf  jeden  Dateityp
              beziehen,  nicht  nur ein Verzeichnis. Falls Verzdd AT_FDCWD ist, agiert der Aufruf
              auf  dem  aktuellen  Arbeitsverzeichnis.  Dieser  Schalter  ist   Linux-spezifisch;
              definieren Sie _GNU_SOURCE, um seine Definition zu erlangen.

       AT_SYMLINK_NOFOLLOW
              Wenn  pathanme  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
       gesetzt, um den Fehler anzuzeigen.

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).)

       EBADF  (fchown()) dd ist kein zulässiger offener Dateideskriptor.

       EBADF  (fchownat()) Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gültiger
              Dateideskriptor.

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

       EINVAL (fchownat()) Unzulässiger Schalter in Schalter angegeben.

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

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

       ENAMETOOLONG
              Pfadname 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.

       ENOTDIR
              (fchownat())  Pfadname ist relativ und Verzdd ist ein Dateideskriptor, der sich auf
              eine Datei bezieht, die kein Verzeichnis ist.

       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.

VERSIONEN

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

STANDARDS

       POSIX.1-2008.

GESCHICHTE

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

       fchownat()
              POSIX.1-2008. Linux 2.6.16, Glibc 2.4.

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 Verzdd 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.

   Geschichtliche 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.

       Vor Linux 2.1.81 (außer 2.1.46) folgte chown() symbolischen Links nicht. 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.

BEISPIELE

       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 <sys/types.h>
       #include <unistd.h>

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

           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 nummerische Zeichenkette erlauben */

           if (*endptr != '\0') {         /* War keine reine nummerische Zeichenkette */
               pwd = getpwnam(argv[1]);   /* Versuchen, eine UID für den Benutzernamen zu erhalten */
               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)

Ü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 ⟨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⟩.