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

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)