2015-10-08 3 views
2

Даже после изменения группы и владения ТСРйитра в пользовательском режим, я все еще получаю следующее сообщение об ошибке:падение разрешения Tcpdump

tcpdump -i eth0 
tcpdump: eth0: You don't have permission to capture on that device 
(socket: Operation not permitted) 

ls -la /usr/sbin/tcpdump 
-rwxr-x--- 1 user1 user1 830920 Apr 24 21:28 /usr/sbin/tcpdump 

Я знаю, что это не хорошо, чтобы отказаться от разрешения ТСРйитра от корня к пользователю, но для удобства использования в моем случае, я хотел бы иметь возможность использовать его с пользовательского уровня.

Я взял намек от: "tcpdump -w 1.pcap" works, but "tcpdump -C 100 -w 1.pcap" - permission denied

и установили AppArmor, как я использую Ubuntu 12.04 LTS.

И сделал:

sudo aa-complain /usr/sbin/tcpdump 

Тем не менее я получаю то же Сообщ ошибки. Если я использую «-Z» с командой tcpdump, я могу отказаться от привилегий и запустить tcpdump, но не иначе. Есть ли выход?

Благодаря

ответ

0

libpcap (который tcpdump основан на) требуют администратора привилегий, чтобы установить интерфейс в неразборчивый режим. Вы ничего не можете с этим поделать, ядро ​​не позволит вам/tcpdump/libpcap сделать это, период.

Что вы может сделать, это использовать tcpdump без беспорядочного режима, но это сильно ограничивает его функциональные возможности: вы видите только трафик, направляемым в явном виде в/из вашей машины, в отличии от всем, что видели на проводе, обычно это то, что вы хотите (и поэтому использование режима promisc является значением по умолчанию). Для того, чтобы сделать это, используйте этот tcpdump вариант:

--no-promiscuous-mode 
      Don't put the interface into promiscuous mode. Note that the 
      interface might be in promiscuous mode for some other reason; 
      hence, `-p' cannot be used as an abbreviation for `ether host 
      {local-hw-addr} or ether broadcast'. 

Для получения дополнительной информации о беспорядочном режиме:

http://en.wikipedia.org/wiki/Promiscuous_mode

Цитирую:

Many operating systems require superuser privileges to enable promiscuous mode.

В Linux на низкий уровне, это делается установкой флага IFF_PROMISC на сетевое устройство через SIOCSIFFLAGS («установить флаг») ioctl. И как вы можете увидеть здесь:

http://man7.org/linux/man-pages/man7/netdevice.7.html

... «Установка активного слова флага является привилегированной операцией», и «с использованием его требуется эффективный идентификатор пользователя 0 или возможность CAP_NET_ADMIN Если это. не тот случай, EPERM будет возвращен ».

Так что другим направлением может быть предоставление вашей учетной записи «userjoe» CAP_NET_ADMIN прав, но я бы советовал об этом. Охрана мудрых это не лучше, если не хуже, чем быть частью судоводителей и явно sudo, когда вам нужно.