Kann mir jemand helfen, herauszufinden, was hier los ist? Ich habe einige Regeln für die Verfolgung der Paketanzahl festgelegt. Wenn ich das folgende Skript als root ausführe:
#!/bin/bash
iptables -t mangle -xnvL
Ich erhalte die erwartete Ausgabe:
//snip
233203 199929802 MARK //blah blah blah
//snip
Ich möchte dies jedoch als Teil von Cacti ausführen, das als Apache ausgeführt wird. Jetzt kann Apache iptables nicht ausführen, weshalb ich das Skript habe. Ich habe es als SUID root eingerichtet :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Aber dann bekomme ich diese Ausgabe:
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.
Offensichtlich ist mein Kernel in Ordnung und die Tatsache, dass ich ihn als Nicht-Root-Kernel ausführe, bringt etwas durcheinander, aber ich verstehe nicht, warum. Ich habe die SUID mit [der Demonstration] ( http://en.wikipedia.org/wiki/Setuid#Demonstration) überprüft und bestätigt, dass sie funktioniert.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Mein Endziel ist es, die Ausgabe von iptables -t mangle -xnvL zu bekommen, während ich als Apache laufe, damit ich mit Cacti alles schön grafisch darstellen kann.
Ich denke, Christians Lösung ist die beste, aber wenn Sie es wirklich wollten, können Sie das Skript mit shc kompilieren und dann root auf dem kompilierten Programm setzen.
quelle