El problema es que para ejecutar iptables... necesitas ser root (es decir, el usuario web es root), o que el programa esté a nombre de root, o que el programa, estando a nombre de root, tiene el permiso setuid para que lo pueda ejecutar el usuario web.
Y aún así... el servidor web se puede negar a ejecutarlo.
Para que quede claro:
- el programa CGI lo va a ejecutar el mismo usuario que está ejecutando el servidor web (que se llamará www, www-data, httpd, apache, apache2 o apache4). Entonces... ese programa debe tener permisos de ejecución para ese usuario. Y eso se consigue de varias formas distintas:
- el programa está a nombre (propietario) del usuario web
- el programa tiene permisos de ejecución para el grupo de usuarios al que también pertenece el usuario web
- el programa tiene permisos de ejecución para todo el mundo
- el programa tiene activado el indicador setuid para que, aun perteneciendo a un usuario, al ejecutarse, obtiene la personalidad de otro usuario.
Desde luego, lo más cómodo es el punto 3: chmod 775 cgi.pl
- pero... aquí tienes un problema: el iptables requiere que sea ejecutado por el usuario root (eso es lo que te está diciendo el mensaje de error). Entonces... solo queda dos opciones:
- el programa tiene como propietario el usuario root (pero puede haber problemas. Ver más abajo)
- lo mismo que antes: el propietario es el usuario root, pero tiene activado el bit setuid para permitir que el usuario web lo pueda ejecutar con permisos de root.
Te comentaba que podría haber un problema, y es que el servidor web puede tener activado el modo de seguridad, y darse cuenta de que el programa a ejecutar está a nombre del
root, por lo que no lo ejecutará.
En ese caso, no te queda más solución que adoptar la solución de ejecutarlo por medio de
SuEXEC. Aquí hay un buen
resumen (a partir de la sección
How To Enable SuExec).
PERO... si está puesto con usuario
root, SuEXEC NO lo va a ejecutar nunca (ver punto 7 del enlace de SuEXEC).
La solución es: desactivar el modo de seguridad del servidor web. Puede ser tan sencillo como desinstalar el SuEXEC. Luego, cambias el propietario del programa a
root:
chown root.root cgi.ply le das permisos 755
chmod 755 cgi.plpara que lo puede ejecutar todo el mundo. Y listo.
Es obvio, advertir, que permitir que el servidor web ejecute un programa como
root, es tremendamente peligroso.
Una cosilla... ¿Te has dado cuenta de que no estás imprimiendo el valor de la variable $status?