chmod

CHMOD(2)                    Linux-Programmierhandbuch                   CHMOD(2)



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 Benutzerkennung des
                         Prozesses bei execve(2))

       S_ISGID  (02000)  Set-Group-ID (setzt die effektive Gruppenkennung 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 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.

   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 Pfadname 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 5.08 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>, 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 <debian-l10n-german@lists.debian.org>.



Linux                          15. September 2017                       CHMOD(2)