it-swarm-es.com

No se puede configurar uid en scripts shell

¿Alguien puede ayudarme a saber qué está pasando aquí? Tengo algunas reglas Configure el seguimiento de los conteos de paquetes. Cuando ejecuto el siguiente script como root:

#!/bin/bash
iptables -t mangle -xnvL

Recibo la salida que espero:

//snip
233203 199929802 MARK  //blah blah blah
//snip

Sin embargo, quiero ejecutar esto como parte de Cacti, que se ejecuta como Apache. Ahora Apache no puede ejecutar IPTables, , por eso tengo el guión. Lo configuré como raíz suida :

-rwsr-sr-x 1 root root   37 May 14 23:06 iptables_packet_report.sh

Pero luego recibo 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 núcleo está bien, y el hecho de que lo estoy ejecutando, ya que la no raíz está jugando algo, pero no entiendo por qué. Revisé dos veces el suido con [la demostración] ( http://en.wikipedia.org/wiki/setuid#demonstration y confirmó 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 producción de IPTables -t mangle -xnvl mientras se ejecuta como Apache para poder usar cactus para gráficos, todo bien.

14
Tom Ritter

Como Christian indicó que mi problema era que estaba tratando de ser unido en un script de shell. como se explica aquí Configuración de SUID ON A SHELL SCRIPT es una idea muy mala:

la ejecución de un script de shell en Unix implica un proceso de dos pasos: cuando el kernel determina que se trata de que se va a ejecutar un script de shell, primero inicia una copia suida del intérprete de shell, entonces el intérprete de shell comienza a ejecutar el script shell. Debido a que estas dos operaciones se realizan en dos pasos discretos, puede interrumpir el kernel después del primer paso y cambiar el archivo que el intérprete de Shell está a punto de ejecutar. De esta manera, un atacante podría hacer que la computadora ejecute cualquier script Shell de su elección.

Debido a esto, muchas distribuciones modernas de Linux ignoran los scripts Sule Shell, incluido Gentoo que estaba usando. Pude editar el archivo de sudoers y lo tengo funcionando.

13
Tom Ritter