Можете ли вы указать iptables как пользователя без полномочий root и почему?

Возможно ли выполнить iptables --list …. команда без root?

Выполнение этого как не-root печатает это:

 $ iptables --list iptables v1.4.21: can't initialize iptables table `filter': Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded. 

Если вы должны быть root, чтобы перечислить iptables, какова причина этого? Есть ли проблема с безопасностью при просмотре правил? Есть ли ресурс или служба, используемая iptables --list которая требует доступа root?

Очевидно, что для изменения правил брандмауэра iptables требуется привилегированный пользователь. Я прошу их посмотреть.


Вместо того, чтобы быть root, есть ли возможность, позволяющая перечислять правила? Использует ли iptables netlink для взаимодействия с ядром? Поскольку документация netlink упоминает, что

Только процессы с эффективным UID 0 или CAP_NET_ADMIN могут отправлять или прослушивать многоадресную группу netlink.

Возможно, это не относится к iptables.

Я не уверен, что это правильный способ сделать это, но добавление возможности iptables не позволяет мне перечислить правила:

 bash-4.1$ echo $UID 2000 bash-4.1$ getcap /sbin/iptables-multi-1.4.7 /sbin/iptables-multi-1.4.7 = cap_net_admin+ep bash-4.1$ /sbin/iptables-multi-1.4.7 main --list FATAL: Could not load /lib/modules/3.10.0-514.21.1.el7.x86_64/modules.dep: No such file or directory iptables v1.4.7: can't initialize iptables table `filter': Permission denied (you must be root) Perhaps iptables or your kernel needs to be upgraded. 

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

2 Solutions collect form web for “Можете ли вы указать iptables как пользователя без полномочий root и почему?”

Кажется, что iptables необходимо как CAP_NET_RAW, так и CAP_NET_ADMIN, чтобы читать таблицы. Я пытался

 $ cp /usr/sbin/iptables ~/iptables # note, it may be a symbolic link $ sudo setcap CAP_NET_RAW,CAP_NET_ADMIN+ep ~/iptables $ ~/iptables -nvL 

и все было нормально.

В самом деле, iptables использует интерфейс netlink для связи с ядром. Он открывает сокет netlink для xtables , а затем выдает команды через этот сокет. Контроль доступа выполняется, когда сокет открывается, а не для отдельных команд, поэтому для перечисления и изменения правил необходимы одинаковые разрешения. Единственный способ разрешить пользователю перечислять правила, но не изменять их, – это дать им тщательно написанный исполняемый файл setuid (или setcap).

Было бы неплохо, если бы был интерфейс netfilter в /proc , но насколько я знаю, задача его реализации никогда не была завершена.

  • Сервер Ubuntu 11.10: создание пользователя, домашний каталог, привилегии sudo: только командная строка
  • Почему я не могу использовать sudo для OpenBSD?
  • правильная настройка visudo NOPASSWD для сценария резервного копирования bash
  • использование sudo в приложениях с графическим интерфейсом
  • Скрипт для su-c на экран не работает как предполагалось
  • Почему рискованно предоставлять sudo vim доступ к обычным пользователям?
  • Отключите некоторые программы от sudo
  • Есть ли способ отключить выключение удаленной машины?
  • Как интерпретировать строку в sudoers
  • Первое судо всегда медленно
  • Файл Sudoers перепутался
  • Linux и Unix - лучшая ОС в мире.