Autenticação Centralizada em Linux com a Lila

No post passado, quando falei sobre a migração do servidor e dos clientes do Laboratório de Informática do DETI, mencionei que tive alguns problemas de integração no quesito de administração centralizada de contas de usuários e senhas. Se vocês lembram, eu tinha duas opções: migrar de vez para o LDAP ou criar desenvolver uma solução que suprisse minhas necessidades.

Resolvi aproveitar a oportunidade e criar uma solução própria e que resolvesse rapidamente o problema. Este software é o Lila :) (”Low Information Lookup Accounts” ou uma homenagem, é claro). Ele existe em duas versões: servidor, que será o computador que possui as contas que serão disponibilizadas via rede e serão utilizadas para autenticação nos clientes, que possuem uma versão específica.

A idéia é criar algo simples e direto para, em um ambiente onde o sistema operacional seja o Debian Etch, tanto nos clientes quanto no servidor, seja possível centralizar a autenticação em um único ponto, com a instalação o mais simplificada quanto possível, sem esquecer as integrações com os subsistemas que o Debian traz, como o hal, udev, dbus e pam, para que o acesso a hardware seja o mais transparente possível para os usuários das máquinas clientes, como usar gravadores de cd-r/cd-rw/dvd e dispositivos usb.

Recomendo fortemente o Debian como sistema operacional, pois desenvolvi este software baseado nele, mas deve funcionar em derivados, como o Ubuntu. Na versão atual, tanto o servidor quanto o cliente podem ser instalados com apenas um comando, já que disponibilizei ambos em pacotes .deb, específicos do Debian.

Primeiro vou falar um pouco sobre os requisitos de funcionamento do software. Todos os usuários (e senhas shadow) que se desejar disponibilizar pela rede devem estar cadastrados no servidor, com uid (user id) maior do que 1000, e cadastrados no grupo users, para maior segurança dentro do servidor. A inserção em outros grupos será feita automaticamente via PAM.

Para os clientes, é preciso apenas que não existam usuários cadastrados com uid maior do que 1000. Para ambos, será necessário que a conexão com a internet esteja devidamente configurada e que um repositório válido está configurado no arquivo /etc/apt/sources.list. Esses requisitos se fazem necessários para que as dependências do Lilad e do Lila sejam corretamente satisfeitas.

Os arquivo dos servidor e clientes estão disponíveis através dos links abaixo, e estão licenciados sob a GPL versão 2:

Para instalá-los, basta executar o seguinte comando, como root:

# dpkg -i nome_do_pacote

Lembrando de substituir o nome_do_pacote por lilad_0.7.0_i386.deb para instalação do servidor e lila_0.7.0_i386.deb para instalação do cliente. Se você não possuir as dependências necessárias, alguns erros de falta de software aparecerão. Use o seguinte comando para corrigir isso, instalando tudo:

# apt-get install -f

Pronto. O sistema já deve estar funcionando. Para iniciar o servidor, digite:

# /etc/init.d/lilad start

Para iniciar o cliente (depois de iniciar o servidor), o comando seria:

# /etc/init.d/lila start

Mas antes de iniciar os serviços, será preciso fazer uma pequena configuração no arquivo /etc/default/lilad.conf para o servidor e /etc/default/lila.conf para o cliente.

Para o servidor, será necessário configurar o caminho do diretório onde o lilad está instalado (o valor padrão está correto) e a porta que os serviços irão rodar (o lilad e o lila trabalham na porta TCP 2508, que já está informado no arquivo). A única configuração realmente manual é que, o cliente, é preciso indicar o IP do computador em que o lilad está instalado e rodando.

É muito comum em ambientes que precisam de autenticação centralizada, que os arquivos dos usuários estejam compartilhados pela rede, normalmente via NFS, comum em Linux. No momento da instalação do lila client, o software busca por algum compartilhamento NFS montado como /home, extrai o IP do servidor e preenche no arquivo de configuração. Decidi fazer isso para facilitar a configuração e torná-la não-interativa (para instalações em massa), e recomendo que o lilad seja instalado no servidor NFS, para aproveitar as contas que já estão cadastradas.

Depois de feitas as configurações, basta iniciar o lilad e depois os lila client nos computadores clientes. Ambos estarão automaticamente iniciados no boot e finalizados quando os computadores forem desligados. Lembre-se de parar o lilad quando for adicionar algum usuário e iniciá-lo depois. Os clientes também precisam ser reiniciados.

Agora vamos a alguns detalhes mais específicos da aplicação. Desenvolvi um suporte de cache de informações no cliente, que checa se alguma informação mudou no servidor a cada inicialização do serviço. Se as informações forem as mesmas, nenhum download é feito e o cliente usará as informações em cache (locais).

Tanto o cliente quanto o servidor lila suportam por padrão conexão encriptada com certificados SSL. Basta configurar a para ambos usarem a porta 443 e configurar um contêiner no servidor que disponibilize a aplicação através da conexão encriptada pelo certificado, como o Apache 2 + FastCGI. Para realizar as conexões, utilizei o toolkit do projeto OpenSSL. Em termos de softwares necessários, tudo já é instalado por padrão como dependência no momento da instalação dos pacotes.

O lilad e o lila client foram desenvolvidos inteiramente utilizando a linguagem Ruby e os conceitos de webservices baseados em REST on Rails, e os recursos deste versátil framework. O contêiner instalado por padrão junto ao lilad é o servidor mongrel, que disponibiliza a aplicação lilad, feita em Rails para acesso externo e concorrente, através da gem fastthread. No momento da instalação do servidor, você terá que indicar a versão de ambos. Escolha sempre a mais nova e para linux.

O objetivo desta aplicação é fornecer uma ferramenta de rápida instalação como cumprir o que se propõe e para ganhar know how com as ferramentas envolvidas no desenvolvimento (além de utilizá-la no LI), e não para um ambiente de produção empresarial que não aceite falhas. Todos estão convidados a testar o software e entrar em contato caso encontrem algum erro ou tenham novas sugestões.

Depois de arquitetar a solução e obter o conhecimento necessário para desenvolvê-la completamente, foram necessárias 3 horas para desenvolver e 7 horas para testar e integrar completamente com o Debian e criar os pacotes para distribuir. Achei o tempo realmente muito pequeno, algo que foi alcançado devido à produtividade das ferramentas utilizadas.

E tenho um feature para a próxima versão:

  • Proteção de segurança especificando dentro da aplicação quais os hosts poderão pedir as informações de contas (estou fazendo isso atualmente utilizando recursos do próprio sistema operacional);

Até a próxima!

Artigos Relacionados:


Sobre este artigo