ptrace
se zdá být nejviditelnějším nástrojem, ale kromě toho…
util-linux[-ng] má příkaz unshare
, který používá jádro clone
/unshare
rozhraní. Pokud spustíte nový proces přes unshare -n
(nebo clone(CLONE_NEWNET)
), všechny síťové zásuvky, které vytvoří, jsou v jiném jmenném prostoru. To neřeší problém se zdroji jádra, ale proces to provádí v karanténě.
Linuxové jádro také podporuje seccomp, režim zadaný pomocí prctl(PR_SET_SECCOMP, 1)
což zabraňuje procesu (no, vláknu, opravdu) volat jiná systémová volání než read
, write
, exit
a sigreturn
. Je to docela efektivní sandbox, ale těžko se používá s neupraveným kódem.
Můžete definovat doménu SELinux, která nepovoluje socket
/bind
/atd. volání a proveďte dynamický přechod do tohoto typu. To (samozřejmě) vyžaduje systém s aktivně prosazující politikou SELinuxu. (Možná podobné věci jsou možné u AppArmor a TOMOYO, ale žádný z nich moc neznám.)
Podívejte se na systrace – neomezený na sockety, ale generický generátor/enforcer zásad syscall. Citace:
Port GNU/Linux je dokončen a oprava jádra je aktivně udržována Mariusem Eriksenem. Lze spustit bez změn jádra pomocí backendu ptrace.
Disclaimer - Nikdy jsem to nezkoušel na Linuxu.