Comment bloquer tout le trafic pour un utilisateur donné?

Je voudrais lancer un script sous UNIX avec des privilèges restreints. Plus précisément, je voudrais exécuter le code que j’ai reçu sans le laisser envoyer des données. Ma solution actuelle consiste à:

  1. Créez un utilisateur fictif.
  2. Utilisez iptables pour bloquer tout le trafic sortant pour l’utilisateur factice.
  3. Exécutez le programme cible en tant qu’utilisateur fictif, en utilisant su - dummy -c 'command' .

La façon dont je réalise l’étape 2 ci-dessus est décrite dans cette page . Plus précisément, j’utilise la commande suivante pour append une nouvelle règle:

 sudo iptables -I OUTPUT -m owner --uid-owner dummy -j DROP 

Lorsque j’essaie maintenant de faire un ping sur une adresse Web en passant au compte factice, le ping échoue en effet car j’ai ajouté la règle à iptables. Voici cette commande:

 > su - dummy -c 'ping www.google.com' ping: unknown host www.google.com 

Même chose pour la tentative d’utilisation de traceroute . Cependant, lorsque j’essaie d’envoyer un courrier électronique de la même manière avec mutt , cela réussit:

  su - dummy -c 'echo "test" | mutt -s test [emailaddress]' 

Pourquoi la règle ne bloque-t-elle pas cela, et plus généralement, comment puis-je m’assurer que tout le trafic sortant est bloqué pour le programme que je cours?

Voici un guide pour la mise en place d’une prison chroot, dont vous semblez avoir besoin.

 https://help.ubuntu.com/community/BasicChroot 

Cela vous permet de contrôler quelles commandes peuvent être exécutées, vous pouvez limiter l’access des utilisateurs à des choses comme Mutt sans problème. Vous accordez l’access, vous n’avez pas besoin de savoir quoi refuser. Parce que toutes les commandes sont bloquées par défaut. Cela rend la mise en place beaucoup plus simple.

mutt utilise un serveur de messagerie pour envoyer le courrier électronique, et ce n’est probablement pas le cas avec le uid de dummy.