Разрешения jNetPcap для проекта Linux Netbeans Java - PullRequest
1 голос
/ 10 января 2020

Netbeans 11.2, работающий на Linux Mint 19.2 Cinnamon, Kernel 4.15.0-72-generic

Я переместил собственный проект по анализу сетевых пакетов, который я разработал несколько лет назад, с go с Windows 7 на Linux. Это использует jNetPcap для фактического захвата пакета. JnetPcap - это оболочка для Libpcap.

Проблема: при запуске проекта в Netbeans появляется сообщение «У вас нет разрешения на захват на этом устройстве».

Компиляция проекта в Файл .jar, который я затем запускаю как root, все хорошо. Таким образом, демонстрируя, что код проекта в порядке и что проблема ограничена отсутствием разрешений.

Используется «родная общая библиотека» libjnetcap.so

По сути, я хочу быть возможность запустить / отладить этот проект в Netbeans 11.2

В попытке решить эту проблему я пробовал множество вещей:

  1. Предполагая, что это libjnetcap.so то есть доступ к сетевому интерфейсу, я попытался дать ему повышенные привилегии, используя setuid, безрезультатно. Я также попытался дать ему возможности с sudo setcap cap_net_raw=p ./libjnetpcap.so, опять же безрезультатно.

  2. Пробовал setuid на /usr/bin/java. На этот раз я мог запустить файл скомпилированных проектов .jar без использования sudo. Однако среда IDE Netbeans не будет загружаться с иконки на рабочем столе. Запуск NetBeans из терминала вызвал сообщение об ошибке, что использование setuid не было разрешено.

  3. Мне не удалось установить возможности для /usr/bin/java. Неправильный тип файла?

Я нашел это на этом форуме:

В вашем случае pcap требуется низкоуровневый доступ к сетевому интерфейсу , Из-за последствий для безопасности (захват сетевого трафика c, генерация произвольных сетевых пакетов и т.д. c) такой доступ ограничен только привилегированными пользователями. На Linux, например, pcap требуется, чтобы пользователю была доступна возможность CAP_NET_RAW.

Это звучит как моя проблема, но где pcap? Все, что у меня есть, - это файл библиотеки libjnetcap.so.

Я был бы очень признателен, если бы какая-нибудь добрая душа могла дать мне какие-либо указатели и т. Д. c.

1 Ответ

1 голос
/ 15 января 2020

Не уверен, что у меня не было ответов, потому что моя проблема была действительно неясной, поэтому немногие испытали это. Или, возможно, я не смог описать это адекватно. Во всяком случае, мне удалось решить это самостоятельно. Я описал решение ниже в случае, если кто-то еще должен испытать это. Необходимо найти используемый исполняемый файл java и изменить его возможности. 1. Найти используемый java исполняемый файл. Введите команду. whereis java Это дает путь к символической ссылке. Возможности не могут быть применены к символическим ссылкам, поэтому следуйте этой цели. Это еще одна символическая ссылка, целью которой является исполняемый файл. В моем случае это было: / usr / lib / jvm / java -8-openjdk-amd64 / jre / bin 2. Измените каталог на этот, то есть cd / usr / lib / jvm / java -8-openjdk- amd64 / jre / bin 3. Измените его возможности: sudo setcap cap_net_raw, cap_net_admin = eip java

Исправлена ​​проблема с разрешениями при вызове моего приложения java из скрипта. Тем не менее, запуск его изнутри Netbeans по-прежнему выдавал ошибку разрешений. Это связано с тем, что Netbeans не обязательно использует ту же версию Java, что и сценарий bash. В моем случае Netbeans использовал версию 11, поэтому добавил версию 8 к доступным платформам, а затем переключил проект на это.

...