chmod(2) System Calls Manual chmod(2) BEZEICHNUNG chmod, fchmod, fchmodat - Zugriffsrechte einer Datei andern BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include int chmod(const char *Pfadname, mode_t Modus); int fchmod(int dd, mode_t Modus); #include /* Definition der AT_*-Konstanten */ #include int fchmodat(int Verzdd, const char *Pfadname, mode_t Modus, int Schalter); Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)): fchmod(): Seit Glibc 2.24: _POSIX_C_SOURCE >= 199309L Glibc 2.19 bis 2.23 _POSIX_C_SOURCE Glibc 2.16 bis 2.19: _BSD_SOURCE || _POSIX_C_SOURCE Glibc 2.12 bis 2.16: _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L Glibc 2.11 und alter: _BSD_SOURCE || _XOPEN_SOURCE >= 500 fchmodat(): Seit Glibc 2.10: _POSIX_C_SOURCE >= 200809L Vor Glibc 2.10: _ATFILE_SOURCE BESCHREIBUNG Die Systemaufrufe chmod() und fchmod() andern die Modusbits einer Datei. (Die Dateimodusbits bestehen aus den Dateiberechtigungsbits sowie den Bits set-user-ID, set-group-ID und sticky). Diese Systemaufrufe unterscheiden sich nur in der Art, wie eine Datei angegeben wird: o chmod() andert den Modus der angegebenen Datei, deren Pfadname in Pfadname ubergeben wird. Falls sie ein symbolischer Link ist, wird dieser dereferenziert. o fchmod() andert den Modus der uber den offenen Dateideskriptor dd angegebenen Datei. Der neue Dateimodus wird in der Bit-Maske Modus angegeben, welche durch ODER-Verknupfung von null oder mehr der Folgenden erstellt wird: S_ISUID (04000) Set-User-ID (setzt die effektive Benutzerkennung des Prozesses bei execve(2)) S_ISGID (02000) Set-Group-ID (setzt die effektive Gruppenkennung fur execve(2); sperrt obligatorisch, wie in fcntl(2) beschrieben; bestimmt die Gruppe der Datei aus dem Elternverzeichnis, wie in chown(2) und mkdir(2) beschrieben S_ISVTX (01000) >>Sticky Bit<< (Schalter fur eingeschranktes Loschen, wie in unlink(2) beschrieben) S_IRUSR (00400) Leserechte fur Eigentumer S_IWUSR (00200) Schreibrechte fur Eigentumer S_IXUSR (00100) Ausfuhrungs-/Schreibrechte fur Eigentumer (>>suchen<< trifft fur Verzeichnisse zu und bedeutet, dass auf Eintrage innerhalb des Verzeichnisses zugegriffen werden kann) S_IRGRP (00040) Leserechte fur Gruppe S_IWGRP (00020) Schreibrechte fur Gruppe S_IXGRP (00010) Ausfuhrungs-/Schreibrechte fur Gruppe S_IROTH (00004) Leserechte fur andere S_IWOTH (00002) Schreibrechte fur andere S_IXOTH (00001) Ausfuhrungs-/Schreibrechte fur andere Die effektive UID des aufrufenden Prozesses muss auf den Eigentumer der Datei passen oder der Prozess muss privilegiert sein (Linux: er muss uber die Capability (Fahigkeit) CAP_FOWNER verfugen). Falls der aufrufende Prozess nicht privilegiert ist (Linux: er verfugt nicht uber die Capability CAP_FSETID) und die Gruppe der Datei nicht auf die effektive Gruppenkennung des Prozesses oder einer seiner zusatzlichen Gruppenkennungen passt, dann wird das Bit S_ISGID ausgeschaltet werden, ohne dass ein Fehler zuruckgegeben wird. Als Sicherheitsmassnahme konnen je nach Dateisystem die Set-User-ID- und Set-Group-ID-Ausfuhrungsbits ausgeschaltet werden, wenn eine Datei geschrieben wird. (Unter Linux geschieht das, wenn der schreibende Prozess nicht uber die CAP_FSETID-Capability verfugt.) Bei einigen Dateisystemen kann nur der Superuser das Sticky-Bit setzen, das moglicherweise eine besondere Bedeutung hat. Fur das Sticky-Bit, das Set-User-ID-Bit und das Set-Group-ID-Bit fur Verzeichnisse siehe inode(7). Fur NFS-Dateisysteme wirkt sich eine Beschrankung der Rechte sofort auf schon geoffnete Dateien aus, weil die Zugriffssteuerung auf dem Server erfolgt, der Client sich aber um die offenen Dateien kummert. Die Erweiterung der Rechte kann fur andere Clients verschoben werden, wenn fur sie die Zwischenspeicherung der Attribute aktiviert wurde. fchmodat() Der Systemaufruf fchmodat() funktioniert genauso wie chmod(), 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 chmod() 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 chmod()). Falls Pfadname absolut ist, wird Verzdd ignoriert. Schalter kann entweder 0 sein oder den folgenden Schalter enthalten: AT_SYMLINK_NOFOLLOW Wenn der Pfadname ein symbolischer Link ist, wird er nicht dereferenziert: es wird stattdessen mit dem Link selbst gearbeitet. Dieser Schalter ist gegenwartig nicht implementiert. Lesen Sie openat(2) fur eine Beschreibung der Notwendigkeit von fchmodat(). 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 bei chmod() sind im Folgenden aufgefuhrt: EACCES Eine Komponente des Pfad-Prafix darf nicht durchsucht werden. (Siehe auch path_resolution(7).) EBADF (fchmod()) Der Dateideskriptor dd ist ungultig. EBADF (fchmodat()) Der Pfadname ist relativ, aber Verzdd ist weder AT_FDCWD noch ein gultiger Dateideskriptor. EFAULT Pfadname zeigt aus dem fur Sie zuganglichen Adressraum heraus. EINVAL (fchmodat()) Unzulassiger Schalter in Schalter angegeben. EIO Es ist ein E/A-Fehler (engl. I/O) aufgetreten. 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 (fchmodat()) Pfadname ist relativ und Verzdd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein Verzeichnis ist. ENOTSUP (fchmodat()) Schalter spezifizierte AT_SYMLINK_NOFOLLOW, was nicht unterstutzt wird. EPERM Die effektive UID passt nicht auf den Eigentumer der Datei und der Prozess ist nicht privilegiert (Linux: Er verfugt nicht uber die Capability CAP_FOWNER). 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 Unterschiede C-Bibliothek/Kernel Die Wrapper-Funktion fchmodat() der GNU-C-Bibliothek implementiert die in dieser Seite beschriebene POSIX-spezifizierte Schnittstelle. Diese Schnittstelle unterscheidet sich vom zugrunde liegenden Linux-Systemaufruf, welcher kein Schalter-Argument hat. Anmerkungen zur Glibc Mit alteren Kernels, in denen fchmodat() nicht verfugbar ist, weicht die Glibc-Wrapper-Funktion auf chmod() 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. STANDARDS POSIX.1-2008. GESCHICHTE chmod() fchmod() 4.4BSD, SVr4, POSIX.1-2001. fchmodat() POSIX.1-2008. Linux 2.6.16, Glibc 2.4. SIEHE AUCH chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Daniel Kobras , Martin Eberhard Schauer , Helge Kreutzmann und Mario Blattermann 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 chmod(2)