Linux Básico

Apresentação de ontem para os feras de Computação.

E só lembrando que apenas filtrei o conteúdo de outros slides que achei, a referência ao original esta no último slide.

Para os que querem conhecer mais, no Guia Foca tem material muito material explicativo em diversos níveis.
Dúvidas ou correções são bem vindas. =)

Uma introdução ao LDAP

Os Guardians fazem uso de LDAP no LCC… Tive um tempinho para investigar como o sistema funcionava e criei esse post para divulgar os resultados. Para entender o LDAP na autenticação, explorarei alguns conceitos chaves para então apresentar o LDAP. :)

Autenticação

O Linux opera por chamadas C para enteder como ele deve proceder durante um requisito de arquivos de autenticação. Quando o sistema precisa obter informações sobre o usuário (ex: uid), uma chamada C executa uma invocação ao arquivo /etc/nsswitch.conf e procura de onde ele deve obter essa informação.

Provavelmente, se forem ver o arquivo nsswitch de vocês, encontrarão algo como “compat”. Isso difere da opção “files” (que consulta apenas o passwd/shadow/groups) pq permite que o NIS opere usando os operadores + e -. Explicando: no NIS vc precisa adicionar uma linha do tipo +::::: no passwd - isso vai indicar que o sistema deve consultar o NIS para realizar uma consulta a qual o usuário local. Quando vc usa files, essa linha representa apenas um usuário.. no NIS, representa que vc deve consultar uma base externa de dados.

PAM

Mas nem sempre o sistema faz diretamente uma consulta aos arquivos… Às vezes ele faz uma consulta ao PAM. PAM significa “Pluggable Authentication Modules” a tradução dá uma idéia do que faz: permite que vc adicione diversos modulos ‘plugáveis’ para permitir autenticação no sistema.

Nos sistemas modernos, os arquivos no /etc/pam.d/ são responsáveis pelas diretrizes de autenticação do sistema. Em especial, são 4 categorias principais do módulo PAM: account, auth, password e session:

account

Verifica se a conta é válida para o serviço requisitado (password expirou, etc…)

auth

Verifica se o usuário é quem diz que é (conceito de autenticação). Em geral, pede uma senha.

password

Módulo responsável por controlar senhas (pedir por uma nova tentativa, verificar se a senha é forte, etc)

session

Responsável por monitorar uma sessão (i.e. - preparar o ambiente para iniciar uma sessão com o usuário/log quando o usuário sair…)

LDAP

Ok, o q é LDAP? LDAP significa “Lightweight Directory Access Protocol”. Por diretório, ele representa uma maneira hierárquica de
manter informações, como um “diretório”. Você pode, por exemplo, armazenar a informação que um usuário é “X” dado que no sistema, ele esta dentro do diretório ‘dc=net’ que está dentro do diretório ‘dc=example’ que está dentro do diretório ‘ou=People’ que por sua vez contém o arquivo ‘uid=matheusgr’.

Um item no LDAP não é bem um item.. é só uma folha de diretório. Cada diretório pode ter atributos (como: cn (comentário), uidNumber (número do ID), etc). e cada diretório pode ter subdiretórios.

O que faz do LDAP um protocolo? Ele define uma maneira clara de comunicação entre cliente-servidor através de mensagens que servem unicamente para consulta/inserção/atualização/remoção de atributos e diretórios.

LDAP e Autenticação

Todo sistema, em geral, faz uso de um protocolo de autenticação. Os mais simples utilizam um arquivo com usuário e senha. Entretanto, os sistemas mais avançados permitem que você faça uso de uma base de dados existente para permitir autenticação. É natural para um programa Linux fazer uso do sistema existente (passwd + shadow) como autenticação, entretanto, essa plataforma de autenticação só seria possível para um programa que, de fato, rodasse no Linux.

Para ir um passo adiante, os sistemas utilizam o sistema PAM que é compatível com boa parte da plataforma Unix (Linux, Solares, *BSD). Apesar de muito compatível com a maioria dos sistemas Unix, o PAM não oferece uma camada para o Windows, nem certas facilidades de outros sistemas.

Por fim, para ser compatível com mais sistemas, é preciso uma alternativa é usar um protocolo leve que te dê informações para autenticar usuários… Eis que entra em ação o LDAP: um protocolo fácil de ser implementado e que contém as informações para autenticação do sistema.

Um protocolo leve apresenta outras vantagens: o modelo de replicação, backup e acesso remoto à base de dados são bem definidos. Estas vantagens, juntamente com um protocolo que é acessível por diferentes S.O.’s faz com que o LDAP seja vantajoso.

Implementações LDAP

Por ser um protocolo, o LDAP permite que existam diversas implementações: cada implementação só precisa ‘cumprir’ o protocolo LDAP pra ser decretada como funcional. Talvez uma das implementações mais usadas no Linux seja o SLAPD. O Slapd implementa o protocolo LDAP e é uma aplicação OpenSource.

Ao instalar o Slapd ( apt-get install slapd ), o usuário se defronta com um pedido do dóminio da base de dados, conta privilegiada e senha. O domínio é apenas um caminho em árvore para diferenciar as diferentes sub-redes que podem ser alimentadas pela mesma base de dados. Por exemplo, digamos que o LSD e o LCC compartilhasse um servidor LDAP e que cada uma tivesse sua base própria de usuários. Nada mais natural que o LDAP do LSD usasse, como diretório, “dc=lsd,dc=ufcg,dc=edu,dc=br” e o LCC: “dc=lcc,dc=ufcg,dc=edu,dc=br”. O usuário principal é o responsável por acessar a base de dados local,
e a senha tem o mesmo objetivo.

O SLAPD dispõe da configuração do servidor, mas há ainda a parte cliente a ser considerada. O modo de consulta do cliente é definido pelo arquivo /etc/ldap/ldap.conf e precisa ter as seguintes linhas:

BASE dc=lcc,dc=ufcg,dc=edu,dc=br
URI ldapi:///

Onde, BASE é o diretório de consulta base e URI é a forma de consulta (pode ser: ldapi, q faz uso de socket local, ladp, q faz consulta por um TCP descriptografado e ladps que usa SASL para comunicação criptografada).

Diretórios de usuários no LDAP

Os usuários do Linux ficarão no grupo “People” e os grupos no diretório “groups”, para isso vc precisa criar estes diretórios:

ldap:/tmp# cat groups.ldif
dn: ou=groups,dc=lcc,dc=ufcg,dc=edu,dc=br
objectClass: organizationalUnit
ou: groups

ldap:/tmp# slapadd -l groups.ldif

ldap:/tmp# cat people.ldif
dn: ou=People,dc=lcc,dc=ufcg,dc=edu,dc=br
objectClass: organizationalUnit
ou: People

ldap:/tmp# slapadd -l people.ldif

LDAP e autenticação nativa

Como falei anteriormente, o Linux faz uso de um arquivo nativo para identificar de onde obter informações de autenticação. Esse arquivo, o nsswitch.conf é consultado toda vez que é preciso procurar algo na base de dados do passwd/groups/shadow/…

Para permitir que o nsswitch procure também no LDAP, é preciso instalar o pacote: libnss-ldap . Esse pacote permite que o nsswitch seja capaz de se comunicar com o LDAP para procurar usuários do sistema. Para permitir essa comunicação, considerando a correta instalação do pacote, que o nsswitch.conf seja alterado para fazer consultas ao LDAP. Onde tiver “compat” é preciso substituir por “files ldap”. Exemplo:

passwd compat

Por:

passwd files ldap

Convém substituir no arquivo “libnss-ldap.conf” o host para ser usado na autenticação (em geral, 127.0.0.1 no servidor).

Agora toda vez que for feita uma consulta ao nsswitch, ele irá também usar a conta de admin para se logar no LDAP e procurar pelas informações dos usuários. Para isto, ele faz uso do arquivo libnss-ldap.secret que contem a senha do admin do LDAP.

LDAP e PAM

Nem todas as aplicações fazem uso do sistema nativo. A maioria faz uso do PAM. E para preparar o sistema para isso, é preciso instalar o libpam-ldap . O libpam-ldap instala um módulo PAM que se comunica com LDAP para obter informações a respeito do usuário na base LDAP. Assim, todo usuário que fizer uso do PAM, irá procurar a base do LDAP para obter informações a respeito de sua conta.

Para instalar o módulo PAM:

apt-get install libpam-ldap

Da mesma forma que o Nsswitch, o PAM também faz uso de dois arquivos: pam_ldap.conf e pam_ldap.secret. Ele irá se conectar ao banco LDAP definido no conf usando a senha definida no secret.

Outro aspecto importante é a configuração dos arquivos /etc/pam.d/common-*. Eles precisam fazer uso do pam_ldap.so. Observe que o pam_ldap é necessário mesmo com o pam_unix. O módulo do pam_unix não faz uma consulta ao nsswitch, mas apenas aos arquivos em disco (passwd/shadow/groups). O módulo pam do ldap faz a adição desta linha automaticamente.

LDAP e SSL

O LDAP permite três formas básicas de comunicação: TCP, socket unix e TCP/SSL. Para permitir o uso de SSL, é preciso configurar no slapd.conf as diretrizes d conexão SSL:

TLSCipherSuite HIGH:MEDIUM:+SSLv2:+SSLv3:RSA
TLSCertificateFile /etc/ldap/certs/server.crt
TLSCertificateKeyFile /etc/ldap/certs/server.key
TLSCACertificateFile /etc/ldap/certs/cacert.crt
TLSVerifyClient allow

Basta adicionar nos clientes o uso do protocolo “ldaps://endereco_do_server”

LDAP e indexação

Por fim, o LDAP faz uso de um banco de dados. Como todo banco de dados, ele precisa ser indexado de forma adequada para obter acesso rápido aos campos relevantes. Se o syslog apontar erros do tipo:

fileserver slapd[11493]: <= bdb_equality_candidates: (uid) not indexed

Isso significa q vc precisa ativar a indexação nestes campos. Para tanto, no slapd.conf adicione no espaço de Index:

index uid eq,pres,sub

E reexecute o slapindex como o usuário do banco de dados (provavelmente openldap).

É só isso?

Não. O LDAP é extremamente poderoso. No slapd.conf vc encontra, na sessão de imports, uma descrição de quais bases de dados serão utilizadas pelo SLAPD. Para autenticação, o nis e as bases principais são suficientes, mas caso o sistema queira fazer uso do LDAP para armazenar informações de email/dns/etc.. novos esquemas precisam serem adicionados.

Ainda: o sistema faz uso de diversas configurações de acesso (access …) Cada uma representa uma ACL de acesso ao sistema e é bastante flexível de acordo com as necessidades do administrador do sistema.

Por fim, diversos pacotes do debian adicionam novas funcionalidades que operan com o ldap. As mais importantes:

ldap-utils

Ferramentas de consulta/adição/modificação/etc…

finger-ldap

Uso do finger com consulta numa base LDAP

python-ldap

Módulo python para uso do LDAP

smbldap-tools

Ferramentas do samba para uso do LDAP

To the Infinity and Beyond

O que mais resta? O Slapd permite uso de um serviço slave/master através do slurpd.. Além de diversos módulos que se comunicam diretamente com o LDAP.. a exemplo do email e DNS, mas pode ir além com o apache e outras ferramentas.

Também é preciso saber tratar dos erros que podem acontecer. Por exemplo, como cliente, infelizmente, vc tem q manter sincronizado pelo menos 3 arquivos de configurações: o do PAM, o do nsswitch e o do próprio LDAP. Altere o domain da base de dados ou o usuário principal… e vc precisa alterar todos estes arquivos. E isso pode custar um tempo caso faça algo errado.

O LDAP dá erros esdrúxulos e indecifráveis. Não tem muito como escapar disto… Por sorte, a configuração padrão dos pacotes é adequada e suficiente para evitar esses erros bestas. Usar o strace, log, debug e internet podem dar uma luz na direção a ser tomada, mas é preciso entender também como cada parte do LDAP se integra no mecanismo de autenticação.

SSH - Administração de Sistemas

Material da apresentação feita a um bom tempo para a graduação. Simplesmente esqueci de mandar o material. O que importa é que lembrei desses slides pois os conhecimentos adquiridos nessa pesquisa me foram muito úteis hoje. =)

Ciclo de Seminários

Olá Pessoal,

Como já foi comunicado na lista de graduação, o Grupo Guardians deu início nessa semana ao seu ciclo de seminários técnicos sobre administração de Sistemas. A apresentação de seminários sempre fez parte das políticas internas dos Guardians, e como forma de aproximar o grupo dos demais graduandos, surgiu a idéia de abrir tais seminários para os alunos da graduação.

A primeira apresentação, ocorrida no dia 15/05/2009, no auditório do Reenge, teve como tema principal os conceitos de virtualização, com ênfase no software VirtualBox. Foram discutidas ainda algumas idéias a respeito do uso de virtualização no LCC e alguns membros do grupo já iniciaram atividades no que diz respeito a tal ponto. Os slides da apresentação, assim como dois papers interessantes para o entendimento do tema estão disponíveis aqui.

É importante ressaltar ainda que qualquer graduando pode sugerir novos temas para as apresentações, bastando para isso enviar um e-mail para guardians-l@lcc.ufcg.edu.br informando o assunto e alguns motivos para a realização de tal seminário.

Atenciosamente,
Grupo Guardians.

Horário de Aulas do LCC

Acabo de colocar nesse calendário ao lado direito aqui da página o horário de aulas do LCC, juntamente com o calendário do curso CCC.

Durante as aulas, não é permitido entrar para utilizar as máquinas, então antes de se programar para estudar no LCC, olhe se está em aula ou não.

Vocês podem adicionar o calendário ao seu Google Calendar, se preferir, nesse link. :)

Seleção de Novos Guardians!!!

Está iniciando mais um novo processo seletivo em busca de novos guardians… Quem não viu a chamada, está logo abaixo. Este ano mudaram algumas coisas da seleção. Desta vez o processo será aberto com uma palestra para tentar alinhar o interesse do povo com o do grupo… Espero que apareçam bons candidatos. :)
Seleção de Novos Guardians
O grupo Guardians, responsável pela administração do LCC, anuncia a
abertura de novas vagas voluntárias.

Sob a tutela da professora Raquel Lopes, cada Guardian é responsável
pelas atividades de administração de sistemas do laboratório, tendo
como foco:
- Instalar, desenvolver e atualizar software;
- Prover e manter serviços à graduação;
- Responder dúvidas e atender pedidos dos usuários do laboratório;
- Administrar as contas e a infra-estrutura básica necessária para o curso.

Lembramos que o trabalho não é remunerado e refere-se a administração
de sistemas (e não de redes). A atividade demanda tempo dos alunos,
entretanto, esta é uma ótima experiência extra-currícular a todos os
interessados em completar sua formação acadêmica.

Para participar do grupo o aluno deve:
- Ser aluno de computação devidamente matriculado;
- Dispor de 10h livres por semana;
- Ter conhecimentos básicos de computação;
- Apresentar iniciativa e ir atrás de conhecimento.

Pedimos que todos os interessados compareçam obrigatoriamente à
palestra a ser ministrada no dia 15/04 (quarta) às 13:00 no Reenge
sobre informações a respeito do grupo e sobre as demais etapas do
processo de seleção.

Atenciosamente,
Grupo Guardians

Bad bad wordpress no comments for you!

Removido a parte de comentários dos posts. Eram 40~60 comments de spam todo dia para moderação. =\

Mas quem quiser falar com os guardians, ou comentar algo, é só mandar um email! =)

Guardians WebApps

Os Guardians orgulhosamente apresentam: ForwardMail

O que é o ForwardMail? É a maneira Web de cadastrar emails para os quais os seus emails do LCC serão redirecionados!

Esta foi uma aplicação desenvolvida como um “toy example” para iniciar o desenvolvimento de futuras aplicações web no grupo Guardians. A escolha de uma aplicação para fazer isto surgiu de uma conversa com o professor Dalton (”Bixo! Os Guardians podiam fazer algo para facilitar esse redirecionamento de emails!”). Pensei numa interface Web, pois tal aplicação é simples e explora a base para o desenvolvimento de futuras aplicações que sigam o mesmo modelo.

Mantive novamente Python como a principal linguagem de programação do projeto: é incrível como é produtivo. Todo o desenvolvimento/implantação levou 4 horas. Dessas, 2 foram programando em C (explico adiante) e outra boa parte foi a implantação da ferramenta (configurar DNS, Apache, instalar módulos, …). O resto foi codificar em Python.
A primeira etapa foi a construção da interface CGI. Basicamente, um POST com os elementos:

  • app - Identifica a aplicação atual (atualmente só há ‘forward’)
  • submit - Determina que uma ação foi realizada
  • login - Login do usuário
  • password - Senha do usuário
  • emails - Emails para redirecionamento

Quando o campo de “submit” não é passado ao sistema, a ação padrão é exibir uma página com este formulário para ser preenchido.
Como a senha precisa passar por HTTP, foi preciso, em seguida, construir um VirtualHost seguro no Apache. Basicamente, isto define que o canal que o usuário vai utilizar é seguro (SSL), e que sua senha pode trafegar sem problemas. O VirtualHost utilizado é admin.lcc.ufcg.edu.br. Qualquer requisito a este endereço, representa uma chamada a interface CGI das aplicações em Python.

Um adendo aqui: foi definido no mod_python um único ‘handler’ para trabalhar com todos os requisitos CGI. De acordo com o que vier no campo ‘app’, o módulo adequado é chamado. Isto se assemelha (grosseiramente) ao que frameworks de desenvolvimento Web em Python fazem.
Já conseguindo receber o login/senha do usuário, era preciso autenticá-lo no sistema. Para isto, escolhi ligar a aplicação ao PAM. Além de ser de fácil uso, o PAM trata questões como: tempo entre sucessivas tentativas de login; log das tentativas; ser transparente quanto ao mecanismo de usuários/senhas; etc…

Ok! Já é possível autenticar o usuário, agora a parte difícil: como fazer com que o sistema ganhe permissões do usuário para executar determinadas ações? Como o mod_python é configurado, o usuário em execução é o mesmo do Apache. Para que o sistema possa realizar uma ação em nome do usuário, foi preciso codificar um programa (em C) para que a aplicação Web ganhe privilégios do usuário para realizar a alteração do redirecionamento de emails.

Pra quem nunca codificou em C: codificar em C é um pouquinho trabalhoso no começo, mas depois que você pega o jeito, tudo anda. Codificar um programa SEGURO em C… Sim, isto dá mais trabalho… Mas graças a simplicidade do programa envolvido (e ao GDB..), foi possível ter algo seguro e simples. :)

Para quem quiser baixar a ferramenta (e sugerir correções, idéias, etc…):
svn checkout http://guardians.googlecode.com/svn/trunk/ guardians-read-only (módulo webapps)
Ou ainda, pode acessar o código-fonte na web!

É isso! :)

Aula dos Feras (2009.1)

Mais uma aula dos feras :) Dessa vez, duas turmas (14:00 ~ 16:00 e 16:00 ~ 18:00). Pela primeira vez o departamento não ofereceu um lanche pros Guardians, mas… o grupo sobreviverá.

Fiquei só responsável pelas fotos, mas estão de parabéns todos os Guardians que contribuiram para a aula. Teve uma leve correria no grupo para a criação de contas, especialmente por causa do novo modelo de autenticação (LDAP), mas deu tudo certo.

Aplicação - Screenshots

Ontem terminei de conectar todos os botões da interface, ligando assim o componente de interface com a lógica de negócio da aplicação. Ou seja: está funcional, falta apenas tratar alguns erros e inconsistências. Já sei de algumas falhas:

  • Ao enviar o email, não há sinalização de que o email foi enviado com sucesso;
  • Se, ao listar os arquivos, houver uma falha, a aplicação falha;
  • O QFileDialog aberto ao mover/compactar arquivo não abre no diretório selecionado;
  • O QTreeView ao ter o model atualizado perde referência do que estava aberto;
  • O QTreeView não ordena por nome, apenas por tamanho;
  • A página exibida no FAQ não está própria para o widget.

Bem, segue uns screenshots da ferramenta :)

Ferramenta 1

No primeira screenshot está a cara geral da aplicação. São apresentadas 3 opções:

  • Editor de disco: Para verificar quota, apagar, mover e compactar arquivos;
  • Mensagem: Para enviar uma mensagem aos guardians;
  • FAQ: Exibe a página com o FAQ dos guardians.

Ferramenta 2

Na janela de edição de disco, os botões acima são gerados a partir da verificação de quota no servidor (na figura, meu server não estava ativado). Os servidores e discos a serem consultados estão num arquivo (gat.conf) no diretório da aplicação. Exemplo de arquivo:

[quotas]
disk1 = localhost:/tmp/:/home/matheusgr/videos
disk2 = localhost:/home:/home/matheusgr/tmp
disk3 = localhost:/var/mail:/var/mail

Onde cada linha representa um disco, e cada campo (separado por ‘:’) representa servidor:disco_do_servidor:mapeamento_local.
A próxima figura é do envio de mensagem:

Ferramenta 3

E por fim, a exibição do FAQ:
Ferramenta 4

Quem quiser conhecer o código da ferramenta:

svn checkout http://guardians.googlecode.com/svn/trunk/ guardians-read-only

E não precisa ser Guardian para ajudar a desenvolver! :) Basta entrar em contato que podemos planejar algo… Há várias idéias de ferramentas que podem ser úteis na administração de sistemas, trabalhando com diversas tecnologias. Só lembrando: é preciso ter iniciativa. Apesar de coordenar as atividades, não vou estar ensinando, apenas ajudando. :P

Espero em breve ter a versão 1.0 :)

Previous Entries