jak priradit procesu capability

Jaroslav Snajdr jsnajdr na kerio.com
Úterý Květen 14 11:10:34 CEST 2002


Pavel Arnost wrote:

> nevite nekdo jak procesu pridelit linuxovou capability? se standardnim
> jadrem (zadna medusa, lids, ani rsbac)

Teoreticka predstava je ta, ze capability budou nejake flagy na
spustitelnem souboru a jadro si to pri spusteni prebere. Ale to asi
nefunguje.

Jestli mate proces bezici pod rootem, ktery chce omezit sve moznosti,
pouzijte funkce jako cap_set_proc z knihovny libcap.

Ja jsem resil problem, kdy mam daemona beziciho s pravy nejakeho bezneho
uzivatele, ktery chce ale bindovat porty < 1024. To je trochu
slozitejsi:

#include <sys/capability.h>
#include <linux/prctl.h>

cap_t caps;

/* Nech si root capabilites i po setuid */
prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);

/* Zmen UID/GID */
setgid(500);
setuid(500);

/* V teto chvili mam UID/GID 500, ale muzu vsechno co root - klidne se i
vratit na UID 0, protoze mam capability cap_setgid a cap_setuid */
caps = cap_from_text("cap_net_bind_service+ep");
cap_set_proc(caps);

V teto chvili bezi proces pod uzivatelem 500 a smi bindovat porty. Zadna
provedena zmena uz nejde vratit. Predpoklada se samozrejme, ze program
je spusten rootem.

-jns


Další informace o konferenci Linux