fchown

CHOWN(2)                    Linux-Programmierhandbuch                   CHOWN(2)



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

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

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

       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.

       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  dd 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  Verzdd ist kein zulässiger Dateideskriptor.

       EINVAL Unzulässiger Schalter in Schalter angegeben.

       ENOTDIR
              Pfadname ist relativ und Verzdd 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.

   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.

       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.

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[])
       {
           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.11 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 ⟨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⟩.



Linux                             22. März 2021                         CHOWN(2)