Согласование шаблонов выполняется с помощью операторов case
во всех Bourne-подобных оболочках.
is_absolute() { case "$1" in ///* | //) true;; //*) false;; # on some systems, //foo is special and is # not an absolute path. // alone is / /*) true;; *) false esac }
Удалите первые две записи в системах, которые не обрабатывают //foo
специальным образом.
Похоже, что 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 ).
Было бы неплохо, если бы в /proc
был интерфейс к netfilter, но, насколько мне известно, задача его реализации так и не была завершена.