Provided by: manpages-de-dev_4.27.0-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 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 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 FS_IOC_SETFLAGS(2const)).

       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, basiert.

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

           if (*endptr != '\0') {         /* War keine reine numerische 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 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.

Linux man-pages 6.9.1                             15. Juni 2024                                         chown(2)