Я знаю тот факт, что сокету семейства PF_PACKET требуется привилегия root,
но я не знаю, как это настроено в Linux.
Кто-нибудь знает как, это жестко закодировано в ядре напрямую?
Раньше было так, что это было просто жестко закодировано в ядре.
Но начиная с версии 2.2, в Linux появились возможности (см. http://linux.die.net/man/7/capabilities), и теперь ядро проверяет возможность CAP_NET_RAW - см. net / packet / af_packet.c .
Предполагается, что пользователь root по-прежнему обладает всеми возможностями. Хотя имейте в виду, что с виртуализацией и несколькими контейнерами может быть несколько разных пользователей root, поэтому даже проверка на наличие root-прав сейчас немного сложнее, чем просто проверка uid == 0 - см. security / commoncap.c .