Bug 31798 - wireshark не работает от пользователя
Summary: wireshark не работает от пользователя
Status: CLOSED WORKSFORME
Alias: None
Product: Sisyphus
Classification: Development
Component: wireshark-base (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Anton Farygin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-02-15 08:36 MSK by Стас
Modified: 2016-02-16 08:11 MSK (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Стас 2016-02-15 08:36:56 MSK
Когда wireshark запущен от пользователя, нет возможности выбрать нтерфейс и включить захват пакетов. Когда запускаешь его от рута, программа предупреждает, что это неправильно.

Решение: в скрипт postinstall нужно вставить строку
setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap
Это даст программе захвата трафика нужные привилегии.

Подробности см. в документации к wireshark: https://wiki.wireshark.org/CaptureSetup/CapturePrivileges?highlight=%28permission%29 под заголовком "Setting network privileges for dumpcap if your kernel and file system support file capabilities".

Ещё один момент. Параллельно имеет смысл сразу разумно настроить права доступа к файлу. На настоящий момент по умолчанию запуск программы захвата трафика доступен всем. В /etc/control.d/facilities/wireshark-capture имеется четыре варианта установки прав на бинарник /usr/bin/dumpcap:
 new_fmode public 4711 root root
 new_fmode relaxed 711 root root
 new_fmode netadmin 4710 root netadmin
 new_fmode restricted 700 root root
По умолчанию выбран вариант relaxed.

Предлагаю следующие:
 new_fmode public 711 root root
 new_fmode relaxed 710 root root
 new_fmode netadmin 710 root netadmin
 new_fmode restricted 700 root root
и выставить по умолчанию третий вариант (запуск доступен руту и группе netadmin)
Можно вовсе убрать вариант relaxed.
Comment 1 Anton Farygin 2016-02-15 08:55:25 MSK
есть такой инструмент, просто после установки нужно выполнить донастройку системы
control wireshark-capture  (public relaxed netadmin restricted)
Comment 2 Стас 2016-02-15 09:03:05 MSK
Прошу прощения, я не полностью описал проблему.

Надеюсь, никто не будет спорить, что SUID/SGID - дурная практика, когда есть альтернатива. 
В случае wireshark альтернатива описана в документации - установка file capabilities программой setcap.

Касательно существующего положения, когда "после установки нужно выполнить донастройку", где описана эта самая донастройка?
IMHO пакет должен работать сразу после установки либо инсталлятор должен сообщить, что необходимо сделать дополнительно.
Comment 3 Anton Farygin 2016-02-15 11:27:02 MSK
Настройки безопасности по умолчанию после установки традиционно в ALT Linux отдаются на сторону авторов дистрибутивов.

В пакетах по умолчанию политика такова, что привелигерованные приложения устанавливаются и не работают из под рядового пользователя.

Инсталятор в нашем случае - это rpm, я могу вывести нужное сообщение в post-скрипте, но вероятность того, что его кто-то прочитает - стремится к нулю, оно потеряется на общем фоне.
Comment 4 Стас 2016-02-15 11:42:09 MSK
> В пакетах по умолчанию политика такова, что привелигерованные приложения
> устанавливаются и не работают из под рядового пользователя.

Хорошо. Повторяю: давайте сделаем wireshark непривилегированным. Для этого достаточно добавить одну строку в postinstall и убрать установку бита SGID в 
скрипте /etc/control.d/facilities/wireshark-capture.

> Настройки безопасности по умолчанию после установки традиционно в ALT Linux
> отдаются на сторону авторов дистрибутивов.
Знают ли об обсуждаемых настройках wireshark-base авторы дистрибутива Altlinux P7 и готовящегося P8? Я этого не заметил.


В любом случае нужно как-то задокументировать особенности пакета. Например, можно добавить файл с описанием настроек безопасности в /usr/share/doc/wireshark-base-1.12.1/ALTLINUX-README  Как его назвать - вопрос открытый, я предложил так, чтобы он не терялся в множестве тамошних README.*.
Comment 5 Anton Farygin 2016-02-15 11:47:20 MSK
Хорошо, Readme я напишу.

Насколько я помню - Wireshark не устанавливается ни в одном из дистрибутивов по умолчанию.
Comment 6 Стас 2016-02-15 12:02:24 MSK
README - это хорошо и правильно. Умеющий читать не будет задавать дурацкие вопросы на форуме :)

Непонятно, как связаны эти две фразы (они из разных сообщений):

> Настройки безопасности по умолчанию после установки традиционно в ALT Linux
> отдаются на сторону авторов дистрибутивов.

> Насколько я помню - Wireshark не устанавливается ни в одном из дистрибутивов по
> умолчанию.
Comment 7 Стас 2016-02-15 12:02:35 MSK
Всё же, давайте сделаем wireshark непривилегированным и отберём права на запуск. Если после первичной установки разрешён запуск только от рута и выставлены file capabilities, тогда пользователь увидит ошибку "Couldn't run /usr/bin/dumpcap in child process: access denied" и полезет смотреть причину.
При нынешней конфигурации нет никакой диагностики, wireshark просто не обнаруживает интерфейсы.
Comment 8 Anton Farygin 2016-02-15 12:21:48 MSK
Я подумаю как это сделать более дистрибутивно.
Идея установки capabilities в POST-скрипте мне не нравится.

Что касается вопроса с дистрибутивами - то если автор дистрибутива сочтёт нужным включить Wireshark в установку по умолчанию - то он предусмотрит все необходимые настройки для его запуска.

При нынешней конфигурации wireshark выводит сообщение: Couldn't run /usr/bin/dumpcap in child process - отказано в доступе. Вполне понятное сообщение, если не совсем, то можем его поправить - предлагайте варианты.

У меня ровно такая конфигурация и я wireshark использую в этом режиме, для dump'а есть другие инструменты и в другом месте.
Comment 9 Yuri N. Sedunov 2016-02-15 12:42:33 MSK
(В ответ на комментарий №8)
> Я подумаю как это сделать более дистрибутивно.
> Идея установки capabilities в POST-скрипте мне не нравится.

Самой идее  установки capabilities в POST-скрипте у нас нет альтернативы, приходится использовать.
Позаимствовав из других RPM, можно было делать это при сборке пакета как-то так
%files
...
%caps(cap_ipc_lock=ep) %_bindir/prog

А в данном случае, видимо, можно и CONTROL(8) задействовать.