Mostrando postagens com marcador linux. Mostrar todas as postagens
Mostrando postagens com marcador linux. Mostrar todas as postagens

quinta-feira, 13 de novembro de 2014

Instalação e autenticação do LDAP no Ubuntu 12.04

Este tutorial busca explicar como configurar um servidor para autenticar seus clientes de maneira simples através do LDAP, um dos protocolos mais utilizados do gênero.

Introdução

LDAP (Lightweight Directory Access Protocol)  é um protocolo que permite realizar a autenticação de usuários em um único e simples servidor centralizado. Desenvolvido em 1993 na Universidade do Michigan, foi um "upgrade" do protocolo DAP, que era mais específico. Por ser mais rápido e leve que o protocolo DAP, recebeu o nome de Lightweight Directory Acess Protocol.

O protocolo LDAP está actualmente na versão 3 e foi normalizado pelo IETF (Internet Engineering Task Force). Assim, existe um RFC para cada versão de LDAP, constituindo um documento de referência :
O LDAP armazena suas informações de maneira hierárquica e não relacional, ou seja, em sistemas de diretórios não temos tabelas de dados como temos em bancos relacionais (como MySQL, Oracle, SQL Server...). No lugar de tabelas, os dados são organizados em uma DIT (Directory Information Tree - Árvore de Informação do Diretório). Esta árvore é composta de vértices, e estes vértices contém um registro. O registro é a informação que estamos armazenando na árvore. A figura abaixo mostra um exemplo de como uma árvore do LDAP é esquematizada (clique na imagem para ampliar).
Exemplo de uma árvore de registros do LDAP

Como dito anteriormente, o LDAP possui uma estrutura hierárquica. O usuário é um dos registros mais internos, sendo identificado pelo cn (common name). Como um cn identifica registros de um diretório, não podemos criar registros com mesmo cn em um diretório. Porém, registros podem ter mesmo cn caso estejam em diretórios diferentes. No exemplo da imagem acima, poderíamos ter um registro em ou=users com cn=admin, mesmo já tendo outro cn=admin no diretório ou=admin.

Usuários geralmente fazem parte de uma Organizational Unit (ou). A ou divide grupos de usuários em relação a permissões de acesso, como ocorre no exemplo da imagem acima. Neste exemplo, há uma ou para usuários comuns e outra para administradores. O Administrador da base de dados LDAP pode oferecer permissões administrativas para usuários que estejam na ou admin.

A organização é identificada pelo dc (domain component). O dc é o domínio da organização que contém a base de dados do LDAP. Em configurações simples, como a que iremos fazer, é o nome de domínio do servidor onde vamos instalar os pacotes do LDAP Server. Um dc é a raiz da árvore do LDAP, sendo que um dc pode conter outros dc's, numa estrutura semelhante ao DNS. Em nosso exemplo, nosso domínio possui o nome "domain.com". Então, há um dc domain, que está contido em outro dc  de nível maior, chamado com. Caso houvesse um domínio "exemplo.com", o dc domínio também estaria contido dentro do dc com, e o domínio exemplo poderia ser configurado de maneira diferente do domain, com outras ou e outros usuários.

Configuração

Vamos ao que interessa! Iremos dividir a configuração em duas partes. A configuração do servidor e a autenticação dos clientes.

Configuração do Servidor


  1. Instale os pacotes necessários:
     sudo apt-get install slapd ldap-utils 
    1. Quando solicitar a senha de administrador, insira a sua senha de administrador.

  2. Quando a instalação for concluída, reconfigure o pacote slapd:  
     sudo dpkg-reconfigure slapd  
  3. Você deverá informar algumas opções:
    1. Em omitir LDAPserver Configuration, escolha NO.

    2. Em DNS Domain Name, você deve colocar o domínio de seu servidor. Caso em seu terminal apareça user@domain, você deve colocar a palavra domain nesta opção. Caso seja user@domain.com, insira domain.com

    3. Em Organization Name, você deve inserir o nome de sua organização ou trabalho. Por exemplo, insira o nome “Meu servidor LDAP”

    4. em Administrator Password, insira a sua senha, a mesma da etapa anterior.
    5. Em Database Backend, escolha HDB

    6. Em Remover a base de dados quando o comando purge for utilizado, fica a seu critério. Por padrão, insira NO.

    7. Em Move Old Database, YES.

    8. Em permitir protocolo LDAPv2, escolha NO.
  1. Instale o phpldapadmin, um servidor web que provê uma interface gráfica, facilitando a utilização do LDAP:  
     sudo apt-get install phpldapadmin  
  2. Para a configuração do phpldapadmin siga os passos:

    1. Abra o arquivo de configuração: 
       sudo vi /etc/phpldapadmin/config.php  
    2. mude a linha que contém
       $servers->setValue('server','host','');   
      Para o nome de seu domínio( no caso anterior, domain) ou seu IP fixo. Exemplo: 
        $servers->setValue('server','host','domain')  
      Ou, caso seu domíno seja domain.com:
        $servers->setValue('server','host','domain.com')  
    3. mude a linha
        $servers->setValue('server','base',array(dc=example, dc=test, dc=com'));   
      mudando os ‘dcs’ para o nome de seu domínio. Caso tenha ponto (ex: domain.com), serão dcs separados. 
      Exemplos: Caso o domínio seja único(domain):
       $servers->setValue('server','base',array(‘dc=domain'));   
      
    Caso tenha pontos (domain.com):
  $servers->setValue('server','base',array(‘dc=domain, dc=com'));  
    1. mude a linha 
       $servers->setValue('login','bind_id','cn=admin,dc=example, dc=test, dc=com');   
      
      para o nome de seu domínio, assim como no exemplo anterior. Caso o domínio seja único(domain):
       $servers->setValue('login','bind_id','cn=admin,dc=domain');   
      
    Caso tenha pontos (domain.com):
       $servers->setValue('login','bind_id','cn=admin,dc=domain, dc=com');   
      
    1. Abra o arquivo de configuração da conta dos usuários. Você irá mudar o login shell, onde o phpldapadmin não oferece a opção ‘/bin/bash’. Esta opção faz com que um cliente tenha mais funcionalidades pois o bash é o shell padrão do usuário Linux. No terminal, digite:
       sudo vi /etc/phpldapadmin/templates/creation/posixAccount.xml  
      

    2. Adicione mais um valor após a linha <type>select</type>, com valor
       <value id=”/bin/bash”>/bin/bash</value>  
      
        
  1. Agora já é possível acessar a interface Web! Logue na interface Web no seu browser, ou pelo endereço localhost/phpldapadmin ou SEU_IP/phpldapadmin. Para a autenticação, coloque a senha e verifique se consegue entrar na interface Web. Se não conseguir, verifique sua senha ou seu IP. Caso seu IP esteja diferente no informado pela configuração, a base de dados do LDAP não autenticará a conexão. Caso tenha ocorrido tudo certo, a tela será parecida com a imagem abaixo.



  2. Crie uma Organizational Unit (OU). Após logar, clique em “Create new entry here”. A imagem abaixo mostra um exemplo



    e escolha a opção “Generic: Organizational Unit”. 
    Coloque o nome groups e dê commit;
  3. Após criar a OU groups, clique nela e clique em “Create a child entry”, assim como na imagem abaixo. 



    Após aparecer a tela, ponha o nome admin e salve. Repita o processo, crie outro grupo e ponha o nome dele de users.
  4. Clique no grupo users, e crie um usuário, como na imagem abaixo:




    1. Clique em “Create a child entry” e escolha a opção “Generic: User Account”



    2. Em GID Number, escolha a opção "users"
    3. Em login Shell, escolha a opção “/bin/bash”
      As configurações devem estar próximas a da imagem:


    4. Salve o objeto. Se o uid estiver com o número 1000, mude para um número maior, pois o cliente pode apontar para o usuário criado em vez do usuário comum do cliente. Para mudar,clique no usuário criado e mude o uid para 1002 por exemplo.
     O servidor está pronto!

Configuração do Cliente
  1. Instale os pacotes necessários:  
     sudo apt-get install libpam-ldap nscd  
    

  2. Você deverá inserir algumas respostas:
    1. Na pergunta sobre o servidor LDAP, coloque ldap://IP_DE_SEU_SERVIDOR_LDAP (vale lembrar que este IP é do servidor configurado anteriormente.
    2. No nome do identificador, coloque o nome identificador da sua base de dados LDAP. No exemplo anterior, era dc=domain ou dc=domain, dc=com.
    3. Versão do LDAP, escolha a 3
    4. Fazer o root local ser admin da base local: YES
    5. A base de dados requer login? NÃO
    6. Conta LDAP do root: o que identifica o admin na base de dados do LDAP. NO nosso exemplo, seria cn=admin, dc=domain ou cn=admin, dc=domain, dc=com
  3. Após terminar a configuração, altere o arquivo de configuração nsswitch.conf. Digite sudo vi /etc/nsswitch.conf e configure alumas linhas da seguinte forma:
  4.  passwd:     compat ldap  
     group:      compat ldap  
     shadow:     compat ldap  
    

  1. Depois disso, vá para a configuração do PAM. O PAM(Pluggable Authentication Modules)é um sistema que conectam aplicações que provêm autenticação com aplicações que exige autenticação.  Edite o arquivo: sudo nano /etc/pam.d/common-session. Insira uma linha abaixo de “session require” com o comando:
     session required  pam_mkhomedir.so skel=/etc/skel umask=0022  
  1. Por fim, reinicie o nscd do cliente.  
     sudo /etc/init.d/nscd restart  
    

  2. Pronto! O LDAP estará funcionando. Para testar, você pode logar em seu cliente com um usuário criado no servidor LDAP através do ssh, pelo comando 
     ssh usuarioLDAPCriado@IP_CLIENTE  
    

    Para sair, digite logout.

    Espero que tenham aprendido um pouco mais sobre o LDAP, e que tenham conseguido autenticar os usuários corretamente! :)

    Referências
    http://stackoverflow.com/questions/18756688/what-is-cn-ou-dc-in-ldap-search 
    http://www.vivaolinux.com.br/artigo/Entendendo-o-LDAP 
    http://pt.kioskea.net/contents/271-o-protocolo-ldap
    https://www.digitalocean.com/community/articles/how-to-authenticate-client-computers-using-ldap-on-an-ubuntu-12-04-vps 
    https://www.digitalocean.com/community/articles/how-to-install-and-configure-a-basic-ldap-server-on-an-ubuntu-12-04-vps

segunda-feira, 3 de novembro de 2014

Utilizando o xdotool para manipular arquivos.

O xdotool é uma ferramenta de instruções que permite aos programadores emularem o pressionamento de teclas do teclado e do mouse, além de manipular janelas. Esse post tem a intenção de dar uma introdução à utilização dessa ferramenta em um ambiente Linux. Para baixar a ferramenta basta executar o seguinte comando:
 sudo apt-get install xdotool  
A sintaxe dos comandos xdotool é simples e direta com a xdotool seguida de opções e argumentos.
Search:
O comando search procura por uma janela que foi informada nos argumentos e se ele for o único ou último comando da cadeia ele irá retornar o ID da janela. Esse comando pode buscar a janela através de 3 formas: pelo nome se for informada opção --name; pela classe da janela se for informada a opção --class; e pelo nome da classe se for informada a opção --classname. Para procurar uma janela através do seu nome, execute:
 xdotool search --name "nome_janela"  
Uma outra opção deste comando é a --sync, ela bloqueia o xdotool até que tenha ocorrido algum resultado. O comando a seguir procura por uma janela através do seu nome e espera até que a janela tenha sido encontrada.
 xdotool search --sync --name "nome_janela"  
Este comando pode ser usado para que o xdotool aguarde o tempo necessário até que a janela de um programa seja carregada.
Exec:
O comando exec executa um programa. O --sync é sua única opção.
 xdotool exec --sync gcalctool  
obs.: Esta opção não pode ser utilizada para abrir arquivos ou páginas web, para isso deve ser utilizada a ferramenta gnome-open.
Sleep:
O comando sleep faz o código esperar por um período específico que foi informado como argumento. Abaixo um exemplo de uma pausa de 1 segundo.
 xdotool sleep 1  
Type:
O comando type serve para simular uma digitação de texto, ele recebe como argumento o texto que será digitado. Uma das opções desse comando é o --delay na qual se deve informar o tempo em milissegundos que irá demorar entre a digitação de uma tecla e outra, determinando assim a velocidade que o texto será digitado. A seguir um exemplo que digita uma palavra com tempo de 215ms entre caracteres.
 xdotool type --delay 215 "texto"  
Key:
O comando key serve para simular o pressionamento de alguma tecla ou conjunto de teclas . Ele recebe como argumento a tecla que será pressionada. Por exemplo o atalho Ctrl+c pode ser simulado pelo comando a seguir.
 xdotool key "ctrl+c"  
Para entendermos na prática o funcionamento dos comandos do xdotool que foram explicados vamos supor que precisamos de um script que abra o libreoffice, procure pela janela, digite um texto, espere 1 segundo e salve esse arquivo em qualquer lugar com qualquer nome.
 #abrir o libreoffice  
 xdotool exec loffice --writer  
 #procurar pela janela  
 xdotool --sync --name "Sem título 1"   
 #sem título 1 é o nome da janela padrão que o libreoffice abre  
 #digita o texto  
 xdotool type --delay 215 "texto"  
 #espera 1 segundo  
 xdotool sleep 1  
 #salva o arquivo  
 xdotool key "ctrl+s"  
 #espera 1 segundo para garantir que a janela de salvamento irá abrir antes do próximo comando  
 xdotool sleep 1  
 #pressiona enter para confirmar e salvar o arquivo  
 xdotool key "KP_Enter"  

Referências:
http://www.ibm.com/developerworks/br/linux/library/x-xdotool/

sexta-feira, 31 de outubro de 2014

Enviar email contendo o IP da RaspberryPi automaticamente

Uma das formas de utilizar a RPi sem a necessidade de um monitor é acessá-la remotamente através de ssh ou até mesmo de um servidor VNC. Entretanto, quando o IP atribuído a RPi não é fixo, precisamos de alguma forma descobri-lo sem acessar a RPi diretamente. Um das saídas para este problema é apresentada a seguir e consiste em fazer a RPi enviar o seu IP por e-mail toda vez que o cabo Ethernet for conectado e um IP for atribuído.

Os passos apresentados abaixo foram testados em uma RPi modelo B rodando o sistema operacional Raspbian wheezy.

1. Primeiramente precisamos baixar o pacote ssmtp, ele é um cliente smtp utilizado para enviar mensagens para um servidor smtp.
 sudo apt-get install -y ssmtp   

2. Abrir o arquivo '/etc/ssmtp/ssmtp.conf', este é o arquivo de configuração do cliente smtp.
 sudo vim /etc/ssmtp/ssmtp.conf  

3. Editar o arquivo '/etc/ssmtp/ssmtp.conf' com as informações abaixo:
 ############################################################################  
 root=postmaster  
 # Como utilizamos o gmail, colocamos o servidor smtp dele.  
 mailhub=smtp.gmail.com:587  
 # nome do host(parte posterior ao @ do email)  
 hostname=gmail.com      
 # usuario(parte anterior ao @ do email)  
 AuthUser=jua_labs  
 # senha       
 AuthPass=juapw  
 # criptografia  
 UseSTARTTLS=YES  
 ############################################################################  

4. Criar arquivo '/etc/network/if-up.d/mailip'.
 sudo vim /etc/network/if-up.d/mailip  

5. Inserir as informações abaixo no arquivo '/etc/network/if-up.d/mailip'.
 ############################################################################  
 #!/bin/sh  
 # email destino  
 mailreciever=jua.labs@gmail.com   
 # salvamos a data  
 today=$(date)  
 # guardamos o IP na variavel my_ip  
 my_ip=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $1}'`  
 #o '\n\n' sinaliza que o que virá apos será o corpo do email   
 my_pi="Subject: RPi reiniciada!\n\n"  
 #mensagem a ser enviada  
 message="$my_pi reiniciada em: $today.\nIP atual = $my_ip"  
 #salvamos a mensagem em um txt  
 echo $message > message.txt  
 #enviamos o 'message.txt' por meio do programa 'ssmtp' ao jua.labs@gmail.com  
 ssmtp ${mailreciever} < message.txt  
 ############################################################################  

6. Reinicie a RPi e a reconecte a rede, toda vez que ela receber IP ela enviará para o email especificado na variável mailreciever do código do tópico 5.

Referências:

* https://wiki.debian.org/sSMTP
* https://googledrive.com/host/0B1nrvbH9mKucaWJuUFN6S2lyU1k/09-Email%20&%20FTP.pptx