~rom1v/blog { un blog libre }

Utiliser Wireshark sous Debian

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

EDIT : 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 à dumpcap (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

Ce qui affiche :

 ┌─────────────────────┤ 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).

Commentaires

gksu wireshark marche très bien aussi x)

Il existe kdesudo également, mais jamais essayé (bien qu’étant sous KDE).

®om

@Jeyg

Ah oui, effectivement, avec kdesudo les applications graphiques se lancent en root

Mais c’est quand même à éviter !

Gounlaf

La technique “Autoriser les utilisateurs non-root” ne fonctionne pas sous Ubuntu : /usr/bin/dumpcap ne veut pas s’exécuter pour les non-root

Une solution ? (autre que sudo wireshark).

Merci d’avance !

®om

@Gounlaf La seconde méthode permet de n’utiliser que Wireshark non-root, sans passer par dumpcap en ligne de commande (qui lui nécessite d’être root).

Gounlaf

@®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 !

siger

n’y a il pas un risque à autoriser les non-root à utiliser ce genre de programme ? Vu les infos qu’on peut y lire …

erdnaxeli

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.

miam

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 tcpdump ainsi :

sudo tcpdump -pni eth0 -s0 -U -w - | wireshark -k -i -

Un p’tit ssh et cela permet de capturer des données sur une machine distante.

[…] Wirewhark sous debian, bon, honte à moi, mais je le lançais en root il y a quelques années […]

[…] ®om nous parle d’une autre méthode qui consiste à autoriser les membres d’un groupe d’utilisateurs bien défini à capturer les paquets. […]

Excellente la solution de @Vincent Bernat !

forzagreen

Une simple solution possible est sudo -E wireshark.

Les commentaires sont fermés.