GNU/Linux >> Znalost Linux >  >> Linux

Omezení přístupu k systémovému volání pro aplikaci Linux

Je aplikace propojena staticky?

Pokud ne, můžete některé symboly přepsat, například předefinujme socket :

int socket(int domain, int type, int protocol)
{
        write(1,"Error\n",6);
        return -1;
}

Poté vytvořte sdílenou knihovnu:

gcc -fPIC -shared test.c -o libtest.so

Pojďme běžet:

nc -l -p 6000

Dobře.

A teď:

$ LD_PRELOAD=./libtest.so nc -l -p 6000
Error
Can't get socket

Co se stane, když spustíte s proměnnou LD_PRELOAD=./libtest.so ? Přepíše se symboly definovanými v libtest.so nad symboly definovanými v knihovně C.


Zdá se, že systrace dělá přesně to, co potřebujete. Ze stránky Wikipedie:

Aplikace může provádět pouze ta systémová volání, která jsou v zásadě povolena. Pokud se aplikace pokusí provést systémové volání, které není výslovně povoleno, spustí se alarm.


Toto je jedna z možných aplikací sandboxingu (konkrétně spouštění na základě pravidel). Jednou z populárních implementací je SELinux.

Budete muset napsat politiku, která odpovídá tomu, co chcete procesu povolit.


Linux
  1. Linux – jakou aplikaci použít pro kalendář?

  2. Jak najít aplikaci pro typ mime v systému Linux?

  3. Linux – aplikace pro snímání obrazovky pro Rhel6.5?

  1. Gnome Pie – Kruhový spouštěč aplikací (Menu) pro Linux

  2. 10 nejlepších spouštěčů aplikací pro stolní počítače se systémem Linux

  3. Jaký je nejlepší způsob distribuce binární aplikace pro Linux?

  1. Profilování aplikací pro Linux

  2. Jak zkompilovat dynamickou knihovnu pro aplikaci JNI na linuxu?

  3. Co je lepší int 0x80 nebo syscall v 32bitovém kódu na Linuxu?