Sziasztok!
Nyers ethernet programozassal kapcs problema: fejleszteshez jo lenne, hogyha egy adott juzer is letre tudjon hozni PF_PACKET osztalyu socket-eket. Kerdes, hogy az ehhez szukseges CAP_NET_RAW `capatiblity`-t hogyan es/vagy hol kell tarsitani a megf. felhasznalohoz? Mondjuk bele'p a juzer, es onnantol kezdve neki ilyene ugy van...
szerk: igen, mindezt linux (debian) alatt, gondolom konfig-szinten ez elegge rendszer-specifikus.
koszonettel, A.
- 1122 megtekintés
Hozzászólások
Én csak RBAC rendszerek (Grsecurity, RSBAC, LIDS) esetén tudom a lehetőségét, hogy ezeket szabályozni lehet. Az átlagos unix userland nem tudom milyen lehetőséget ad erre.
Esetleg ez érdekes lehet.
Üdv:
Dw.
"Jegyezze fel a vádhoz - utasította Metcalf őrnagy a tizedest, aki tudott gyorsírni. - Tiszteletlenül beszélt a feljebbvalójával, amikor nem pofázott közbe."
- A hozzászóláshoz be kell jelentkezni
Esetleg ez érdekes lehet.
Igen, teljesen jogos, igy is meg lehet fogalmazni a problemat: ``mit kell beallitani ahhoz hogy egy adott mezei juzer is tudja futtatni a
tcpdump
-ot?''
Az persze hatarozottan jo lenne hogy ne kelljen hozza (semmi extra, se setuid-os, se semmilyen) progit inditani, hanem maga a login-folyamat tarsitja ezt hozza. vagy ha pid-hez is tarsithato es orokolheto, akkor egy setuid-os bash_profile is teljesen jo. barmi csak menjen :]
- A hozzászóláshoz be kell jelentkezni
Van egy olyan, hogy "pam_cap" modul. Ennek nézz utána szerintem. Nem tudok róla többet sajnos, mert egyszer kellett majdnem, és csak a neve maradt meg. Hasonlít a pam_limits-hez, szal az /etc/security alatt valami fileban tudsz capabilityket osztani userekhez/csoportokhoz.
- A hozzászóláshoz be kell jelentkezni
Igen, ez felig sikerult is. Tehat a getpcaps latja is, hogy a juzerem altal inditott processznek (shell) van cap_net_raw+i (inherit) capability-je. viszont valamiert ki kell adni ezt a varazs-parancsot, hogy
setcap cap_net_raw+ei /ez/a/program/amit/inditok
es csak akkor mukodik. igy viszont a fejlesztes kicsit macerasabb, mert ha ujraforditom a programot, akkor ez a capability amit a setcap beallit, elveszik. ujra root, stb, ami meg faraszto, pont ezt akarnank elkerulni...
de ezt nem ertem teljesen. ha a processznek van egy inheritalodo capability-je, akkor miert kell kulon me'g file-szinten is megmondani, hogy ez menjen, az meg ne...?
- A hozzászóláshoz be kell jelentkezni
Itt találtam, szerintem ez okozhatja a jelenséget amit írsz:
"Files have capabilities. Conceptually they have the same three bitmaps that processes have, but to avoid confusion we call them by other names. Only executable files have capabilities, libraries on't have capabilities (yet). The three sets are called the allowed set, the forced set, and the effective set.
The allowed set indicates what capabilities the executable is allowed to receive from an execing process. This means that during exec(), the capabilities of the old process are first masked against a set which indicates what the process gives away (the inheritable set of the process), and then they are masked against a set which indicates what capabilities the new process image is allowed to receive (the allowed set of the executable)."
- A hozzászóláshoz be kell jelentkezni
Hm, lehet hogy ez a file-rendszer szintu dolog megkerulhetetlen...?
The inheritable capabilities are the capabilities of the current process that should be inherited by a program executed by the current process. The permitted set of a process is masked against the inheritable set during exec(). Nothing special happens during fork() or clone(). Child processes and threads are given an exact copy of the capabilities of the parent process.
- A hozzászóláshoz be kell jelentkezni
Alapesetben szerintem nem kerülhető meg.
Viszont azt a függvényt ami ezt intézi az LSM jó esetben exportálja (tipp: bprm_secure_exec (???)), amit a security modulok overrideolhatnak. Azaz: meg kéne nézni, hogy a különböző security modulok (SELinux, AppArmor, LIDS, TOMOYO, SMACK, stb.) és nem LSM-en keresztüli RBAC rendszerek esetén figyeli-e a file alapú capabilityket.
Annyit megnéztem, hogy alapból Ubuntun a getcap az /usr/sbin/tcpdumpra üres stringgel tér vissza, azaz elvben itt nincs magán a fileon capability állítva, csak az apparmor profilban, szóval elképzelhetőnek tartom, hogy pl AppArmort (vagy más security rendszert) használva megoldhatóvá válik a problémád ...
- A hozzászóláshoz be kell jelentkezni
getcap az /usr/sbin/tcpdumpra üres stringgel tér vissza, azaz elvben itt nincs magán a fileon capability állítva
azert jo hogy nem minden juzer tudja futtani a tcpdump-ot :]
egyebkent ebben az esetben a rendszer egyszeruen setuid-ozza a progit, oszt annyi. lasd pl:
ping
. ott is kell nyilvan cap_net_raw, oszt azokat az opciokat amiket a mezei juzer azert megsem annyira jo hogyha bevet (lasd pl flood ping), azokat egyszeruen kezzel ellenorzi.
- A hozzászóláshoz be kell jelentkezni
No igen, ezt benéztem! Viszont akkor azt nem vágom, hogy minek neki apparmor leíró ... de mindjárt megyek doksit olvasni :-)
- A hozzászóláshoz be kell jelentkezni
bassza meg, raadasul debian/etch me'g ez a `setcap` sincs fent, mondjuk az egyik fejlesztoi gepen me'g ez a progi lenne... eh... elegge furcsa dolog ez az egesz capability :/
- A hozzászóláshoz be kell jelentkezni