CHMOD(2) Systemaufrufe CHMOD(2)
chmod, fchmod - Zugriffsrechte einer Datei ndern.
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *Pfad, mode_t Rechte);
int fchmod(int fd, mode_t Rechte);
Die Zugriffsrechte der durch Pfad beziehungsweise fd angegebenen Datei
oder des Verzeichnisses werden gendert. Die Rechte werden angegeben
durch bitweises Oder der folgenden Werte:
S_ISUID 04000 Setze Benutzerkennung bei Ausfhrung;
S_ISGID 02000 Setze Gruppenkennung bei Ausfhrung;
S_ISVTX 01000 'Sticky-Bit' (Erklrung siehe unten);
S_IRUSR (S_IREAD)
00400 Leserechte fr Eigentmer;
S_IWUSR (S_IWRITE)
00200 Schreibrechte fr Eigentmer;
S_IXUSR (S_IEXEC)
00100 Ausfhrrechte fr Eigentmer, bei Verzeichnissen:
Eigentmer darf Verzeichnis durchsuchen;
S_IRGRP 00040 Leserechte fr Gruppe;
S_IWGRP 00020 Schreibrechte fr Gruppe;
S_IXGRP 00010 Ausfhrrechte fr Gruppe, bei Verzeichnissen:
Gruppe darf Verzeichnis durchsuchen;
S_IROTH 00004 Leserechte fr andere;
S_IWOTH 00002 Schreibrechte fr Gruppe;
S_IXOTH 00001 Ausfhrrechte fr andere, bei Verzeichnissen:
andere drfen Verzeichnis durchsuchen;
Die effektive Benutzerkennung des Prozesses muss entweder null sein,
oder sie muss mit der Kennung des Dateieigentmers bereinstimmen.
Ist die effektive Benutzerkennung des Prozesses nicht null und
entspricht die Gruppenzugehrigkeit der Datei nicht einer der Gruppen
des aufrufenden Prozesses, so wird das S_ISGID-Bit abgeschaltet, ohne
dass ein Fehler zurckgeliefert wird. Abhngig vom verwendeten Dateisys-
tem knnen die S_ISUID- und S_ISGID-Bits gelscht werden, sobald die
Datei beschrieben wird.
Auf manchen Dateisystemen darf lediglich der Administrator das Sticky-
Bit setzen. Das Sticky-Bit kann verschiedene Bedeutungen haben,
beispielsweise kann in Verzeichnissen mit gesetztem Sticky-Bit eine
Datei nur vom Dateieigentmer oder dem Administrator (root) gelscht wer-
den.
Auf NFS-Dateisystemen findet die Zugriffskontrolle auf dem Server
statt, whrend der Klient selbst seine offenen Dateien verwaltet. Ver-
schrfte Zugriffsrechte treten somit augenblicklich in Kraft. Erweiterte
Zugriffsrechte hingegen werden erst nach und nach an andere Klienten
weitergegeben.
Sind die Zugriffsrechte erfolgreich gendert, wird 0 zurckgegeben.
Tritt ein Fehler auf, wird -1 zurckgegeben und errno entsprechend der
Fehlerursache gesetzt.
Welche Fehler im einzelnen zurckgeliefert werden, hngt ab vom verwende-
ten Dateisystem. Die folgenden Auflistungen nennen lediglich die allge-
mein blichen.
Zunchste die Fehler fr chmod:
EPERM Die effektive Benutzerkennung ist weder null, noch entspricht
sie dem Eigentmer der Datei.
EROFS Die angegebene Datei befindet sich auf einem Dateisystem, das
nur lesbar ist.
EFAULT Pfad zeigt auf einen Speicherbereich auerhalb des erlaubten
Adressraums des Prozesses.
ENAMETOOLONG
Pfad ist zu lang.
ENOENT Der angegebene Pfadname existiert nicht.
ENOMEM Das Betriebssystem verfgt nicht ber ausreichend Speicher, um die
Anweisung auszufhren.
ENOTDIR
Eine Komponente von Pfad ist kein Verzeichnis.
EACCES Dem Prozess ist nicht erlaubt, eine Komponente von Pfad zu
durchsuchen.
ELOOP Pfad enthlt zu viele symbolische Verweise.
EIO Ein Ein-/Ausgabefehler ist aufgetreten.
bliche Fehler bei fchmod:
EBADF fd ist kein gltiger Dateideskriptor.
EROFS Siehe oben.
EPERM Siehe oben.
EIO Siehe oben.
Der chmod-Aufruf ist vereinbar mit SVr4, SVID, POSIX, X/OPEN und
4.4BSD. SVr4 legt die zustzlichen Fehler EINTR, ENOLINK und EMULTIHOP
fest, jedoch kein ENOMEM. In POSIX.1 fehlen die EFAULT, ENOMEM, ELOOP
und EIO Fehlerbedingungen sowie die Makros S_IREAD, S_IWRITE und
S_IEXEC.
Der fchmod-Aufruf ist vereinbar mit 4.4BSD und SVr4. SVr4 legt die
zustzlichen Fehler EINTR und ENOLINK fest. POSIX verlangt die fchmod-
Funktion, sofern zumindest eines von _POSIX_MAPPED_FILES und
_POSIX_SHARED_MEMORY_OBJECTS definiert ist. Zudem beschreibt es die
zustzlichen Fehler ENOSYS und EINVAL, nicht jedoch EIO.
Weder POSIX, noch X/OPEN dokumentieren das Sticky-Bit.
open(2), chown(2), execve(2), stat(2),
Linux 2.0.32 23. Januar 2001 CHMOD(2)