Wireshark이 네트워크 카드의 데이터 흐름을 캡쳐할 수 있는 이유는 드라이버 레벨에서 동작하는 모듈이 있기 때문이다. Windows 용 Wireshark는 WinPcap 모듈을 이용하고, 리눅스에서는 dumpcap 이라는 데몬을 사용한다.
그런데 리눅스의 dumpcap은 그냥 설치하는 것 만으로는 동작하지 않는다. 네트워크 카드에서 정보를 추출하는 것은 뭔가 해킹과 같은 늬앙스를 풍기기 때문에, 리눅스에서는 권한을 부여받은 어플리케이션만 네트워크를 캡쳐할 수 있도록 제한하고 있기 때문이다.
반면 슈퍼유저로 실행하면 좀 무서운 경고가 나온 후에 아래 그림과 같이 네트워크 카드들이 리스팅된다. 결국 권한 문제라는 거다.
리눅스용 Wireshark의 권한 문제를 해결하여 제대로 동작하게 하는 방법은 아래 링크에 잘 설명이 되어 있다.
- wireshark라는 그룹을 만들고, 주 사용자 ID를 추가한다.
- dumpcap 어플리케이션은 wireshark 그룹만 실행할 수 있도록 설정한다.
- 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의 권한을 준 것이다. 자세한 것은 아래 링크 참조할 것.
마지막 명령인 setcap은 Android의 앱권한과 비슷한 개념으로 리눅스의 Capability를 지정할 수 있다. 특히 시스템을 깊숙히 건드는 어플리케이션의 경우 루트 유저로 실행하는 것이 원칙이지만, 일반 유저에게도 실행 권한을 주려면 setcap으로 설정하면 된다.
cap_net_raw는 네트워크의 하부 레이어로 접근할 수 있게 해주고, cap_net_admin은 네트워크 인터페이스의 관리와 설정 권한이다. eip로 준 것은 각각 Effective, Inheritable, Permitted의 권한을 준 것이다. 자세한 것은 아래 링크 참조할 것.
댓글 없음:
댓글 쓰기