Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Iptables con www-data

28 views
Skip to first unread message

Ni Te

unread,
May 16, 2016, 7:30:03 AM5/16/16
to
Hola, después de dos días mareando la perdiz, no encuentro donde puede estar
el error.
Intento ejecutar mediante shell_exec de PHP el comando "sudo iptables -I
INPUT -s {IP_a_Bloquear} -j DROP". El usuario que se usa (lo e comprobado
por si acaso) es www-data y está incluido en sudoers de la siguiente forma:

# User alias specification
User_Alias APACHE = www-data

# Cmnd alias specification
Cmnd_Alias FIREWALL = /sbin/iptables

# User privilege specification
root ALL=(ALL:ALL) ALL
APACHE ALL=(ALL) NOPASSWD: FIREWALL

También e probado a ponerlo todo en la misma línea, pero hace lo mismo (Nada
de nada), desde la consola se ejecuta sin problemas (claro está con root) y
desde PHP también se ejecutan sin problemas otros como "ifconfig" o hacerle
un whois al mismo IP.
La versión de SO es: debian-8.4.0-amd64.
¿Alguna sugerencia de donde seguir buscando el problema?

Un saludo

Camaleón

unread,
May 16, 2016, 9:40:02 AM5/16/16
to
El Mon, 16 May 2016 13:26:47 +0200, Ni Te escribió:

> Hola, después de dos días mareando la perdiz, no encuentro donde puede estar
> el error.
> Intento ejecutar mediante shell_exec de PHP el comando "sudo iptables -I
> INPUT -s {IP_a_Bloquear} -j DROP". El usuario que se usa (lo e comprobado
> por si acaso) es www-data y está incluido en sudoers de la siguiente forma:
>
> # User alias specification
> User_Alias APACHE = www-data
>
> # Cmnd alias specification
> Cmnd_Alias FIREWALL = /sbin/iptables
>
> # User privilege specification
> root ALL=(ALL:ALL) ALL
> APACHE ALL=(ALL) NOPASSWD: FIREWALL
>
> También e probado a ponerlo todo en la misma línea, pero hace lo mismo (Nada
> de nada), desde la consola se ejecuta sin problemas (claro está con root)

¿Y ejecutado desde la consola con sudo funciona?

> y desde PHP también se ejecutan sin problemas otros como "ifconfig" o hacerle
> un whois al mismo IP.
> La versión de SO es: debian-8.4.0-amd64.
> ¿Alguna sugerencia de donde seguir buscando el problema?

El error podría estar en sudo o en shell_exec(). Para el primero tendrás
los registros de error en /var/log/auth.log (o en el journal de systemd)
y para depurar el segundo en los registros de apache. revisa ambos por si
te dieran alguna pista del origen del problema.

Un par de guías:

PHP executing external commands - how to when username and password
required
http://stackoverflow.com/questions/25644066/php-executing-external-commands-how-to-when-username-and-password-required

Execute system commands via PHP
https://exain.wordpress.com/2007/11/24/execute-system-commands-via-php/

Saludos,

--
Camaleón

Ni Te

unread,
May 16, 2016, 4:10:04 PM5/16/16
to
-----Mensaje original-----
From: Camaleón
Sent: Monday, May 16, 2016 3:37 PM
To: debian-us...@lists.debian.org
Subject: Re: Iptables con www-data

El Mon, 16 May 2016 13:26:47 +0200, Ni Te escribió:

>> Hola, después de dos días mareando la perdiz, no encuentro donde puede
>> estar
>> el error.
>> Intento ejecutar mediante shell_exec de PHP el comando "sudo iptables -I
>> INPUT -s {IP_a_Bloquear} -j DROP". El usuario que se usa (lo e comprobado
>> por si acaso) es www-data y está incluido en sudoers de la siguiente
>> forma:
>>
>> # User alias specification
>> User_Alias APACHE = www-data
>>
>> # Cmnd alias specification
>> Cmnd_Alias FIREWALL = /sbin/iptables
>>
>> # User privilege specification
>> root ALL=(ALL:ALL) ALL
>> APACHE ALL=(ALL) NOPASSWD: FIREWALL
>>
>> También e probado a ponerlo todo en la misma línea, pero hace lo mismo
>> (Nada
>> de nada), desde la consola se ejecuta sin problemas (claro está con root)
>
>¿Y ejecutado desde la consola con sudo funciona?

Desde la consola funciona perfectamente y con un usuario no-root, previa
inclusión en sudoers

>> y desde PHP también se ejecutan sin problemas otros como "ifconfig" o
>> hacerle
>> un whois al mismo IP.
>> La versión de SO es: debian-8.4.0-amd64.
>> ¿Alguna sugerencia de donde seguir buscando el problema?
>
>El error podría estar en sudo o en shell_exec(). Para el primero tendrás
>los registros de error en /var/log/auth.log (o en el journal de systemd)
>y para depurar el segundo en los registros de apache. revisa ambos por si
>te dieran alguna pista del origen del problema.

Aquí es donde aparece la pista
/var/log/auth.log lanza el error -> pam_unix(sudo:auth): auth could not
identify password for [www-data]
Lo cual no me cuadra con lo especificado en sudoers.

>Un par de guías:
>
>PHP executing external commands - how to when username and password
>required
>http://stackoverflow.com/questions/25644066/php-executing-external-commands-how-to-when-username-and-password-required
>
>Execute system commands via PHP
>https://exain.wordpress.com/2007/11/24/execute-system-commands-via-php/

Las guías hablan de lo que ya e realizado y por desgracia no me funciona.
Creo que como es una nueva instalación la volveré a hacer de nuevo otro día
con mas tiempo por si se ha quedado alguna tripa cruzada pues todo lo demás
funciona bien.

Un saludo y muchas gracias

Juan Lavieri

unread,
May 16, 2016, 4:50:02 PM5/16/16
to
Hola.
¿No deberías probar con:

su www-data y luego lanzar el comando?

¿Es así como lo has hecho?
Saludos.

--
Juan M Lavieri

Errar es de humanos, pero es mas humano culpar a los demás.

Camaleón

unread,
May 17, 2016, 10:20:03 AM5/17/16
to
El Mon, 16 May 2016 21:59:39 +0200, Ni Te escribió:

(...)

>>> También e probado a ponerlo todo en la misma línea, pero hace lo mismo
>>> (Nada de nada), desde la consola se ejecuta sin problemas (claro está
>>> con root)
>>
>>¿Y ejecutado desde la consola con sudo funciona?
>
> Desde la consola funciona perfectamente y con un usuario no-root, previa
> inclusión en sudoers

Como te dice Juan, para ejecutarlo desde consola sería (con y sin sudo):

sudo -u www-data -c "iptables -I INPUT -s {IP_a_Bloquear} -j DROP"
su www-data -c "iptables -I INPUT -s {IP_a_Bloquear} -j DROP"

>>> y desde PHP también se ejecutan sin problemas otros como "ifconfig" o
>>> hacerle un whois al mismo IP.
>>> La versión de SO es: debian-8.4.0-amd64.
>>> ¿Alguna sugerencia de donde seguir buscando el problema?
>>
>>El error podría estar en sudo o en shell_exec(). Para el primero tendrás
>>los registros de error en /var/log/auth.log (o en el journal de systemd)
>>y para depurar el segundo en los registros de apache. revisa ambos por
>>si te dieran alguna pista del origen del problema.
>
> Aquí es donde aparece la pista /var/log/auth.log lanza el error ->
> pam_unix(sudo:auth): auth could not identify password for [www-data]
> Lo cual no me cuadra con lo especificado en sudoers.

(...)

Por el tipo de error que te da parece que el problema es que www-data no
tiene contraseña (normal) y sudo no le permite ejecutar el comando.
Prueba con otro usuario del sistema que tengas en sudo y que sí tenga
definida una contraseña.

Saludos,

--
Camaleón

Ni Te

unread,
May 23, 2016, 6:20:03 AM5/23/16
to
>-----Mensaje original-----
>From: Camaleón
>Sent: Tuesday, May 17, 2016 4:01 PM
>To: debian-us...@lists.debian.org
>Subject: Re: Iptables con www-data
>
No conocía esa forma de ejecutar como otro usuario (mis conocimientos de
Linux son limitados), siempre se aprende algo nuevo. Pero sigue haciendo lo
mismo, parece necesitar un password para www-data pese a que en passwd y
sudoers se le indica lo contrario.
He procedido con el método informático poco ortodoxo pero muy eficaz que
consiste en:
Salir - Volver a entrar
Apagar - Encender de nuevo
Desinstalar - Volver a instalar
(no falla)
Reinstalado de nuevo funciona perfectamente.
Probablemente al tratarse de una nueva instalación haya pasado algo por alto
o cualquier otro error y creo que es mas fácil empezar de nuevo, aunque sea
lo único que falla y no aprenda de ese error.

Un saludo y muchas gracias Camaleón - Juan Lavieri

Camaleón

unread,
May 23, 2016, 9:50:04 AM5/23/16
to
El Mon, 23 May 2016 12:14:30 +0200, Ni Te escribió:

(...)

>>> Aquí es donde aparece la pista /var/log/auth.log lanza el error ->
>>> pam_unix(sudo:auth): auth could not identify password for [www-data]
>>> Lo cual no me cuadra con lo especificado en sudoers.
>>
>>(...)
>>
>>Por el tipo de error que te da parece que el problema es que www-data no
>>tiene contraseña (normal) y sudo no le permite ejecutar el comando.
>>Prueba con otro usuario del sistema que tengas en sudo y que sí tenga
>>definida una contraseña.
>>
>>
> No conocía esa forma de ejecutar como otro usuario (mis conocimientos de
> Linux son limitados), siempre se aprende algo nuevo.

Para eso sirve "su" aunque suele usarse para obtener privilegios de root
también te permite cambiar de usuario, muy útil para probar cosas como
ésta.

> Pero sigue haciendo lo mismo, parece necesitar un password para www-
> data pese a que en passwd y sudoers se le indica lo contrario.

Que tenga el mimos comportamiento ejecutado desde línea de comandos es
lo correcto. Lo del archivo sudoers ya no me queda tan claro por qué lo
rechaza, quizá le hayas asignado una contraseña al usuario "www-data" (no
debe de tener ninguna) y por eso te da error o el formato que estabas
usando no era correcto :-?

> He procedido con el método informático poco ortodoxo pero muy eficaz que
> consiste en:
> Salir - Volver a entrar

Hum... para este caso no sé yo...

> Apagar - Encender de nuevo

Tampoco me termina de convencer...

> Desinstalar - Volver a instalar
> (no falla)

Método que no recomiendo en absoluto porque al final no te enteras de qué
es lo que ha pasado y si se vuelve a repetir vas a estar en la misma
situación y no creo que tengas ganas de estar reinstalado por cada error
>:-)

> Reinstalado de nuevo funciona perfectamente.
> Probablemente al tratarse de una nueva instalación haya pasado algo por
> alto o cualquier otro error y creo que es mas fácil empezar de nuevo,
> aunque sea lo único que falla y no aprenda de ese error.

Huuuum... si funciona con el mismo archivo sudoers que tenías antes
quiere decir que no era el formato. Revisa el "auth.log" a ver qué te
dice ahora.

Saludos,

--
Camaleón
0 new messages