Segurança em Sistemas Distribuídos

Introdução

lá vai o tempo em que era necessário comprar um supercomputador para realizar tarefas mais complexas. Hoje em dia tudo faz mais sentido quando a mesma tarefa é processada em paralelo por vários computadores, ou quando os mesmos periféricos são acedidos por vários terminais em simultâneo. Daí o conceito de Sistema Distribuído.

O que é um Sistema Distribuído—Definição

Sistema Distribuído é um conjunto de computadores independentes, interligados através de uma rede de computadores, que se apresenta ao utilizador como um sistema único e consistente. Por exemplo, uma tarefa qualquer a executar, se for feita por um conjunto de computadores a computação é distribuída por todos e não apenas por um, não sendo necessária sobrecarga de processamento.

Uma tarefa qualquer, se divisível em várias sub-tarefas pode ser realizada em paralelo.

Vantagens / Desvantagens

A grande vantagem dos Sistemas Distribuídos é poder, com computadores baratos e de baixo processamento, formar um supercomputador que normalmente sairia muito caro. O compartilhamento de recursos (impressoras, dados, CDs, etc.), a transparência, concorrência (acesso da várias máquina a uma só), tolerância a falhas (confiabilidade—se falhar um computador numa rede de vários é mais fácil recuperar da falha do que se fosse apenas num computador), escalabilidade (facilmente podem ser adicionados computadores à rede), aumento da capacidade de computação, aumento da segurança / estabilidade global, factor económico (é melhor ter vários computadores medianos / fracos que um forte) e capacidade de processamento. São estas as principais vantagens.

Procedimentos Remotos

Os procedimentos remotos tiveram origem nos anos 80, surgindo da necessidade de haver uma metodologia de programação distribuída. A primeira foi o RPC (Remote Call Procedure), numa altura em que a linguagem dominante era o C. Como a linguagem C era procedimental e permitia chamar uma função em qualquer parte do código, pensou-se em desenvolver uma técnica que facilitasse o desenvolvimento de aplicações para Sistemas Distribuídos mantendo a ideia de chamar funções de máquinas exteriores da mesma maneira como se fosse na própria. Logicamente que tinha de haver algo que fosse totalmente transparente para o programador e que fizesse a conversão dos dados recebidos / enviados para o cliente e para o servidor, isto é, as stub routines. Para melhor perceber este procedimento, pode olhar para o seguinte esquema:

Sistemas Distribuídos: RPC com stub routines

Como se pode observar, os stubs encarregam-se daquilo a que se chama marshalling, ou seja, converter os dados para o formato intermédio para enviar do cliente para o servidor ou do servidor para o cliente, e voltar a convertê-los do formato intermédio no local de destino (unmarshalling).  Alguns exemplos de implementações de RPC são: Sun RPC (para plataformas UNIX / Linux), Java RMI (RPC para Java), DCOM (RPC para Windows), SOAP (utilizado por serviços da web) e CORBA (padrão RPC independente da plataforma).