Nun, nicht gerade interaktiv, aber ich kenne 3 Möglichkeiten, den Netzwerkzugriff auf Programme einzuschränken.
Standardmäßig weist Linux Benutzern Berechtigungen zu, und jedes von ihnen ausgeführte Programm verfügt über dieselben Berechtigungen. Führen Sie das nicht vertrauenswürdige Programm als separaten Benutzer aus. Das ist ziemlich einfach, wenn du es schaffst. (Manchmal kann es Ihnen nicht gefallen, wenn ein Programm Root-Rechte benötigt.) Fügen Sie die folgende Firewall-Regel hinzu:
iptables -A OUTPUT -m owner --uid-owner ${untrusted_uid} -j DROP
Wenn Sie keine Angst haben, den Kernel zu patchen, versuchen Sie grsecurity . Es ermöglicht unterschiedliche Berechtigungen für unterschiedliche ausführbare Dateien für denselben Benutzer. Dies ist wahrscheinlich der beste Weg, da Sie ihn in iptables-Regeln integrieren und detaillierte Einschränkungen festlegen können. Die Regeln sollten ungefähr so aussehen:
...
role your_regular_user u
...
subject /path/to/untrusted/program
connect disabled
...
...
Deaktivieren Sie die Funktion connect () mit LD_PRELOAD. Dies ist die hässlichste Methode, die Sie nur verwenden können, wenn Sie keine andere Option haben. Sie benötigen eine Bibliothek wie diese:
#include <errno.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr const* addr, socklen_t addrlen) {
errno = ECONNREFUSED;
printf("connection refused\n");
return -1;
}
Kompilieren Sie dies mit
gcc -fPIC -shared -Wl,-soname,fake_connect fake_connect.c -o libfake_connect.so
Starten Sie das Programm mit
LD_PRELOAD="./libfake_connect.so" ./untrusted_program