Требование привилегий root для функций libpcap
pcap_lookupdev()
заполняет переменную errbuf при запуске от имени пользователя без полномочий root, а те же функции возвращают значение первого доступного сетевого интерфейса при запуске от имени пользователя root.
Этот доступ отключен ОС или библиотекой. Я думаю, что это ОС. Какой правильный ответ?
Это не домашнее задание
2 ответа
В целом, когда речь идет о доступе к файлам, устройствам и другим службам, предоставляемым ОС, в ОС реализуются модели доступа в Unix (и, следовательно, в Linux).
Ожидается, что пользовательские программы будут просто пытаться делать то, что они хотят, и изящно обрабатывать любые ошибки, например, сообщая пользователю сообщение.
Это имеет несколько преимуществ:
Поддержка: применение политики доступа остается за ОС и может быть настроено единообразно. Администратор, который хочет ограничить доступ к ресурсу, делает это один раз, вместо того, чтобы настраивать эту библиотеку здесь, а не ту библиотеку там, а затем...
Конфигурируемость: администратор может настроить простую или сложную политику доступа, в которой он нуждается, без ограничения каждой реализацией пользовательского пространства.
Безопасность: программам в пользовательском пространстве, как правило, не следует доверять применение политики доступа. Это как если бы волк охранял овец.
РЕДАКТИРОВАТЬ:
В твоем случае, pcap
нужен низкоуровневый доступ к сетевому интерфейсу. Из-за последствий для безопасности (захват сетевого трафика, создание произвольных сетевых пакетов и т. Д.) Такой доступ ограничен только привилегированными пользователями. В Linux, например, pcap
нуждается в CAP_NET_RAW
возможность быть доступной для пользователя.
Многие функции pcap требуют привилегий root для правильной работы. Может ли это быть проблемой?
Во многом это зависит от ОС. Не всеpcap
функции требуют привилегий root на всех ОС.
Ссылка на Справочное руководство Страницы, все специальные требования привилегий перечислены соответственно.