chmod(2) | System Calls Manual | chmod(2) |
chmod, fchmod, fchmodat - Zugriffsrechte einer Datei ändern
Standard-C-Bibliothek (libc, -lc)
#include <sys/stat.h>
int chmod(const char *Pfadname, mode_t Modus); int fchmod(int dd, mode_t Modus);
#include <fcntl.h> /* Definition der AT_*-Konstanten */ #include <sys/stat.h>
int fchmodat(int Verzdd, const char *Pfadname, mode_t Modus, int Schalter);
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 älter:
_BSD_SOURCE || _XOPEN_SOURCE >= 500
fchmodat():
Seit Glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Vor Glibc 2.10:
_ATFILE_SOURCE
Die Systemaufrufe chmod() und fchmod() ändern 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:
Der neue Dateimodus wird in der Bit-Maske Modus angegeben, welche durch ODER-Verknüpfung von null oder mehr der Folgenden erstellt wird:
Die effektive UID des aufrufenden Prozesses muss auf den Eigentümer der Datei passen oder der Prozess muss privilegiert sein (Linux: er muss über die Capability (Fähigkeit) CAP_FOWNER verfügen).
Falls der aufrufende Prozess nicht privilegiert ist (Linux: er verfügt nicht über die Capability CAP_FSETID) und die Gruppe der Datei nicht auf die effektive Gruppenkennung des Prozesses oder einer seiner zusätzlichen Gruppenkennungen passt, dann wird das Bit S_ISGID ausgeschaltet werden, ohne dass ein Fehler zurückgegeben wird.
Als Sicherheitsmaßnahme können je nach Dateisystem die Set-User-ID- und Set-Group-ID-Ausführungsbits ausgeschaltet werden, wenn eine Datei geschrieben wird. (Unter Linux geschieht das, wenn der schreibende Prozess nicht über die CAP_FSETID-Capability verfügt.) Bei einigen Dateisystemen kann nur der Superuser das Sticky-Bit setzen, das möglicherweise eine besondere Bedeutung hat. Für das Sticky-Bit, das Set-User-ID-Bit und das Set-Group-ID-Bit für Verzeichnisse siehe inode(7).
Für NFS-Dateisysteme wirkt sich eine Beschränkung der Rechte sofort auf schon geöffnete Dateien aus, weil die Zugriffssteuerung auf dem Server erfolgt, der Client sich aber um die offenen Dateien kümmert. Die Erweiterung der Rechte kann für andere Clients verschoben werden, wenn für sie die Zwischenspeicherung der Attribute aktiviert wurde.
Der Systemaufruf fchmodat() funktioniert genauso wie chmod(), 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 chmod() 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 chmod()).
Falls Pfadname absolut ist, wird Verzdd ignoriert.
Schalter kann entweder 0 sein oder den folgenden Schalter enthalten:
Lesen Sie openat(2) für eine Beschreibung der Notwendigkeit von fchmodat().
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno gesetzt, um den Fehler anzuzeigen.
Je nach Dateisystem können andere als die unten aufgeführten Fehler zurückgegeben werden.
Die allgemeineren Fehler bei chmod() sind im Folgenden aufgeführt:
fchmodat() wurde zu Linux in Version 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in Version 2.4 hinzugefügt.
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008.
fchmodat(): POSIX.1-2008.
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.
Mit älteren Kernels, in denen fchmodat() nicht verfügbar 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.
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
Die deutsche Übersetzung dieser Handbuchseite wurde von Daniel Kobras <kobras@linux.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de>, Helge Kreutzmann <debian@helgefjell.de> und Mario Blättermann <mario.blaettermann@gmail.com> 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.
5. Februar 2023 | Linux man-pages 6.03 |