Subroutine chmod, fchmod oder fchmodat

Zweck

Ändert die Bit für den Basisdateimodus des Dateisystemobjekts.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <sys/stat.h>
int chmod (Path Mode)
const char *Path;
mode_t Mode;
int fchmod (FileDescriptorMode)
int FileDescriptor;
mode_t Mode;
int fchmodat (DirFileDescriptorPathMode, Flag)
int DirFileDescriptor;
const char *Path;
mode_t Mode;
int  Flag;

Beschreibung

Die Subroutine chmod legt die Zugriffsberechtigungen der Datei fest, die mit dem Parameter Pfad angegeben wird. Wenn Network File System (NFS) auf Ihrem System installiert ist, kann dieser Pfad zu einem anderen Knoten wechseln.

Verwenden Sie die Subroutine fchmod , um die Zugriffsberechtigungen für eine offene Datei festzulegen, auf die der Parameter FileDescriptor verweist.

Wenn FileDescriptor ein gemeinsam genutztes Speicherobjekt referenziert, wirkt sich die Subroutine fchmod auf die Dateiberechtigungsbits S_IRUSR, S_IWUSR, S_IRGRP, S_IWGRP, S_IROTHund S_IWOTH aus.

Die Zugriffssteuerungsinformationen werden entsprechend dem Parameter Modus festgelegt. Beachten Sie, dass diese Routinen jede vorhandene ACL ersetzen, die dem Dateisystemobjekt zugeordnet ist.

Das Unterprogramm fchmodat entspricht dem Unterprogramm chmod, wenn der Parameter Path einen absoluten Pfad angibt oder wenn der Parameter DirFileDescriptor auf AT_FDCWD gesetzt ist. Die zu ändernde Datei wird durch den relativen Pfad zu dem Verzeichnis bestimmt, das mit dem Parameter DirFileDescriptor anstelle des aktuellen Arbeitsverzeichnisses verbunden ist. Wenn das Verzeichnis ohne das Öffnungsflag O_SEARCH geöffnet wird, prüft die Subroutine mithilfe der aktuellen Berechtigungen des Verzeichnisses, ob Verzeichnissuchen zulässig sind. Wenn das Verzeichnis mit dem Flag O_SEARCH geöffnet wird, führt die Subroutine keine Prüfung durch.

Parameter

Element Beschreibung
FileDescriptor Gibt den Dateideskriptor einer offenen Datei oder eines gemeinsam genutzten Speicherobjekts an
Modus Gibt das Bitmuster an, das die Zugriffsberechtigungen bestimmt. Der Parameter Modus wird durch logisches ODER mit einem oder mehreren der folgenden Werte erstellt, die in der Datei sys/mode.h definiert sind:
S_ISUID
Aktiviert das Attribut setuid für eine ausführbare Datei. Ein Prozess, der dieses Programm ausführt, erhält die Zugriffsrechte des Dateieigners.
S_ISGID
Aktiviert das Attribut setgid für eine ausführbare Datei. Ein Prozess, der dieses Programm ausführt, erhält die Zugriffsrechte der Gruppe der Datei. Aktiviert außerdem das Attribut group-inheritance für ein Verzeichnis. Dateien, die in diesem Verzeichnis erstellt werden, haben eine Gruppe, die der Gruppe des Verzeichnisses entspricht.

Die folgenden Attribute gelten nur für Dateien, die direkt ausführbar sind. Sie haben keine Bedeutung, wenn sie auf ausführbare Textdateien wie Shell-Scripts und awk -Scripts angewendet werden.

S-ISVTX
Aktiviert das Attribut link/unlink für ein Verzeichnis. In diesem Verzeichnis kann keine Verbindung zu Dateien hergestellt werden. Die Verbindung zu Dateien kann nur aufgehoben werden, wenn der anfordernde Prozess Schreibberechtigung für das Verzeichnis hat und entweder der Eigner der Datei oder das Verzeichnis ist.
S-ISVTX
Aktiviert das Attribut Text speichern für eine ausführbare Datei. Die Zuordnung des Programms wird nach der Verwendung nicht aufgehoben. Dieses Attribut kann nur vom Rootbenutzer aktiviert werden. Wenn dieses Attribut von einem anderen Benutzer angegeben wird, wird es ignoriert.
S_ENFMT
Aktiviert die Satzsperre im Durchsetzungsmodus für eine reguläre Datei. Mit der Subroutine lockf angeforderte Dateisperren werden erzwungen.
_IRUSR
Ermöglicht dem Dateieigner das Lesen der Datei.
_IWUSR
Ermöglicht dem Dateieigner das Schreiben in die Datei.
S_IXUSR
Ermöglicht dem Eigner der Datei, sie auszuführen (oder das Verzeichnis zu durchsuchen)
_IRGRP
Ermöglicht der Gruppe der Datei, sie zu lesen.
_IWGRP
Berechtigt die Gruppe der Datei zum Schreiben in die Datei.
_IXGRP
Ermöglicht der Gruppe der Datei, sie auszuführen (oder das Verzeichnis zu durchsuchen).
S_IROTH
Ermöglicht anderen das Lesen der Datei.
_IWOTH
Ermöglicht anderen das Schreiben in die Datei.
S-IXOTH
Ermöglicht anderen, die Datei auszuführen (oder das Verzeichnis zu durchsuchen)

Es gibt andere Moduswerte, die mit der Subroutine mknod , aber nicht mit der Subroutine chmod festgelegt werden können.

Pfad Gibt den Pfadnamen der Datei an. Wenn bei fchmodat der DirFileDescriptor angegeben ist und Path relativ ist, dann gibt der DirFileDescriptor das effektive aktuelle Arbeitsverzeichnis für Path an.
DirFileDescriptor Gibt den Dateideskriptor eines geöffneten Verzeichnisses an, der als aktuelles Arbeitsverzeichnis für den Parameter Pfad verwendet wird. Wenn DirFileDescriptor gleich AT_FDCWD ist, wird der Parameter DirFileDescriptor ignoriert und das Argument Path gibt die vollständige Datei an.
Markierung Gibt ein Bitfeldargument an Wenn der Parameter Flag das Bit AT_SYMLINK_NOFOLLOW enthält und der Parameter Pfad eine symbolische Verbindung angibt, wird der Modus der symbolischen Verbindung geändert.

Rückgabewerte

Nach erfolgreicher Beendigung geben die Subroutinen chmod, fchmodund fchmodat den Wert 0 zurück. Wenn das Unterprogramm chmod, fchmod oder fchmodat nicht erfolgreich ist, wird der Wert -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler zu identifizieren.

Fehlercodes

Die Subroutine chmod oder fchmodat ist nicht erfolgreich und die Dateiberechtigungen bleiben unverändert, wenn eine der folgenden Bedingungen zutrifft:

Element Beschreibung
ENOTDIR Eine Komponente des Präfix Path ist kein Verzeichnis.
EACCES Die Suchberechtigung für eine Komponente des Präfix Path wird verweigert.
EFAULT Der Parameter Pfad verweist auf eine Position außerhalb des zugeordneten Adressraums des Prozesses.
ELOOP Beim Umsetzen des Parameters Pfad wurden zu viele symbolische Links gefunden.
ENOENT Die genannte Datei ist nicht vorhanden.
ENAMETOOLONG Eine Komponente des Parameters Pfad überschreitet 255 Zeichen oder der gesamte Parameter Pfad überschreitet 1023 Zeichen.
Die Subroutine fchmod ist nicht erfolgreich und die Dateiberechtigungen bleiben unverändert, wenn Folgendes zutrifft:
Element Beschreibung
EBADF Der Wert des Parameters FileDescriptor ist ungültig.
   
Die Subroutine chmod, fchmod oder fchmodat ist nicht erfolgreich und die Zugriffssteuerungsinformationen für eine Datei bleiben unverändert, wenn eine der folgenden Bedingungen zutrifft:
Element Beschreibung
EPERM Die effektive Benutzer-ID stimmt nicht mit dem Eigner der Datei überein und der Prozess verfügt nicht über die entsprechenden Berechtigungen.
EROFS Die benannte Datei befindet sich auf einem schreibgeschützten Dateisystem.
EIO Während der Operation ist ein E/A-Fehler aufgetreten.

Wenn NFS auf Ihrem System installiert ist, können die Subroutinen chmod und fchmod ebenfalls nicht erfolgreich sein, wenn Folgendes zutrifft:

Element Beschreibung
ESTALE Das Stammverzeichnis oder das aktuelle Verzeichnis des Prozesses befindet sich in einem virtuellen Dateisystem, das abgehängt wurde.
ETIMEDOUT Das Zeitlimit für die Verbindung wurde überschritten.

Die Subroutine fchmodat ist nicht erfolgreich und die Dateiberechtigungen bleiben unverändert, wenn eine der folgenden Bedingungen zutrifft:

Element Beschreibung
EBADF Der Parameter Path gibt keinen absoluten Pfad an und das Argument DirFileDescriptor ist weder AT_FDCWD noch ein gültiger Dateideskriptor.
EINVAL Der Wert des Arguments Flag ist ungültig.
ENOTDIR Der Parameter Path ist kein absoluter Pfad und DirFileDescriptor ist ein Dateideskriptor, der jedoch nicht mit einem Verzeichnis verknüpft ist.

Sicherheit

Zugriffssteuerung: Der Aufrufer muss über Suchberechtigung für alle Komponenten des Präfix Path verfügen.

Wenn Sie den Fehler EBUSY empfangen, schalten Sie das Attribut enforced locking im Parameter Mode um und wiederholen Sie die Operation. Das Attribut enforced locking sollte niemals für eine Datei verwendet werden, die Teil der Trusted Computing Base ist.