¿Alguien puede ayudarme a descubrir qué está pasando aquí? Tengo algunas reglas para configurar el conteo de paquetes de seguimiento. Cuando ejecuto el siguiente script como root:
#!/bin/bash
iptables -t mangle -xnvL
Obtengo el resultado que espero:
//snip
233203 199929802 MARK //blah blah blah
//snip
Sin embargo, quiero ejecutar esto como parte de cactus, que se ejecuta como apache. Ahora apache no puede ejecutar iptables, por eso tengo el script. Lo configuré como raíz SUID :
-rwsr-sr-x 1 root root 37 May 14 23:06 iptables_packet_report.sh
Pero luego obtengo esta salida:
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.
Obviamente mi kernel está bien, y el hecho de que lo estoy ejecutando como no root está arruinando algo, pero no entiendo por qué. Verifiqué dos veces el SUID con [la demostración] ( http://en.wikipedia.org/wiki/Setuid#Demonstration y confirme que estaba funcionando.
server # sudo -u apache ./printid
Real UID = 81
Effective UID = 0
Real GID = 81
Effective GID = 0
Mi objetivo final es obtener la salida de iptables -t mangle -xnvL mientras se ejecuta como apache para poder usar cactus para graficarlo todo muy bien.
Creo que la solución de christian es la mejor, pero si realmente quisieras, puedes compilar el script usando shc y luego configurar la raíz en el programa compilado.
fuente