GNU/Linux >> Znalost Linux >  >> Linux

Jak zakázat vytváření soketu pro proces Linux pro sandboxing?

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.


Linux
  1. Jak upgradovat jádro na ploše Linuxu

  2. Jak zakázat vzdálené přihlášení pro uživatele root na počítači se systémem Linux

  3. Linux – Jak povolit prostory uživatelských jmen v jádře? (pro nepřivilegované `unshare`.)?

  1. Linux – Jak zrušit sdílení sítě pro aktuální proces?

  2. Jak používat kdump pro analýzu pádů jádra Linuxu

  3. Jak interně funguje copy_from_user z jádra Linuxu?

  1. Jak zabít proces zombie na Linuxu

  2. Jak nainstalovat vtop na Linux

  3. Jak zkontrolovat velikost haldy pro proces v Linuxu