Может ли кто-нибудь помочь мне узнать, что здесь происходит? У меня есть несколько правил, настроенных для отслеживания количества пакетов. Когда я запускаю следующий скрипт от имени root:
#!/bin/bash
iptables -t mangle -xnvL
Я получаю вывод, который я ожидаю:
//snip
233203 199929802 MARK //blah blah blah
//snip
Тем не менее, я хочу запустить это как часть Cacti, которая работает как Apache. Теперь apache не может запустить iptables, поэтому у меня есть скрипт. Я установил это как рут SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Но тогда я получаю этот вывод:
server # sudo -u apache ./iptables_packet_report.sh
iptables v1.4.2: can't initialize iptables table `mangle': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Очевидно, мое ядро в порядке, и тот факт, что я запускаю его как не-root, что-то портит, но я не понимаю почему. Я дважды проверил SUID с помощью [демонстрации] ( http://en.wikipedia.org/wiki/Setuid#Demonstration) и подтвердил, что он работает.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Моя конечная цель - получить выходные данные iptables -t mangle -xnvL при работе в качестве apache, чтобы я мог использовать cacti для аккуратного построения графиков.
Я думаю, что решение christian лучше, но если вы действительно этого хотите, вы можете скомпилировать скрипт, используя shc, а затем setuid root в скомпилированной программе.
источник