GNU/Linux >> Linux Esercitazione >  >> Linux

Limitazione dell'accesso alle chiamate di sistema per un'applicazione Linux

L'applicazione è collegata staticamente?

In caso contrario, puoi sovrascrivere alcuni simboli, ad esempio, ridefiniamo socket :

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

Quindi crea una libreria condivisa:

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

Corriamo:

nc -l -p 6000

Va bene.

E ora:

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

Cosa succede quando esegui con la variabile LD_PRELOAD=./libtest.so ? Sovrascrive i simboli definiti in libtest.so rispetto a quelli definiti nella libreria C.


Sembra che systrace faccia esattamente ciò di cui hai bisogno. Dalla pagina di Wikipedia:

Un'applicazione può effettuare solo le chiamate di sistema specificate come consentite nella policy. Se l'applicazione tenta di eseguire una chiamata di sistema che non è esplicitamente consentita, viene generato un allarme.


Questa è una possibile applicazione del sandboxing (in particolare, l'esecuzione basata su regole). Un'implementazione popolare è SELinux.

Dovrai scrivere la policy che corrisponde a ciò che vuoi permettere al processo di fare.


Linux
  1. Linux:quale applicazione utilizzare per un calendario?

  2. 10 migliori lanciatori di applicazioni per desktop Linux

  3. Profilazione delle applicazioni Linux

  4. Come compilare una libreria dinamica per un'applicazione JNI su Linux?

  5. Cos'è meglio int 0x80 o syscall nel codice a 32 bit su Linux?

4 distribuzioni Linux per i giochi

Un'introduzione a bpftrace per Linux

Scegliere una stampante per Linux

Terminal Velocity:un'applicazione CLI per prendere appunti per Linux

Come configurare un cluster Pacemaker per Linux ad alta disponibilità

Sistema operativo Zorin per principianti Linux