Provided by: manpages-de-dev_4.21.0-2_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 dirfd, 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   dirfd   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 dirfd 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 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  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

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

STANDARDS

       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.

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

           if (*endptr != '\0' {         /* Zeichenkette 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)

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