Wireshark est un outil incontournable pour connaître les paquets qui transitent sur le réseau. Mais on se retrouve vite bloqué à cause d’un problème de droits.
En effet, en démarrant wireshark avec un compte utilisateur non-root, l’interface graphique s’affiche, mais il est impossible de capturer les trames : aucune interface réseau n’est disponible.
Devant ce problème, que fait l’utilisateur pressé ? Il démarre wireshark en root, bien sûr (c’est ce que je faisais sous Ubuntu) ! Eh bien pas de chance :
$ sudo wireshark No protocol specified (wireshark:27210): Gtk-WARNING **: cannot open display: :0
Déjà, c’est bien fait pour lui : on n’essaie pas de démarrer une interface graphique en root !
Mais comment faire alors ? En non-root on ne peut pas capturer, en root on ne peut pas démarrer…
Alors on lit la doc, qui propose deux solutions :
less /usr/share/doc/wireshark/README.Debian
Une troisième solution, donnée en commentaire, me semble encore meilleure :
sudo tcpdump -pni eth0 -s0 -U -w - | wireshark -k -i -
Utiliser dumpcap pour capturer
Avec cette méthode, il faut d’abord capturer les paquets réseau et les sauver dans un fichier, grâce à dumpcat (en root), puis ouvrir ce fichier dans wireshark (non-root).
Pour démarrer la capture de l’interface eth0 dans le fichier /tmp/mycapture :
sudo dumpcap -i eth0 -w /tmp/mycapture
Pour connaître la liste des interfaces réseau capturables :
$ sudo dumpcap -D 1. eth0 2. wlan0 3. nflog (Linux netfilter log (NFLOG) interface) 4. any (Pseudo-device that captures on all interfaces) 5. lo
Ctrl+C arrête la capture.
Le fichier généré n’est lisible que par root. Avant de l’ouvrir dans Wireshark, il faut donc changer ses droits :
sudo chmod +r /tmp/mycapture
C’est la méthode configurée par défaut sous Debian.
Autoriser les utilisateurs non-root
Si on souhaite à la fois capturer et analyser à partir de Wireshark (et permettre les captures « en live »), sans passer par dumpcap en ligne de commande, il faut autoriser les utilisateur non-root à capturer des paquets.
Pour cela :
sudo dpkg-reconfigure wireshark-common
┌─────────────────────┤ Configuration de wireshark-common ├──────────────────────┐ │ │ │ Dumpcap peut être installé afin d'autoriser les membres du groupe │ │ « wireshark » à capturer des paquets. Cette méthode de capture est préférable │ │ à l'exécution de Wireshark ou Tshark avec les droits du superutilisateur, car │ │ elle permet d'exécuter moins de code avec des droits importants. │ │ │ │ Pour plus d'informations, veuillez consulter │ │ /usr/share/doc/wireshark-common/README.Debian. │ │ │ │ Cette fonctionnalité constitue un risque pour la sécurité, c'est pourquoi │ │ elle est désactivée par défaut. En cas de doute, il est suggéré de la laisser │ │ désactivée. │ │ │ │ Autoriser les utilisateurs non privilégiés à capturer des paquets ? │ │ │ │ <Oui> <Non> │ │ │ └────────────────────────────────────────────────────────────────────────────────┘
Après avoir répondu Oui, tous les utilisateurs du groupe wireshark (aucun, par défaut) seront autorisés à capturer les paquets.
Remarque : un programme non-root sera donc en théorie capable de savoir tout ce qui passe sur le réseau (déjà qu’il est capable de connaître tout ce qui est tapé au clavier).
Il ne reste donc plus qu’à ajouter son compte utilisateur au groupe wireshark :
sudo addgroup $USER wireshark
Cette modification ne sera prise en compte qu’après une reconnexion du compte utilisateur (il faut donc fermer la session et en démarrer une nouvelle).
Avec cette méthode, seul le processus de capture aura les droits root, l’interface graphique se contentant de droits non-root (merci la séparation des privilèges).



gksu wireshark marche très bien aussi x)
Il existe kdesudo également, mais jamais essayé (bien qu’étant sous KDE).
@Jeyg :
Ah oui, effectivement, avec
kdesudoles applications graphiques se lancent en root…Mais c’est quand même à éviter !
La technique « Autoriser les utilisateurs non-root » ne fonctionne pas sous Ubuntu :
/usr/bin/dumpcapne veut pas s’exécuter pour les non-rootUne solution ? (autre que
sudo wireshark).Merci d’avance !
@Gounlaf :
La seconde méthode permet de n’utiliser que Wireshark non-root, sans passer par
dumpcapen ligne de commande (qui lui nécessite d’être root).@®om : en fait, il fallait que je me reconnecte pour que l’ajout au groupe soit réellement pris en compte … Donc tout est bon maintenant =)
C’est bien pratique !
n’y a il pas un risque à autoriser les non-root à utiliser ce genre de programme ? Vu les infos qu’on peut y lire …
J’ai jamais compris l’intérêt de gksu et consors. Sur ma gentoo un « sudo wireshark » fonctionne parfaitement, et j’en suis ravi.
Bonjour,
Je vous renvois vers deux billets de blog expliquant l’utilisation des linux capabilities pour exécuter wireshark en mode utilisateur.
http://www.inetdoc.net/articles/wireshark-as-user/index.html
http://packetlife.net/blog/2010/mar/19/sniffing-wireshark-non-root-user/
J’ai testé cette procédure sur ubuntu donc il n’ y a aucune raison pour qu’elles ne fonctionnent pas sous debian.
Personnellement, j’utilise
tcpdumpainsi :Un p’tit ssh et cela permet de capturer des données sur une machine distante.
@Vincent Bernat :
Génial !
Pingback: Nono’s Vrac 70 « m0le'o'blog
Pingback: GuiGui's show » En vrac
Excellente la solution de @Vincent Bernat !