[Cascavel-pm] Como usar comandos do linix pelo perl

Luis Campos de Carvalho monsieur_champs em yahoo.com.br
Segunda Setembro 26 12:01:51 PDT 2005


--- Douglas <spykids em brturbo.com> escreveu:
> olá pessoal
> to com uma duvida, como usar comandos do linix usando perl ?

  Use backticks, ou o comando system(), ou a forma "pipelined" do comando open().

> estou querendo desenvolver um painel de controle para hosting apenas usando 
> perl,
> para tal terei que adduser, passwd user,  add dominios no bind, reiniciar o 
> bind, add virtual host no apache
> reiniciar o apache etc...
> queria saber como executar comandos que precisam de entrada de dados, não 
> aqueles passado por argumentos.
> exemplo:
> nao sei se está certo:
> 
> open(a, "| /bin/login");
> sleep(1);
> print a "user\n";
> sleep(1);
> print a "pass\n";
> 
> gostaria que alguem me desse uma luz.

  Douglas, vou tecer algumas considerações.
  Por favor lembre-se de que estas são minhas opiniões pessoais (que emito aqui utilizando o
direito constitucional da liberdade de expressão) e que não obrigam você (nem ninguém) a fazer o
que eu digo.

  1. É INSERGURO e CONDENÁVEL utilizar Perl para acessar e disparar programas desta forma.
     O que você está tentando fazer (disparar comandos do shell que precisam de interação
homem-máquina para coletar informações) é potencialmente perigoso. Eu não faria isso.

  2. Se você deseja manipular um sistema linux programaticamente, existem bibliotecas (perl
inclusive) apropriadas para fazer a maior parte das operações. Utilizando estas bibliotecas (e não
os programas voltados para atender os usuários do sistema) você pode ter mais sucesso no seu
intento.

  3. A maior parte dos sistemas linux tem peculiaridades que devem ser satisfeitas. Eu recomendo
que você escolha entre se especializar em um dos sistemas ou construir software genérico e
configurável (que funcione independentemente de qual sistema linux você utilize). TENTAR FAZER AS
DUAS COISAS É CERTEZA DE FRACASSO.

  4. Finalmente, eu aconselho fortemente que você pare alguns dias para pensar sobre as
implicações de permitir que usuários comuns realizem operações de responsabilidade do superusário.
Usuários, na maior parte das vezes, não tem idéia do que acontece "por trás das câmeras", dentro
de um sistema linux. E muito possivelmente não saberão o suficiente para utilizar o sistema de
forma segura e eficaz. Administradores de sistemas treinados e capacitados são normalmente
indispensáveis. Considere a possibilidade de construir o sistema de forma que um administrador de
sistemas possa (opcionalmente) ser "inserido" no circuito, e tenha acesso às requisições. Um pouco
de supervisão (mesmo que remota e isenta) pode aliviar muito seus problemas.

  5. Cuidado com brechas de segurança nos programas que você usa.
     Usuários bem-informados e mal-intencionados podem causar muitos problemas para você,
simplesmente passando argumentos adequados (aos seus próprios interesses pessoais) para o sistema.
     Procure construir sistemas que consigam funcionar com Taint-Checking (switch "-T" do Perl) e
evite permitir aos usuários digitar ou enviar informações utilizadas diretamente em eval(),
system(), mkdir(), open() e outros comandos. Isto vai te economizar muitas dores-de-cabeça e
muitas chateações futuras.

  No mais, te desejo boa sorte e coloco minhas habilidades de engenheiro de sistemas à sua
disposição para atuar como consultor e auxiliar o desenvolvimento de sua aplicação.

  Putamplexos!

--
Luis Campos de Carvalho
Member of "São Paulo Perl Mongers",
Unix SysAdmin & OCP/DBA Oracle
http://br.geocities.com/monsieur_champs/

__________________________________________________
Faça ligações para outros computadores com o novo Yahoo! Messenger 
http://br.beta.messenger.yahoo.com/ 


Mais detalhes sobre a lista de discussão Cascavel-pm