chown(2) System Calls Manual chown(2) BEZEICHNUNG chown, fchown, lchown, fchownat - Besitzverhaltnisse einer Datei andern BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int chown(const char *Pfadname, uid_t Eigentumer, gid_t Gruppe); int fchown(int fd, uid_t Eigentumer, gid_t Gruppe); int lchown(const char *Pfadname, uid_t Eigentumer, gid_t Gruppe); #include /* Definition der AT_*-Konstanten */ #include int fchownat(int Verzdd, const char *Pfadname, uid_t Eigentumer, 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 andern den Eigentumer und die Gruppe einer Datei. Die Systemaufrufe fchown() und lchown() unterscheiden sich nur in der Angabe der Datei: o chown() andert die Besitzverhaltnisse der von Pfadname angegebenen Datei. Falls das ein symbolischer Link ist, wird er dereferenziert. o fchown() andert die Besitzverhaltnisse der Datei, die uber den offenen Dateideskriptor fd angegeben wird. o lchown() ist wie chown(), dereferenziert aber keine symbolischen Links. Nur ein privilegierter Prozess (Linux: verfugt uber die CAP_CHOWN-Capability) kann den Eigentumer einer Datei andern. Der Eigentumer einer Datei kann die Gruppenzugehorigkeit der Datei in jede Gruppe andern, der er selber angehort. Ein privilegierter Prozess (Linux: mit CAP_SHOWN) kann die Gruppenzugehorigkeit beliebig andern. Falls Eigentumer oder Gruppe als -1 ubergeben werden, dann wird diese ID nicht geandert. Wird der Eigentumer oder die Gruppe einer ausfuhrbaren Datei von einem nicht privilegierten Nutzer geandert, werden die Modus-Bits S_ISUID und S_ISGID geloscht. POSIX legt nicht fest, ob dies auch dann geschehen sollte, wenn Root das chown() durchfuhrt. Das Verhalten von Linux ist in diesem Falle abhangig von der Kernel-Version; seit Linux 2.2.13 wird root wie jeder andere Benutzer behandelt. Falls die Datei fur die Gruppe nicht ausfuhrbar ist (d.h. eine, fur die das S_IXGRP-Bit nicht gesetzt ist), zeigt das S_ISGID-Bit verbindliche Sperren (mandatory locks) fur die Datei an und wird nicht durch ein chown() geloscht. Wenn der Eigentumer oder die Gruppe einer Programmdatei (durch igendeinen Benutzer) geandert werden, werden alle Capability-Mengen fur diese Datei zuruckgesetzt. fchownat() Der Systemaufruf fchownat() funktioniert genauso wie chown, ausser den hier beschriebenen Unterschieden. Falls der in Pfadname ubergebene 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() fur 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 enthalt: 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) fur eine Beschreibung der Notwendigkeit von fchownat(). RUCKGABEWERT Bei Erfolg wird Null zuruckgegeben. Bei einem Fehler wird -1 zuruckgegeben und errno gesetzt, um den Fehler anzuzeigen. FEHLER Je nach Dateisystem konnen andere als die unten aufgefuhrten Fehler zuruckgegeben werden. Die allgemeineren Fehler von fchown() sind im Folgenden aufgefuhrt: EACCES Eine Komponente des Pfad-Prafix darf nicht durchsucht werden. (Siehe auch path_resolution(7).) EBADF (fchown()) dd ist kein zulassiger offener Dateideskriptor. EBADF (fchownat()) Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gultiger Dateideskriptor. EFAULT Pfadname zeigt aus dem fur Sie zuganglichen Adressraum heraus. EINVAL (fchownat()) Unzulassiger 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 Auflosung von Pfadname wurden zu viele symbolische Links gefunden. ENAMETOOLONG Pfadname ist zu lang. ENOENT Die Datei existiert nicht. ENOMEM Es war nicht genugend Kernelspeicher verfugbar. ENOTDIR Eine Komponente des Pfad-Prafixes 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 benotigten Rechte (siehe oben), um den Eigentumer und/oder die Gruppe zu andern. EPERM Die Datei ist als unveranderlich oder nur-anhangbar 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 konnen 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 Eigentumerschaft neuer Dateien Wenn eine neue Datei erzeugt wird (zum Beispiel durch open(2) oder mkdir(2)), wird der Eigentumer der gleiche wie die Dateisystem-Benutzer-ID des erzeugenden Prozesses. Die Gruppe der Datei hangt von einer Reihe von Faktoren ab, einschliesslich der Art des Dateisystems, den beim Einhangen des Dateisystems verwendeten Optionen und der (Nicht-) Aktivierung des Set-Group-ID-Modusbits fur das Elternverzeichnis. Falls das Dateisystem die Optionen -o grpid (oder synonym -o bsdgroups) und -o 0grpid (oder synonym -o sysvgroups) von mount(8) unterstutzt, dann sind die Vorschriften wie folgt: o Falls das Dateisystem mit -o grpid eingehangt wurde, wird die Gruppe der neuen Datei vom Elternverzeichnis ubernommen. o Falls das Dateisystem mit -o nogrpid eingehangt wurde und das Set-Group-ID-Bit wurde fur das Elternverzeichnis deaktiviert, wird die Gruppe einer neuen Datei auf die Dateisystem-GID des Prozesses gesetzt. o Falls das Dateisystem mit -o nogrpid eingehangt wurde und das Set-Group-ID-Bit wurde fur das Elternverzeichnis aktiviert, wird die Gruppe einer neuen Datei vom Elternverzeichnis ubernommen. Unter Linux 4.12 werden die Einhangeoptionen -o grpid und -o nogrpid von ext2, ext3, ext4 und XFS unterstutzt. Dateisysteme, die diese Optionen nicht unterstutzen, folgen den -o nogrpid-Regeln. Anmerkungen zur Glibc Mit alteren Kernels, in denen fchownat() nicht verfugbar 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. Ausserdem wird bei allen Systemaufrufen, die auf den Dateiinhalt zugreifen, die Semantik verletzt, da chown() einen sofortigen Entzug des Zugriffs bei bereits geoffneten Dateien bewirken kann. Zwischenspeicherung (Caching) seitens des Clients kann zu einer Verzogerung zwischen dem Zeitpunkt der Anderung der Besitzverhaltnisse, um einem Benutzer Zugriff zu ermoglichen, und dem Zeitpunkt, zu dem er auf anderen Clients tatsachlich zugreifen kann, fuhren. Geschichtliche Details Die ursprunglichen Linux-Systemaufrufe chown(), fchown() und lchown() unterstutzten nur 16-Bit-Benutzer- und Gruppenkennungen. Anschliessend fugte Linux 2.4 chown32(), fchown32() und lchown32() zur Unterstutzung 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 (ausser 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 eingefuhrte Nummer. BEISPIELE Das folgende Programm andert den Eigentumer 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 #include #include #include int main(int argc, char *argv[]) { char *endptr; uid_t uid; struct passwd *pwd; if (argc != 3 || argv[1][0] == '\0') { fprintf(stderr, "%s \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 fur 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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Florian Jenn , Martin Eberhard Schauer , Mario Blattermann , Dr. Tobias Quathamer und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 chown(2)