Provided by: manpages-de-dev_1.11-1_all bug

BEZEICHNUNG

       capget, capset - Setzt/ermittelt die Capabilities von Thread(s)

ÜBERSICHT

       #include <sys/capability.h>

       int capget(cap_user_header_t hdrp, cap_user_data_t datap);

       int capset(cap_user_header_t hdrp, const cap_user_data_t datap);

BESCHREIBUNG

       Seit  Linux 2.2 ist die Macht des Superusers (Root) in eine Gruppe von diskreten Capabilities aufgeteilt.
       Jeder Thread hat eine  Gruppe  an  effektiven  Capabilities,  die  angeben,  welche  Capabilities  (falls
       zutreffend) er derzeit ausführen darf. Jeder Thread hat auch eine Gruppe an vererbbaren Capabilities, die
       über einen execve(2)-Aufruf weitergegeben werden können und eine Gruppe an erlaubten Capabilities, die er
       zu effektiven oder vererbbaren hinzufügen kann.

       Diese   zwei   Systemaufrufe   sind   die   rohe   Kernelschnittstelle   zum  Ermitteln  und  Setzen  der
       Thread-Capabilities. Die Systemaufrufe sind nicht nur Linux-spezifisch, auch  die  Kernel-API  wird  sich
       wahrscheinlich   ändern   und   die   Verwendung   dieser  Systemaufrufe  (insbesondere  das  Format  der
       cap_user_*_t-Typen) unterliegt  in  jeder  Kernel-Revision  Erweiterungen,  aber  alte  Programme  werden
       weiterhin funktionieren.

       Die  portablen  Schnittstellen sind cap_set_proc(3) und cap_get_proc(3); falls möglich, sollten Sie diese
       Schnittstellen in Anwendungen verwenden. Falls  Sie  die  Linux-Erweiterungen  in  Anwendungen  verwenden
       möchten, sollten Sie die leichter zu verwendenden Schnittstellen capsetp(3) und capgetp(3) verwenden.

   Aktuelle Details
       Nachdem Sie gewarnt wurden, einige aktuelle Kernel-Datails. Die Strukturen sind wie folgt definiert:

           #define _LINUX_CAPABILITY_VERSION_1  0x19980330
           #define _LINUX_CAPABILITY_U32S_1     1

                   /* V2 hinzugefügt in Linux 2.6.25; veraltet */
           #define _LINUX_CAPABILITY_VERSION_2  0x20071026
           #define _LINUX_CAPABILITY_U32S_2     2

                   /* V3 in Linux 2.6.26 hinzugefügt */
           #define _LINUX_CAPABILITY_VERSION_3  0x20080522
           #define _LINUX_CAPABILITY_U32S_3     2

           typedef struct __user_cap_header_struct {
              __u32 version;
              int pid;
           } *cap_user_header_t;

           typedef struct __user_cap_data_struct {
              __u32 effective;
              __u32 permitted;
              __u32 inheritable;
           } *cap_user_data_t;

       Die  Felder  effective,  permitted  und  inheritable  sind  Bitmasken  der in capabilities(7) definierten
       Capabilities. Beachten Sie, dass CAP_*-Werte Bitindizes sind und bitweise verschoben werden müssen, bevor
       per ODER auf die Bitfelder zugegriffen wird. Um die Strukturen zu definieren,  die  an  den  Systemaufruf
       übergeben   werden   sollen,   müssen   Sie   die   Namen   struct  __user_cap_header_struct  und  struct
       __user_cap_data_struct verwenden, da die Typedefs nur Zeiger sind.

       Kernel vor 2.6.25 bevorzugen 32-bit-Capabilities mit Version _LINUX_CAPABILITY_VERSION_1. In Linux 2.6.25
       wurden 64-bit-Capability-Sets hinzugefügt, mit Version  _LINUX_CAPABILITY_VERSION_2.  Allerdings  gab  es
       einen API-Glitch, und Linux 2.6.26 fügte _LINUX_CAPABILITY_VERSION_3 hinzu, um das Problem zu beheben.

       Beachten  Sie,  dass 64-Bit-Capabilities datap[0] und datap[1] verwenden, während 32-Bit-Capabilities nur
       datap[0] verwenden.

       In Kerneln, die Datei-Capabilities  unterstützen  (VFS-Capability-Unterstützung),  verhalten  sich  diese
       Systemaufrufe  etwas  anders.  Diese  Unterstützung wurde in Linux 2.6.24 hinzugefügt und wurde später in
       Linux 2.6.33 gefixt (nicht-optional).

       Für capget()-Aufrufe können die Capabilities eines Prozesses über  die  Angabe  der  Prozess-ID  mit  dem
       Feldwert hdrp->pid ermittelt werden.

   Mit VFS-Capability-Unterstützung
       VFS-Capability-Unterstützung  erstellt  eine  auf  Dateiattributen  basierende Methode zum Hinzufügen von
       Capabilities   für   privilegierte   ausführbare   Dateien.   Dieses   Privilegienmodell   ersetzt    die
       Kernel-Unterstützung  dafür,  dass ein Prozess asynchron die Capabilities eines anderen setzt. Das heißt,
       mit VFS-Unterstützung sind für Aufrufe von capset()  die  einzig  zulässigen,  gleichwertigen  Werte  für
       hdrp->pid 0 oder gettid(2).

   Ohne VFS-Capability-Unterstützung
       Wenn  der Kernel VFS-Capabilities nicht unterstützt, können Aufrufe von capset() auf die Capabilities des
       durch das pid-Feld von hdrp beschriebenen Threads zugreifen, wenn das Feld von Null verschieden ist; wenn
       pid gleich 0 ist, wird auf die Capabilities des aufrufenden Threads zugegriffen. Falls sich pid auf einen
       single-threaded Prozess bezieht, kann pid auch als herkömmliche Prozess-ID angegeben werden. Der  Zugriff
       auf  einen Thread eines Multithread-Prozesses erfordert eine Thread-ID vom Typ, den gettid(2) zurückgibt.
       Für capset() kann pid auch -1 sein, d.h. die Änderung wird für alle Threads  außer  dem  Aufrufenden  und
       init(1) durchgeführt; ein Wert kleiner als -1 bewirkt die Änderung für alle Mitglieder der Prozessgruppe,
       deren ID -pid ist.

       Für Details der Daten siehe capabilities(7).

RÜCKGABEWERT

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

       Die Aufrufe werden mit dem Fehler EINVAL fehlschlagen und das Feld version von hdrp auf  den  vom  Kernel
       bevorzugten  Wert  von  _LINUX_CAPABILITY_VERSION_?  setzen,  wenn  ein  nicht unterstützter version-Wert
       angegeben  wird.  Auf  diese   Weise   kann   herausgefunden   werden,   wie   die   derzeit   bevorzugte
       Capability-Revision lautet.

FEHLER

       EFAULT Ungültige  Speicheradresse. hdrp darf nicht NULL sein. datap darf NULL nur sein, wenn der Benutzer
              versucht, das vom Kernel unterstützte bevorzugte Capability-Versionsformat zu ermitteln.

       EINVAL Eines der Argumente war ungültig.

       EPERM  Es wurde versucht, eine Capability zu der erlaubten Menge hinzuzufügen oder eine Capability in der
              effektiven oder vererbbaren Menge zu setzen, die nicht in der erlaubten Menge enthalten ist.

       EPERM  Der Aufrufende versuchte, capset()  zu  verwenden,  um  die  Capabilities  eines  von  ihm  selbst
              verschiedenen  Threads zu verändern, hatte dazu aber nicht die benötigten Privilegien. Für Kernel,
              die VFS-Capabilities unterstützen, ist dies nie erlaubt. Für Kernel  ohne  VFS-Unterstützung  wird
              die  Capability  CAP_SETPCAP  benötigt. (Ein Fehler in Kerneln vor 2.6.11 führte dazu, dass dieser
              Fehler auch auftreten konnte, falls ein Thread ohne  diese  Capability  versuchte,  seine  eigenen
              Capabilities  zu  ändern,  indem  er  das Feld pid auf einen von numerisch Null verschiedenen Wert
              (d.h. den von getpid(2) zurückgelieferten Wert) anstatt 0 wählte.)

       ESRCH  Kein solcher Thread.

KONFORM ZU

       Diese Systemaufrufe sind Linux-spezifisch.

ANMERKUNGEN

       Die portable Schnittstelle der Capability-Abfrage- und -Setzfunktionen wird durch die  Bibliothek  libcap
       bereitgestellt, die unter folgender Adresse erhältlich ist:
       http://git.kernel.org/cgit/linux/kernel/git/morgan/libcap.git

SIEHE AUCH

       clone(2), gettid(2), capabilities(7)

KOLOPHON

       Diese  Seite  ist  Teil  der  Veröffentlichung  4.04  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 http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die deutsche Übersetzung dieser Handbuchseite wurde von Dr. Tobias  Quathamer  <toddy@debian.org>,  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                                             23. Juli 2015                                        CAPGET(2)