Il suffit d'exécuter l'application comme suit :
systemd-run --scope -p IPAddressDeny=any wine myapp.exe
Le IPAddressDeny=…
permet de refuser l'accès à un ensemble d'adresses IPv4 et IPv6. La valeur spéciale any
désactive l'accès à toutes les adresses pour tous les protocoles basés sur IP, comme TCP, UDP, ICMP, SCTP, etc.
Exemple d'utilisation (note : pour cette démo, j'ai dû corriger wine ping
, car cela expirait) :
$ export WINEDEBUG=-all # supprime les impressions de débogage pour la démo
$ wine ping localhost # vérifiez que le ping fonctionne
Envoi d'une requête 'ping' sur localhost [127.0.0.1] avec 32 octets de données:
Réponse de 127.0.0.1 : octets=32 temps<1 ms TTL=64
Réponse de 127.0.0.1 : octets=32 temps<1 ms TTL=64
Réponse de 127.0.0.1 : octets=32 temps<1 ms TTL=64
Réponse de 127.0.0.1 : octets=32 temps=1 ms TTL=64
Statistiques Ping pour 127.0.0.1 :
Paquets : envoyés = 4, reçus = 4, perdus = 0 (0% de perte)
Temps approximatif de cycle aller-retour en millisecondes :
Minimum = 0 ms, Maximum = 1 ms, Moyenne = 0 ms
$ systemd-run --scope -p IPAddressDeny=any wine ping localhost # eh bien, plus maintenant
==== AUTHENTIFICATION POUR org.freedesktop.systemd1.manage-units ====
L'authentification est requise pour gérer les services système ou d'autres unités.
Plusieurs identités peuvent être utilisées pour l'authentification :
1. constantine
2. archie
Choisissez l'identité à authentifier en tant que (1-2) : 1
Mot de passe :
==== AUTHENTIFICATION COMPLÈTE ====
Exécution de la portée en tant qu'unité : run-u28936.scope
Envoi d'une requête 'ping' sur localhost [127.0.0.1] avec 32 octets de données:
PING : échec de la transmission. Erreur générale.
PING : échec de la transmission. Erreur générale.
PING : échec de la transmission. Erreur générale.
PING : échec de la transmission. Erreur générale.
Statistiques Ping pour 127.0.0.1 :
Paquets : envoyés = 4, reçus = 0, perdus = 4 (100% de perte)
Pour le reste de la réponse, je vais copier le texte de ma réponse similaire sur unix.se :
Note : cela va vous demander un mot de passe, mais l'application est lancée en tant qu'utilisateur. Ne laissez pas cela vous induire en erreur en pensant que la commande nécessite sudo
, car cela ferait fonctionner la commande en tant que root, ce qui n'était probablement pas votre intention.
Si vous ne voulez pas entrer le mot de passe (après tout, vous possédez déjà vos ressources, pourquoi auriez-vous besoin d'un mot de passe pour les limiter), vous pourriez utiliser l'option --user
, cependant pour que cela fonctionne, vous aurez besoin de prendre en charge cgroupsv2 activé, ce qui nécessite actuellement de démarrer avec le paramètre kernel systemd.unified_cgroup_hierarchy
.