Apache2 não executa alguns comando no CGI-BIN

Iniciado por Said Dias, 18 de Fevereiro de 2012, 02:19

tópico anterior - próximo tópico

Said Dias

amigos bom dia

Uso o ubuntu 10.04 com apache2, bind9 e um firewall

os clientes que usam a internet são redirecionados para uma pagina remota onde ele tem que colocar seus dados para que possam usar a internet.
Depois de colocar os dados ele click no botao conectar, esse botao executa um script dentro do meu servidor esse script libera o IP dele no meu firewall assim ele poderá acessar a internet. O problema é que o comando IPTABLES que esta dentro desse script nao é executado.

SCRIPT QUE O APACHE DEVE EXECUTAR:
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
echo -e "Content-type: text/html\n"
iptables -t nat -I novaempreasa -s 10.172.13.11 -j ACCEPT
iptables -I novaempreasa -s 10.172.13.11 -j ACCEPT
iptables -I novaempreasa -d 10.172.13.11 -j ACCEPT


Olhe o meu /var/log/apache2/error.log

[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] /var/www/cgi-bin/autoriza.sh: 63: , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] /var/www/cgi-bin/autoriza.sh: 64: , referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] iptables: not found, referer: http://www.novaempreasa.com.br
[Sat Feb 18 01:28:16 2012] [error] [client 10.172.13.11] , referer: http://www.novaempreasa.com.br


Mas se eu executo esses mesmo comandos pelo terminal manualmente ele roda perfeitamente

Olhe como estão as permissões para o script

#ls -l
-rwxrwxrwx 1 root     root     5707 2012-02-15 23:22 autoriza.sh


Versão do iptables
#iptables -v
iptables v1.4.4


Ja tentei muita coisa, mas ainda nao consegui, ate atualizei meu kernel
Linux servidor.said 2.6.32-24-generic #39-Ubuntu SMP Wed Jul 28 06:07:29 UTC 2010 i686 GNU/Linux

Por favor aceito qualquer dica.

Grato

Said.




zekkerj

#1
Um script CGI é executado com permissão de usuário (o mesmo usuário que executa o apache, no caso do Ubuntu, o usuário "www-data").

O iptables precisa ser executado com permissão de super-usuário.

Eu recomendo veementemente que você nunca tente se tornar super-usuário a partir de um programa CGI. Com certeza há formas melhores de fazer isso, que não exponha toda sua máquina a invasão.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Caro zekkerj Obrigado pela resposta,

E como eu faria isso da forma melhor?

zekkerj

Que tipo de clientes são esses? É um provedor, tipo provedor de rádio ou wireless? Se for, vc poderia usar autenticação 802.1X na conexão deles.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

é um sistema que usamos aqui na empresa, ele bloqueia a internet, a internet só é liberada quando o usuario colocar alguns dados, as conexoes são tanto pela rede sem fio ou pela rede local. Deveria ser mesmo desta forma que lhe falei, irei dar uma olhada nesse usuario www-data que voce me informou, mas se puder me ajudar fico grato.
so quero que me cgi-bin execute esses comando do IPTABLES.

zekkerj

Você leu o que eu disse? Isso é totalmente não recomendado, e há outras formas de fazê-lo, que não exigem expor sua máquina a invasão, nem quebrar totalmente seu Apache (que foi todo configurado "de fábrica" pra não permitir fazer isso).

Pq não estuda sobre autenticação 802.1X? Isso pode ser feito diretamente nos switches, o usuário que não passar por essa autenticação não vai ter nem sinal de rede local. E o melhor: é totalmente compatível com rede wireless. Não apenas isso, a autenticação WPA2-Enterprise é totalmente baseada nisso.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

Não sei se ficou claro... o iptables só pode ser executado pelo root. Uma solução simples seria pegar seu script e fazê-lo SUID-root; mas o Apache se recusa a executar scripts SUID-root. Então você tem que fazer seu script executar outro script que seja SUID-root, e rezar pro Apache não ter desabilitado isso.

Isso pq? Pq é extremamente inseguro executar scripts CGI-BIN SUID-root.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Entendi sobre a questao da segurnaça, mas o primeiro ponto é que são 12 empresas e cada empresa deve ter uns 7 AP cada um. se fosse somente um AP ou ate um pouco mais eu poderia colocar essa filtro dentro dos APs, o problema e que são muitos e ficaria inviável fazer isso em todos eles. E tem outra questão, a autentificação dos usuários deve ser feitos em um só servidor que fica hospedado no UOL, assim o funcionário de uma empresa poderia e pode acessar a internet das outras filiais. em qualquer das filiais quando o usuário tentar acessar a internet é redirecionado para uma pagina que fica nesse servidor do UOL, depois dele colocar as credenciais  um script é executado dentro do meu apache e ai libera a internet pro cada.
Em cada filial nos temos um servidor somente para isso, então acho que a questão da segurança não seria problema já que não temos mas nada nesses servidores.
Me fale sobre esse usuário do apache o www-data, não sei nada sobre isso. cai de paraquedas aqui nesta empresa.

Grato.

zekkerj

Filtro? Não é um filtro que vc precisa, é WPA-Enterprise, isso é uma função do AP, faz parte dele da mesma forma como o WPA-Personal que vc deve estar usando agora.

A autenticação passa a ser feita em um servidor RADIUS, os APs funcionando em modo WPA-Enterprise vão consultar o servidor RADIUS pra saber se o usuário pode acessar a internet ou não. Isso sem vc precisar quebrar a cabeça criando scriptizinho, nem fazer gambiarra de iptables.

CitarEm cada filial nos temos um servidor somente para isso, então acho que a questão da segurança não seria problema já que não temos mas nada nesses servidores.
Pô bacana, esse é o pior erro que vc pode cometer. Um servidor tem sempre três recursos que interessam ao invasor: ele tem um processador, ele tem memória, e ele tem uma conexão internet. Se um invasor toma controle sobre seu servidor, ele ganha um trampolim de onde ele pode atacar outras máquinas sem se expor diretamente.

Além disso, você está considerando que todos os que te atacarem são invasores com algum propósito; isso não é verdade, pois há muitos que atacam apenas por atacar, sem propósito nenhum --- puro vandalismo. Outro erro é achar que o fato de você esconder alguma coisa, como um serviço como esse, garante que ninguém irá atacá-lo. Os invasores procuram, vasculham, experimentam, e mais cedo ou mais tarde descobrem as suas vulnerabilidades.

Um servidor exposto na internet é sempre um ponto fraco, e por isso tem que receber um tratamento cuidadoso de proteção contra invasões.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

Said Dias

Ok, irei dar uma estudada nesse RADIUS, assim irei ver se me atende.

irtigor

Dá uma olha em captive portal. Teve um que eu vi, que usava radius por baixo dos panos.