Provided by: manpages-de-dev_2.5-1_all 

BEZEICHNUNG
chmod, fchmod, fchmodat - Zugriffsrechte einer Datei ändern
ÜBERSICHT
#include <sys/stat.h>
int chmod(const char *pathname, mode_t mode);
int fchmod(int fd, mode_t mode);
#include <fcntl.h> /* Definition der AT_*-Konstanten */
#include <sys/stat.h>
int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
Mit Glibc erforderliche 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 früher:
_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() ä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:
* chmod() ändert den Modus der angegebenen Datei, deren Pfadname in pathname übergeben wird. Falls sie
ein symbolischer Link ist, wird dieser dereferenziert.
* fchmod() ändert den Modus der über den offenen Dateideskriptor fd angegebenen Datei.
Der neue Dateimodus wird in der Bit-Maske mode festgelegt, welche durch ODER-Verknüpfung von null oder
mehr der Folgenden erstellt wird:
S_ISUID (04000) Set-User-ID (setzt die effektive Benutzer-ID des Prozesses bei execve(2))
S_ISGID (02000) Set-Group-ID (setzt die effektive Gruppen-ID für 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 für eingeschränktes Löschen, wie in unlink(2) beschrieben)
S_IRUSR (00400) Leserechte für Eigentümer
S_IWUSR (00200) Schreibrechte für Eigentümer
S_IXUSR (00100) Ausführungs-/Schreibrechte für Eigentümer (»suchen« trifft für Verzeichnisse zu und
bedeutet, dass auf Einträge innerhalb des Verzeichnisses zugegriffen werden kann)
S_IRGRP (00040) Leserechte für Gruppe
S_IWGRP (00020) Schreibrechte für Gruppe
S_IXGRP (00010) Ausführungs-/Schreibrechte für Gruppe
S_IROTH (00004) Leserechte für andere
S_IWOTH (00002) Schreibrechte für andere
S_IXOTH (00001) Ausführungs-/Schreibrechte für andere
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 Gruppen-ID des Prozesses oder einer seiner
zusätzlichen Gruppen-IDs 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 Zugriffskontrolle 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.
fchmodat()
Der Systemaufruf fchmodat() funktioniert genauso wie chmod(), außer den hier beschriebenen Unterschieden.
Falls der in pathname ü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 chmod() für einen relativen Pfadnamen erfolgt).
Falls pathname relativ ist und dirfd den besonderen Wert AT_FDCWD annimmt wird pathname als relativ zum
aktuellen Arbeitsverzeichnis des aufrufenden Prozesses interpretiert (wie chmod()).
Falls pathname absolut ist wird dirfd ignoriert.
flags kann entweder 0 sein oder die 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 gegenwärtig nicht implementiert.
Lesen Sie openat(2) für eine Beschreibung der Notwendigkeit von fchmodat().
RÜCKGABEWERT
Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend
gesetzt.
FEHLER
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:
EACCES Eine Komponente des Pfad-Präfix darf nicht durchsucht werden. (Siehe auch path_resolution(7).)
EFAULT pathname zeigt aus dem für Sie zugänglichen Adressraum heraus.
EIO Es ist ein E/A-Fehler (engl. I/O) aufgetreten.
ELOOP Bei der Auflösung von pathname wurden zu viele symbolische Links gefunden.
ENAMETOOLONG
pathname 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 Die effektive UID passt nicht auf den Eigentümer der Datei und der Prozess ist nicht privilegiert
(Linux: Er verfügt nicht über die Capability CAP_FOWNER).
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 bei fchmod() sind im Folgenden aufgeführt:
EBADF Der Dateideskriptor fd ist ungültig.
EIO Siehe oben.
EPERM Siehe oben.
EROFS Siehe oben.
Die gleichen Fehler, die bei chmod() auftreten, können auch bei fchmodat() auftreten. Die folgenden
zusätzlichen Fehler können bei fchmodat() auftreten:
EBADF dirfd ist kein zulässiger Dateideskriptor.
EINVAL Unzulässiger Schalter in flags angegeben.
ENOTDIR
Pfadname ist relativ und dirfd ist ein Dateideskriptor, der sich auf eine Datei bezieht, die kein
Verzeichnis ist.
ENOTSUP
flags spezifizierte AT_SYMLINK_NOFOLLOW, was nicht unterstützt wird.
VERSIONEN
fchmodat() wurde zu Linux in Kernel 2.6.16 hinzugefügt; Bibliotheksunterstützung wurde zu Glibc in
Version 2.4 hinzugefügt.
KONFORM ZU
chmod(), fchmod(): 4.4BSD, SVr4, POSIX.1-2001i, POSIX.1-2008.
fchmodat(): POSIX.1-2008.
ANMERKUNGEN
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 ä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 dirfd entspricht.
SIEHE AUCH
chmod(1), chown(2), execve(2), open(2), stat(2), inode(7), path_resolution(7), symlink(7)
KOLOPHON
Diese Seite ist Teil der Veröffentlichung 4.15 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 Daniel Kobras <kobras@linux.de>, Helge Kreutzmann
<debian@helgefjell.de>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.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
<debian-l10n-german@lists.debian.org>.
Linux 15. September 2017 CHMOD(2)