Wireshark 리눅스에서 No Interface 문제 해결하기

Wireshark는 이더넷 인터페이스 카드를 통해 드나드는 데이터들을 캡쳐할 수 있는 요긴한 프로그램이다.  나같이 프로토콜을 구현하고 테스트하고 연동하는 사람에게 이 툴은 권총처럼 옆에 항상 차고 다닌다고 보면 된다.

Wireshark이 네트워크 카드의 데이터 흐름을 캡쳐할 수 있는 이유는 드라이버 레벨에서 동작하는 모듈이 있기 때문이다.  Windows 용 Wireshark는 WinPcap 모듈을 이용하고,  리눅스에서는  dumpcap 이라는 데몬을 사용한다.

그런데 리눅스의 dumpcap은 그냥 설치하는 것 만으로는 동작하지 않는다.  네트워크 카드에서 정보를 추출하는 것은 뭔가 해킹과 같은 늬앙스를 풍기기 때문에, 리눅스에서는 권한을 부여받은 어플리케이션만 네트워크를 캡쳐할 수 있도록 제한하고 있기 때문이다. 

Wireshark를 처음 설치하고 나서, 일반 유저로 실행하면 아래 그림과 같이 네트워크 인터페이스 카드가 하나도 보이지 않는다.



반면 슈퍼유저로 실행하면 좀 무서운 경고가 나온 후에 아래 그림과 같이 네트워크 카드들이 리스팅된다.  결국 권한 문제라는 거다. 


리눅스용 Wireshark의 권한 문제를 해결하여 제대로 동작하게 하는 방법은 아래 링크에 잘 설명이 되어 있다. 
요약하면 이렇다.
  1. wireshark라는 그룹을 만들고, 주 사용자 ID를 추가한다. 
  2. dumpcap 어플리케이션은 wireshark 그룹만 실행할 수 있도록 설정한다. 
  3. dumpcap에 네트워크를 캡처할 수 있는 Capability를 부여한다. 

이것을 명령어로 정리하면 다음과 같다. 

sudo groupadd wireshark
sudo usermod -a -G wireshark $USER 
sudo chgrp wirshark /usr/bin/dumpcap
sudo chmod o-rx /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

이 명령들을 차례로 실행한 뒤에 로그아웃이나 리부팅을 해야 제대로 먹힌다.

마지막 명령인 setcap은 Android의 앱권한과 비슷한 개념으로 리눅스의 Capability를 지정할 수 있다.  특히 시스템을 깊숙히 건드는 어플리케이션의 경우 루트 유저로 실행하는 것이 원칙이지만, 일반 유저에게도 실행 권한을 주려면 setcap으로 설정하면 된다.

cap_net_raw는 네트워크의 하부 레이어로 접근할 수 있게 해주고, cap_net_admin은 네트워크 인터페이스의 관리와 설정 권한이다.  eip로 준 것은 각각 Effective, Inheritable, Permitted의 권한을 준 것이다.  자세한 것은 아래 링크 참조할 것.

댓글 없음:

댓글 쓰기

인기글