0 - kikapcsolva (se szabály nem gyűlik, se naplózás nem készül)
1 - tanuló mód (csak szabály gyűlik)
2 - engedő mód (szabály már nem gyűlik, csak naplózás, de engedve a műveletet)
3 - kikényszerítő vagy tiltó mód (szabály nem gyűlik, naplózás készül, szabályon kívüli művelet tiltott)
Ezt úgy szeretném megvalósítani, hogy a tomld folyamatom ne tároljon semmi aktuális vagy régi infót a műveletről. Ez lenne a tökéletes megvalósítás számomra. Se sqlite, se text fájl, semmi a domain-ekről és az azok eltöltött idejéről stb. Így az egyetlen apró binárisom (melynek csak libc a függősége) csak elindulna boot-kor, és mindig mindent kitalálna az aktuális infóból.
Ekkor viszont csak a begyűlt szabályaim állnak rendelkezésemre, mint döntéshez információ. Arra gondoltam, hogy így oldom meg:
Ha az adott process által eltöltött idő / processhez tartozó program vagy bináris bonyolultsága nagyobb, mint > konstans, akkor átkapcsolom. A konstans értékét teszteléssel szeretném meghatározni, és CPU időt nem sec-ben mérném, hanem tick-ben, hogy lehetőleg ne függjön annyira a processzor sebességtől, de ezt még jobban végig kell gondolnom. Illetve nyilván lassabb gépen tovább tarthat a szabályok megfelelő mennyiségének begyűlése, tehát ez a két érték valamelyest összetart.
Szóval tömörebben:
if (process cpu tick / complexity > value) enforcing_mode();
A konstans értékéhez szeretnék keresni még tulajdonságokat, amelyek alapján hozzáigazítanám az adott process-hez. CPU tick-et kikapnám a /proc/$PID/stat-ból (ha ott van, még utánanézek), a bonyolultságra meg:
ldd process_bináris | wc -l
Persze ez így előre baromságnak tűnhet, attól függetlenül lehet hogy élek vele :)
Ezt kb. fél óra alatt találtam ki, lehet hogy ezért dobom még az egészet..
- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 708 megtekintés