bionic (2) capget.2.gz

Provided by: manpages-de-dev_2.5-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 benutzen.  Falls  Sie  die  Linux-Erweiterungen  in  Anwendungen  verwenden
       möchten, sollten Sie die leichter anzuwendende Schnittstellen capsetp(3) und capgetp(3) verwenden.

   Aktuelle Details
       Nachdem Sie gewarnt wurden, hier 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-Capabilities-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-Capabilities-Unterstützung
       VFS-Capabilitys  setzen  ein  erweitertes  Dateiattribut  ein  (siehe  xattr(7)),  um  das  Anhängen  von
       Capabilitys an Dateien zu erlauben. Dieses Privilegienmodell ersetzt die Kernel-Unterstützung dafür, dass
       ein   Prozess   asynchron  die  Capabilities  eines  anderen  setzt.  Das  heißt,  das  auf  Kerneln  mit
       VFS-Capability-Unterstützung beim Aufruf von capset() der einzige für hdrp->pid  erlaubte  Wert  0,  oder
       äquivalent der von gettid(2) zurückgelieferte Wert, ist.

   Ohne VFS-Capabilities-Unterstützung
       Auf  älteren  Kerneln,  die  keine  Unterstützung  für  VFS-Capabilities bieten, kann capset(), falls der
       Aufrufende über die Capability CAP_SETPCAP verfügt, nicht nur zum Ändern der Capabilities des Aufrufenden
       sondern  auch der Capabilities anderer Threads verwandt werden. Dieser Aufruf greift auf die Capabilities
       des durch das pid-Feld von hdrp beschriebenen Threads zu, 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  schlagen  mit  dem Fehler EINVAL fehl und das Feld version von hdrp wird auf den vom Kernel
       bevorzugten Wert von _LINUX_CAPABILITY_VERSION_?  gesetzt,  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.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 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>.