Saltar para o conteúdo

Guia do Linux/Avançado/Servidor ident/Introdução

Origem: Wikilivros, livros abertos por um mundo aberto.

O ident (identidade) é um servidor que permite identificar qual o usuário efetuou determinada conexão e o sistema operacional usado. Ele opera na porta 113 por padrão e retorna nomes de usuários localmente válidos, e é consultado por serviços conhecidos como IRC, alguns servidores ftp, smtp e outros. Outro benefício é a utilização de mecanismos de restrições de acesso baseadas em usuários/endereçoIP (o tcpd é um exemplo de serviço que permite esta característica). A sintaxe usada para fazer tal restrição é universal: usuário@endereçoIP onde normalmente aparece o endereçoIP que é usado para bloquear/permitir o acesso.

No momento da conexão, o endereço IP é checado pra ver se confere, e o servidor Ident da máquina que está efetuando a conexão é consultado para checar se o usuário que tem acesso é o mesmo especificado no controle de acesso. Isso aumenta um pouco a segurança do sistema, mas existem algumas implicações e pontos frágeis do identd que serão explicados no decorrer deste capítulo.


É assumido que esteja usando a versão 1.7 do oidentd. As explicações contidas aqui podem funcionar para versões posteriores, mas é recomendável que leia a documentação sobre modificações no programa (changelog) em busca de mudanças que alterem o sentido das explicações fornecidas aqui.


A Home page do projeto oidentd é http://ojnk.sourceforge.net Sugestões, críticas, comentários, etc., podem ser enviados para odin@numb.org.


Características

[editar | editar código-fonte]

Características do oidentd:

  • Pode ser executado tanto como daemon quanto via inetd (este último é indicado para sistemas com pouca memória onde o serviço é pouco solicitado).
  • Pode mapear identificações de usuário via IP Masquerading, tornando este servidor muito versátil podendo ser usado tanto em máquina individuais como em servidores proxy/roteadores.
  • Pode fazer forwarding de conexões para outras máquinas da rede local, quando não é executado no proxy/roteador.
  • Spoofing de nomes: é possível mapear um nome de usuário para outra identificação; por exemplo, o usuário root poderá ser mapeado para outra conta de usuário antes da identificação ser enviada.

Ficha técnica

[editar | editar código-fonte]

Pacote: oidentd

Utilitários:

  • oidentd - Servidor identd

Arquivos de configuração do oidentd:

identd.spoof
Controla o spoof (falsificação) de nomes de usuários. O formato deste arquivo são dois campos separados por ":", o primeiro contendo a identificação original do usuário e o segundo o nome que será enviado pelo identd. O segundo campo pode ser omitido, neste caso a resposta de identificação é lida através do arquivo ~/.ispoof.

Este arquivo deve ter como dono o usuário do primeiro campo do identd.spoof e a identificação retornada será a contida no arquivo. Esteja certo que o daemon oidentd tem permissões para acessar este arquivo, caso contrário nenhum spoof de identidade será realizado. Para o spoof ser habilitado, o serviço oidentd deverá ser iniciado com a opção -s ou -S (veja mais detalhes [#s-s-ident-opcoescmd Opções de linha de comando, Seção 13.1.11]). OBS: Certifique-se de colocar as permissões adequadas para que somente o daemon oidentd tenha acesso a este arquivo (de acordo com o usuário e grupo usado para executar o oidentd), os detalhes de mapeamento de nomes podem ser perigosos em mãos erradas, e garantir o sucesso de uma conexão indesejável.

oidentd.users
Mapeamento de nomes de usuários efetuando conexões via Masquerading. O formato deste arquivo é o seguinte:
     #EndereçoIP/máscara            Usuário    Sistema
     192.168.1.1                    john        WINDOWS
     192.168.1.2                    usuario1    WINDOWS
     192.168.1.1/32                 usuario2    UNIX
     192.168.1.0/24                 usuario3    UNIX
     192.168.1.0/16                 usuario4    UNIX

As conexões vindas dos endereços da primeira coluna são mapeados para o nome/sistema da segunda/terceira coluna e enviados a máquina que requisitou a identificação. Para o suporta a mapeamento de usuários via Masquerading funcionar, o daemon oidentd deverá ser iniciado com a opção -m.


Requerimentos de Hardware

[editar | editar código-fonte]

O oidentd requer pouca memória e pode ser executado sem problemas em um sistema com o mínimo de memória necessária para rodar o kernel do Linux (2 MB para 2.2 e 4MB para as séries 2.4 do kernel). Mesmo assim é interessante considerar 1 MB a mais que o mínimo requerido pelo kernel para uma folga na execução do serviço de identificação junto a outros do sistema.


Arquivos de log criados pelo Ident

[editar | editar código-fonte]

Mensagens informativas, erros, e outras sobre execuções do serviço oidentd são enviadas ao syslog do sistema.


Para instalar o daemon do oidentd digite:


     apt-get install oidentd

Por padrão o serviço é instalado para ser executado como daemon, para executa-lo através do inetd siga os passos em [#s-s-ident-install-inetd Instalação via Inetd, Seção 13.1.8]. O serviço será executado sob o usuário nobody e grupo nogroup por motivos de segurança, alterações de nome/grupo que executará o oidentd podem ser feitas no arquivo /etc/defaults/oidentd ou /etc/init.d/oidentd.


Instalação via Inetd

[editar | editar código-fonte]

Siga os procedimentos de instalação em [#s-s-ident-install Instalação, Seção 13.1.7] e os seguintes passos:

  • Edite o arquivo /etc/inetd.conf e adicione a seguinte linha:
     #:INFO: Info services
     auth		stream	tcp	nowait.40	nobody.nogroup	/usr/sbin/oidentd oidentd -q -i -t 40

A opção -i permite o oidentd aceitar requisições via inetd (sem ela ele será executado no modo daemon). As opções -s e -m devem também ser especificadas caso desejar os recursos de falsificação de identificação (mapeamento de nomes) e masquerading (veja [#s-s-ident-opcoescmd Opções de linha de comando, Seção 13.1.11]). Aqui foi definido um parâmetro máximo de 40 requisições por minuto (típico de um serviço poucos usado no sistema), caso este limite seja ultrapassado o serviço será desativado na seção atual do inetd). Os outros campos são descritos em [ch-rede.html#s-rede-servicos-inetd-c /etc/inetd.conf, Seção 4.7.2.1].

  • Interrompa a execução do daemon do oidentd atual dando um ./etc/init.d/oidentd stop.
  • Remova os links dos runlevels em /etc/rc?.d que iniciam/interrompem a execução do daemon com o comando: update-rc.d -f oidentd remove. Neste ponto o daemon oidentd não será mais iniciado. Para reverter esta ação, execute o comando: udpate-rc.d oidentd defaults.
  • De um comando killall -HUP inetd para fazer o serviço inetd recarregar o arquivo de configuração /etc/inetd.conf. O serviço de identd já estará funcionando.

OBS: A configuração da distribuição Debian permite detectar quando o serviço ident (auth) está sendo executado no /etc/inetd.conf através de seus scripts de inicialização. Você poderá fazer as coisas manualmente baseado nisso se desejar.


Usando tcpwrappers com oidentd

[editar | editar código-fonte]

Especifique a opção -W para fazer o oidentd utilizar o mecanismo de acesso em hosts.allow e hosts.deny para garantir/bloquear ao serviço de acordo com endereços/hosts especificados. OBS O oidentd é somente executado após a conferência de todos os parâmetros de endereços nestes arquivos de acesso, não utilize a sintaxe "usuário@endereço" como endereço na linha de acesso do serviço oidentd (por motivos óbvios).


Iniciando o servidor/reiniciando/recarregando a configuração

[editar | editar código-fonte]

O arquivo que controla o funcionamento do daemon do oidentd é controlado pelo arquivo /etc/init.d/oidentd. A execução do oidentd através de inetd é automática quando é feita uma requisição para a porta 113.


Opções de linha de comando

[editar | editar código-fonte]

Opções de linha de comando do oidentd:

    • -a [endereçoIP] - Espera por requisições somente no nome ou endereço IP da interface especificada.
    • -A Quando o spoofing esta ativado, permite os usuários falsificaram o ident em conexões para portas privilegiadas.
    • -c [páginacodigo] - Especifica uma página de código alternativa. O padrão é "US-ASCII".
    • -d - Ativa o modo de depuração, mais detalhes serão exibidos.
    • -e - Retorna "UNKNOWN-ERROR" (erro desconhecido) para qualquer tipo de erro.
    • -f [porta] - Redireciona requisições de máquinas usando MASQUERADE para o computador na porta especificada.
    • -F - O mesmo que -f, mas usa a porta 113 como padrão.
    • -g [gid] - Executa o daemon do oidentd no grupo especificado.
    • -i - Permite ser executado através do inetd.
    • -m - Ativa o suporta a IP Masquerading.
    • -n - Retorna números UID ao invés de nomes de usuários.
    • -N - Permite ocultar a identificação de determinados usuários através de arquivos ~/.noident.
    • -o - Retorna "OTHER" (outro qualquer) ao invés do sistema operacional especificado.
    • -p [porta] - Espera por conexões na porta especificadas (a padrão é a 113 - serviço auth).
    • -q - Oculta o logging normal.
    • -P [proxy] - O proxy especificado (endereço IP) faz redirecionamento de conexões para a máquina executando o oidentd.
    • -r - Retorna respostas aleatórias de identd. As opções -n e -r não podem ser usadas juntas.
    • -s - Permite utilizar os mecanismos de spoofing (falsificação) do oidentd.
    • -S - O mesmo que -s mas permitem todos os usuários EXCETO os especificados em /etc/identd.spoof falsificarem suas respostas.
    • -t [segundos] - Espera o tempo especificado antes de ser encerrado.
    • -T [segundos] - O oidentd permanecerá aceitando conexões quando é executado com a opção -w pelo número de segundos especificado.
    • -u [uid] - Executa o servidor oidentd com a uid especificada.
    • -v/-V - Mostra detalhes sobre a versão do servidor.
    • -w - Modo de espera de conexões.
    • -x [texto] - Se uma requisição falha, o texto especificado é retornado.
    • -W - Utiliza os mecanismos de acesso hosts.allow e hosts.deny do tcpd.
    • -h - Mostra as opções de linha de comando do oidentd.

Não faz muito sentido exemplos de arquivo de configuração do oidentd por estes serem muito simples e estarem bem explicados em [#s-s-ident-ficha Ficha técnica, Seção 13.1.4]. No entanto acho interessante mostrar alguns exemplos de configurações do hosts.allow e hosts.deny fazendo uso dos recursos de restrições baseadas em usuário@endereço :

     # Arquivo hosts.allow
     #
     # Permite requisições talk de qualquer lugar
     in.ntalkd: ALL
     in.talkd: ALL
     #
     # Permite que o usuário john acesse os serviços de ftp de qualquer máquina da
     # rede 191.168.1.*
     in.ftpd: john@192.168.1.
     #
     # O serviço telnet está permitido somente para john conectando de 192.168.1.1
     in.telnetd: john@192.168.1.1
     # Todos podem acessar os serviços samba (nomes e compartilhamentos) exceto
     # o usuário evil conectando de qualquer host com o endereço cracker.com.*
     smbd, nmbd: ALL EXCEPT evil@cracker.com.


     # Arquivo hosts.deny
     # Qualquer finger é bloqueado exceto vindos do usuário admin feitos em qualquer
     # máquina da rede 192.168.1.*
     in.fingerd: ALL EXCEPT admin@192.168.1.
     # Qualquer outra coisa é bloqueada
     ALL: ALL