2

Я пытался заставить приложение работать должным образом, но кажется, что он не может найти никаких сетевых интерфейсов. Он предназначен для работы без прав администратора и поэтому требует определенных файловых возможностей. Тем не менее, он все еще не может найти какие-либо сетевые интерфейсы через libpcap.

Я попробовал простой скрипт для репликации поведения, используя libpcap для вывода списка сетевых интерфейсов, чтобы проверить проблему:

#include <stdio.h>
#include <pcap.h>

int main(int argc, char *argv[]) {
    char *dev, errbuf[PCAP_ERRBUF_SIZE];

    dev = pcap_lookupdev(errbuf);
    if(dev == NULL) {
        printf("Error: %s\n", errbuf);
        return(2);
    }

    printf("Device: %s\n", dev);
    return(0);
}

Применение файловых возможностей и проверка их применения,

$ sudo setcap cap_net_raw,cap_net_admin=eip pcap_test
$ getcap pcap_test
pcap_test = cap_net_admin,cap_net_raw+eip

Он по-прежнему не может найти какие-либо сетевые интерфейсы, хотя утверждает, что имеет правильные разрешения. Запуск от имени суперпользователя работает без проблем, конечно.

$ ./pcap_test
Error: no suitable device found
$ sudo ./pcap_test
Device: eth0

Прохождение этой идентичной последовательности работает в соответствии с требованиями Ubuntu 14.04 (с общей версией ядра 3.13.0-35, а также с предыдущими версиями), но я не смог заставить ее работать под Mint 17 или 17.1 (с версией ядра). 3.13.0-24-родовой).

Есть ли какие-либо изменения в ядре, которые влияют на возможности файлов? Все, что я нашел в сети, уже несколько лет и относится к устаревшему ядру. Спасибо!

1 ответ1

0

Проблема оказалась из-за того, что я работал над домашним разделом, который был смонтирован с nosuid . Я не понял, что эта опция ограничивает привилегии root с помощью файловых возможностей.

Применение возможностей файла и запуск из моего корневого раздела (смонтированного без опции nosuid ) работали как хотелось.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .