[AsteriskBrasil] Cgi sem permissao para comando asterisk -rx

Oseias Ferreira ferreira.oseias em gmail.com
Sábado Agosto 21 21:12:20 BRT 2010


Em 21/08/2010, às 15:12, leandro alves escreveu:

> Como root use: chown asterisk.asterisk seu_agi
>
> Volte para o seu uuario e tente de novo.
>

Mas perece que ele está usando é cgi mesmo.
Neste caso não adianta nada fazer chown no script.

Ele quer que o apache mostre a saida do comando:
asterisk -rx "comando"

Quanto rodar o apache como root, Alcapone, eu não aconselho.
É melhor você configurar o sudo e permitir somente os aplicativos que  
o apache precisará rodar.
Aí você invoca com o asterisk com o sudo.

O seu /etc/sudoers deverá ficar mais ou menos assim:

seu_usuario_que_roda_o_apache     ALL=NOPASSWD:/usr/sbin/asterisk

Para descobrir que usuario roda o seu apache:
ps axu|grep apache

Nos Debians like, geralmente é www-data.
Como root digite:
#visudo

e adicione a linha:

www-data	ALL=NOPASSWD:/usr/sbin/asterisk

Agora no seu script você terá que fazer assim:

#!/bin/bash
echo "Content-type: text/html"
echo ""
sudo /usr/sbin/asterisk -rx "sip show peers"

Salva ele e faça ficar executável e com permissão de leitura para  
todos os usuários.

chmod +rx seu_script.cgi

Sem as duas primeiras linhas, o cgi não funciona. O browser não  
reconhece o que está vindo.
É claro que, para tornar legível, você precisará formatar a saída do  
asterisk. Desta forma imprime tudo embolado no browser.
Você pode usar o awk.

Se der errado, veja nos logs do apache.
Geralmente está em /var/log/apache2/error.log

Lembre-se que o apache tem permissão para executar o shell do asterisk.
Isto já é uma brecha enorme. Controle as permissões do que pode ser  
configurado no comando do asterisk.
Mas é melhor que rodar o apache como root.
O apache como root compromete todo sistema, pois dá permissão a um  
possível invasor rodar qualquer cgi como root.
Dentro do cgi, ele pode colocar qualquer coisa. Inclusive algo para  
mudar a senha do root.
Aí já era...

Abraço.

--
Oséias Ferreira.












Mais detalhes sobre a lista de discussão AsteriskBrasil