Provided by: manpages-de-dev_1.4-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

           #define _LINUX_CAPABILITY_VERSION_2  0x20071026
           #define _LINUX_CAPABILITY_U32S_2     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;

       The effective, permitted, and inheritable fields are bit masks of the capabilities defined
       in  capability(7). Note the CAP_* values are bit indexes and need to be bit-shifted before
       ORing into the bit fields. To define the structures for passing to  the  system  call  you
       have  to  use  the struct __user_cap_header_struct and struct __user_cap_data_struct names
       because the typedefs are only pointers.

       Kernel vor 2.6.25 bevorzugen 32-Bit-Capabilities mit  Version  _LINUX_CAPABILITY_VERSION_1
       und Kernel 2.6.25+ bevorzugen 64-Bit-Capabilities mit Version _LINUX_CAPABILITY_VERSION_2.
       Beachten  Sie,  dass  64-Bit-Capabilities  datap[0]  und   datap[1]   verwenden,   während
       32-Bit-Capabilities nur datap[0] verwenden.

       Eine  weitere  Änderung  betrifft  das  Verhalten  dieser  Systemaufrufe  im  Hinblick auf
       Datei-Capabilities (VFS-Capability-Unterstützung). Diese Unterstützung  ist  derzeit  eine
       Compilierzeit-Option (hinzugefügt in Kernel 2.6.24).

       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 Funktionen 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 getpid(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(8)  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

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the
       project,     and    information    about    reporting    bugs,    can    be    found    at
       http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die   deutsche   Übersetzung   dieser   Handbuchseite   wurde   von    Tobias    Quathamer
       <toddy@debian.org>,  Helge  Kreutzmann  <debian@helgefjell.de> und Martin Eberhard Schauer
       <Martin.E.Schauer@gmx.de> 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>.