chown

Autres langues

Langue: de

Version: 23. Mai 2000 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

BEZEICHNUNG

chown, fchown, lchown - Besitzverhältnisse einer Datei ändern

ÜBERSICHT

#include <sys/types.h>
#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);
int fchown(int fd, uid_t owner, gid_t group);
int lchown(const char *path, uid_t owner, gid_t group);

BESCHREIBUNG

Die Besitzverhältnisse der Datei, die durch path bzw. fd gegeben ist, werden geändert: neuer Eigentümer ist owner, neue Gruppe ist group. Nur der Super-User kann den Eigentümer einer Datei ändern. Der Eigentümer einer Datei kann die Gruppenzugehörigkeit der Datei in jede Gruppe ändern, der er selber angehört. Der Super-User kann die Gruppenzugehörigkeit beliebig ändern.

Wird als owner oder group -1 übergeben, wird die entsprechende ID nicht geändert.

Werden Eigentümer oder Gruppe einer ausführbaren Datei von einem Nicht-Super-User geändert, werden die Modus-Bits S_ISUID und S_ISGID gelöscht. POSIX legt nicht fest, ob dies auch dann geschehen sollte, wenn der Super-User chown durchführt. Das Verhalten von Linux ist in diesem Falle abhängig von der Kernelversion. Ist die Datei nicht ausführbar (d.h. das S_IXGRP Bit ist gelöscht), bedeutet ein gesetztes S_ISGID Bit verbindliche Sperren (mandatory locks) für die Datei. Dieses Bit wird dann von chown nicht geändert.

RÜCKGABEWERT

Bei Erfolg gibt chown Null zurück. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

FEHLER

Die häufigsten Fehler für chown sind unten aufgeführt. Je nach Dateisystem können andere Fehler zurückgegeben werden.
EPERM
Die effektive UID (Benutzer ID) entspricht nicht dem Eigentümer der Datei und ist auch nicht Null (d.h. Super-User). EPERM kann auch anzeigen, dass Eigentümer (owner) oder Gruppe (group) falsch angegeben wurden.
EROFS
Die angegebene Datei liegt auf einem schreibgeschützten (read-only) Dateisystem.
EFAULT
path zeigt auf eine Adresse außerhalb des gültigen Adressraums.
ENAMETOOLONG
path ist zu lang.
ENOENT
Die Datei ist nicht vorhanden.
ENOMEM
Es war nicht ausreichend Kernel-Speicher verfügbar.
ENOTDIR
Eine Komponente im Verzeichnisteil des Pfades (d.i. der vordere Teil bis zum Dateinamen ausschließlich) ist kein Verzeichnis.
EACCES
Die Berechtigung zum Durchsuchen eines Verzeichnisses im Pfad ist nicht gegeben.
ELOOP
Es wurden zu viele symbolische Links beim Auflösen von path gefunden.

Folgende Fehler können von fchown zurückgegeben werden:

EBADF
Der Dateideskriptor fd ist ungültig.
ENOENT
Siehe oben.
EPERM
Siehe oben.
EROFS
Siehe oben.
EIO
Ein (low-level) Ein-/Ausgabe-Fehler ist während der Änderung des Inodes aufgetreten.

ANMERKUNGEN

In Linux-Versionen vor 2.1.81 (außer 2.1.46) folgte chown nicht symbolischen Links. Ab Linux 2.1.81 folgt chown symbolischen Links und es gibt einen neuen Systemaufruf lchown, der symbolischen Links nicht folgt. Ab Linux 2.1.86 hat dieser neue Aufruf (der die gleiche Semantik wie das alte chown besitzt) die gleiche Systemaufruf-Nummer (syscall number) und chown erhielt die neu eingeführte Nummer.

Der Prototyp für fchown ist nur dann verfügbar, wenn __USE_BSD definiert ist.

KONFORM ZU

chown ist konform zu SVr4, SVID, POSIX und X/OPEN. Die 4.4BSD-Version kann nur vom Super-User benutzt werden (d.h. dass normale Benutzer keine Dateien abgeben können). SVr4 dokumentiert die Fehler EINVAL, EINTR, ENOLINK und EMULTIHOP, aber nicht ENOMEM. POSIX.1 dokumentiert nicht die Fehler ENOMEM und ELOOP.

Der fchown-Aufruf ist konform zu 4.4BSD und SVr4. SVr4 dokumentiert zusätzlich die Fehler EINVAL, EIO, EINTR und ENOLINK.

EINSCHRÄNKUNGEN

Die Semantik von chown() wird auf NFS-Dateisystemen mit aktiviertem UID-mapping (Umsetzung der Benutzerkennungen zwischen verschiedenen Rechnern) bewusst verletzt. Außerdem wird bei allen Systemaufrufen, die auf den Dateiinhalt zugreifen, die Semantik verletzt, da chown() einen sofortigen Entzug des Zugriffs bei bereits geöffneten Dateien bewirken kann. Zwischenspeicherung (caching) seitens des Clients kann zu einer Verzögerung zwischen dem Zeitpunkt der Änderung der Besitzverhältnisse, um einem Benutzer Zugriff zu ermöglichen, und dem Zeitpunkt, zu dem er auf anderen Clients tatsächlich zugreifen kann, führen.

SIEHE AUCH

chmod(2), flock(2).