<chapt id="s-ident">Servidor ident
 <p>
Este capítulo documenta o uso, benefícios, configuração, utilização e 
exemplos do servidor identd. Também são explicados alguns pontos 
positivos/negativos de sua utilização para aumentar a segurança 
quando usado junto com o mecanismo de controle de acesso. 
 <p>
O servidor identd escolhido para ser descrito nesta seção do guia foi o 
<prgn>oidentd</prgn>. 


<sect id="s-ident-intro">Introdução
 <p>
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 <tt>113</tt> 
por padrão e retorna nomes de usuários localmente válidos, e é consultado por 
serviços conhecidos como <tt>IRC</tt>, alguns servidores <tt>ftp</tt>, 
<tt>smtp</tt> e outros. Outro benefício é a utilização de mecanismos 
de restrições de acesso baseadas em usuários/endereçoIP (o <prgn>tcpd</prgn> é 
um exemplo de serviço que permite esta característica). A sintaxe usada para fazer 
tal restrição é universal: <em>usuário@endereçoIP</em> onde normalmente 
aparece o <em>endereçoIP</em> que é usado para bloquear/permitir o acesso. 
 <p>
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 <prgn>identd</prgn> que serão explicados no decorrer deste capítulo. 


<sect1 id="s-ident-versao">Versão
 <p>
É assumido que esteja usando a versão 1.7 do <prgn>oidentd</prgn>. 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.  


<sect1 id="s-ident-contribuindo">Contribuindo
 <p>
A Home page do projeto <prgn>oidentd</prgn> é <file>http://ojnk.sourceforge.net</file>
Sugestões, críticas, comentários, etc., podem ser enviados para 
<email>odin@numb.org</email>. 


<sect1 id="s-ident-caracteristicas">Características
 <p>
Características do <prgn>oidentd</prgn>: 
<list compact>
 <item>
Pode ser executado tanto como <em>daemon</em> quanto via <em>inetd</em> (este 
último é indicado para sistemas com pouca memória onde o serviço é pouco solicitado). 
 
 <item>
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. 

 <item>
Pode fazer forwarding de conexões para outras máquinas da rede local, quando 
não é executado no proxy/roteador. 

 <item>
Spoofing de nomes: é possível mapear um nome de usuário para outra 
identificação; por exemplo, o usuário <tt>root</tt> poderá ser mapeado 
para outra conta de usuário antes da identificação ser enviada. 

</list>


<sect1 id="s-ident-ficha">Ficha técnica
 <p>
Pacote: <package>oidentd</package>
 <p>
Utilitários:
<list compact>
 <item><tt>oidentd</tt> - Servidor identd
</list>

Arquivos de configuração do <prgn>oidentd</prgn>: 
<taglist compact>
 <tag>identd.spoof</tag>
 <item>
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 <prgn>identd</prgn>. O 
segundo campo pode ser omitido, neste caso a resposta de identificação é 
lida através do arquivo <file>~/.ispoof</file>. 
 <p>
Este arquivo deve ter como dono o usuário do primeiro campo do 
<file>identd.spoof</file> e a identificação retornada será a contida no arquivo. 
Esteja certo que o daemon <prgn>oidentd</prgn> tem permissões para acessar este 
arquivo, caso contrário nenhum spoof de identidade será realizado. 
 <p>
Para o spoof ser habilitado, o serviço <prgn>oidentd</prgn> deverá ser iniciado 
com a opção <em>-s</em> ou <em>-S</em> (veja mais detalhes 
<ref id="s-ident-opcoescmd">). 
<![ %OBS [
 <p>
<strong>OBS:</strong> Certifique-se de colocar as permissões adequadas para que 
somente o daemon <em>oidentd</em> tenha acesso a este arquivo (de acordo com 
o <em>usuário</em> e <em>grupo</em> usado para executar o <prgn>oidentd</prgn>), os 
detalhes de mapeamento de nomes podem ser perigosos em mãos erradas, e garantir 
o sucesso de uma conexão indesejável. ]]> 

 <tag>oidentd.users</tag>
 <item>
Mapeamento de nomes de usuários efetuando conexões via Masquerading. O formato 
deste arquivo é o seguinte:
<example>
#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

</example>
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 
<prgn>oidentd</prgn> deverá ser iniciado com a opção <em>-m</em>.

</taglist>


<sect1 id="s-ident-hwreq">Requerimentos de Hardware
 <p>
O <prgn>oidentd</prgn> 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 <prgn>Linux</prgn> (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. 


<sect1 id="s-ident-logs">Arquivos de log criados pelo Ident
 <p>
Mensagens informativas, erros, e outras sobre execuções do serviço 
<prgn>oidentd</prgn> são enviadas ao <prgn>syslog</prgn> do sistema. 


<sect1 id="s-ident-install">Instalação
 <p>
Para instalar o daemon do <prgn>oidentd</prgn> digite:
<example>
apt-get install oidentd

</example>
Por padrão o serviço é instalado para ser executado como daemon, para executa-lo 
através do <prgn>inetd</prgn> siga os passos em <ref id="s-ident-install-inetd">. 
O serviço será executado sob o usuário <tt>nobody</tt> e grupo <tt>nogroup</tt> 
por motivos de segurança, alterações de nome/grupo que executará o 
<prgn>oidentd</prgn> podem ser feitas no arquivo 
<file>/etc/defaults/oidentd</file> ou <file>/etc/init.d/oidentd</file>.


<sect1 id="s-ident-install-inetd">Instalação via Inetd
 <p>
Siga os procedimentos de instalação em <ref id="s-ident-install"> e 
os seguintes passos: 
<enumlist compact>
 <item>
Edite o arquivo <file>/etc/inetd.conf</file> e adicione a seguinte linha:
<example>
#:INFO: Info services
auth		stream	tcp	nowait.40	nobody.nogroup	/usr/sbin/oidentd oidentd -q -i -t 40

</example> 
A opção <em>-i</em> permite o <prgn>oidentd</prgn> aceitar requisições via 
<prgn>inetd</prgn> (sem ela ele será executado no modo daemon). As opções 
<em>-s</em> e <em>-m</em> devem também ser especificadas caso desejar os 
recursos de falsificação de identificação (mapeamento de nomes) e masquerading
(veja <ref id="s-ident-opcoescmd">). 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 
<prgn>inetd</prgn>). <![ %CAPJUNTOS [ Os outros campos são descritos em 
<ref id="rede-servicos-inetd-c">. ]]>

 <item>
Interrompa a execução do daemon do <prgn>oidentd</prgn> atual dando um 
<tt>./etc/init.d/oidentd stop</tt>. 

 <item>
Remova os links dos runlevels em <file>/etc/rc?.d</file> que iniciam/interrompem 
a execução do daemon com o comando: <tt>update-rc.d -f oidentd remove</tt>. 
Neste ponto o daemon <prgn>oidentd</prgn> não será mais iniciado. Para reverter 
esta ação, execute o comando: <tt>udpate-rc.d oidentd defaults</tt>. 
 <item>
De um comando <tt>killall -HUP inetd</tt> para fazer o serviço <prgn>inetd</prgn> 
recarregar o arquivo de configuração <file>/etc/inetd.conf</file>. O serviço 
de identd já estará funcionando. 
</enumlist>
<![ %OBS [
 <p>
<strong>OBS:</strong> A configuração da distribuição <prgn>Debian</prgn> 
permite detectar quando o serviço ident (auth) está sendo executado no 
<file>/etc/inetd.conf</file> através de seus scripts de inicialização. 
Você poderá fazer as coisas manualmente baseado nisso se desejar. ]]>


<sect1 id="s-ident-tcpwrappers">Usando tcpwrappers com oidentd
 <p>
Especifique a opção <em>-W</em> para fazer o <prgn>oidentd</prgn> 
utilizar o mecanismo de acesso em <file>hosts.allow</file> e 
<file>hosts.deny</file> para garantir/bloquear ao serviço de acordo 
com endereços/hosts especificados. 
<![ %OBS [
 <p>
<strong>OBS</strong> O <prgn>oidentd</prgn> é 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 <prgn>oidentd</prgn> 
(por motivos óbvios). ]]>


<sect1 id="s-ident-rodando">Iniciando o servidor/reiniciando/recarregando a 
configuração
 <p>
O arquivo que controla o funcionamento do daemon do <prgn>oidentd</prgn> é 
controlado pelo arquivo <file>/etc/init.d/oidentd</file>. 
 <p>
A execução do <prgn>oidentd</prgn> através de <prgn>inetd</prgn> é 
automática quando é feita uma requisição para a porta <em>113</em>. 


<sect1 id="s-ident-opcoescmd">Opções de linha de comando
 <p>
Opções de linha de comando do <prgn>oidentd</prgn>:
<list compact>
 <item>
<tt>-a [endereçoIP]</tt> - Espera por requisições somente no nome ou endereço IP 
da interface especificada. 

 <item>
<tt>-A</tt> Quando o spoofing esta ativado, permite os usuários falsificaram 
o ident em conexões para portas privilegiadas. 

 <item>
<tt>-c [páginacodigo]</tt> - Especifica uma página de código alternativa. 
O padrão é "US-ASCII".

 <item>
<tt>-d</tt> - Ativa o modo de depuração, mais detalhes serão exibidos.

 <item>
<tt>-e</tt> - Retorna "UNKNOWN-ERROR" (erro desconhecido) para qualquer tipo de 
erro.

 <item>
<tt>-f [porta]</tt> - Redireciona requisições de máquinas usando 
MASQUERADE para o computador na porta especificada. 

 <item>
<tt>-F</tt> - O mesmo que <em>-f</em>, mas usa a porta 113 como padrão. 

 <item>
<tt>-g [gid]</tt> - Executa o daemon do <prgn>oidentd</prgn> no grupo especificado. 

 <item>
<tt>-i</tt> - Permite ser executado através do <prgn>inetd</prgn>.

 <item>
<tt>-m</tt> - Ativa o suporta a IP Masquerading. 

 <item>
<tt>-n</tt> - Retorna números UID ao invés de nomes de usuários. 

 <item>
<tt>-N</tt> - Permite ocultar a identificação de determinados usuários através 
de arquivos <file>~/.noident</file>. 

 <item>
<tt>-o</tt> - Retorna "OTHER" (outro qualquer) ao invés do sistema operacional 
especificado. 

 <item>
<tt>-p [porta]</tt> - Espera por conexões na porta especificadas (a padrão é 
a 113 - serviço auth). 

 <item>
<tt>-q</tt> - Oculta o logging normal. 

 <item>
<tt>-P [proxy]</tt> - O proxy especificado (endereço IP) faz redirecionamento 
de conexões para a máquina executando o <prgn>oidentd</prgn>. 

 <item>
<tt>-r</tt> - Retorna respostas aleatórias de identd. As opções 
<em>-n</em> e <em>-r</em> não podem ser usadas juntas. 

 <item>
<tt>-s</tt> - Permite utilizar os mecanismos de spoofing (falsificação) do 
<prgn>oidentd</prgn>. 

 <item>
<tt>-S</tt> - O mesmo que <em>-s</em> mas permitem todos os usuários EXCETO os 
especificados em <file>/etc/identd.spoof</file> falsificarem suas respostas. 

 <item>
<tt>-t [segundos]</tt> - Espera o tempo especificado antes de ser encerrado. 

 <item>
<tt>-T [segundos]</tt> - O <prgn>oidentd</prgn> permanecerá aceitando 
conexões quando é executado com a opção <em>-w</em> pelo número de segundos 
especificado. 

 <item>
<tt>-u [uid]</tt> - Executa o servidor <prgn>oidentd</prgn> com a uid 
especificada. 

 <item>
<tt>-v/-V</tt> - Mostra detalhes sobre a versão do servidor. 

 <item>
<tt>-w</tt> - Modo de espera de conexões.

 <item>
<tt>-x [texto]</tt> - Se uma requisição falha, o texto especificado é retornado. 

 <item>
<tt>-W</tt> - Utiliza os mecanismos de acesso <file>hosts.allow</file> e 
<file>hosts.deny</file> do <prgn>tcpd</prgn>.

 <item>
<tt>-h</tt> - Mostra as opções de linha de comando do <prgn>oidentd</prgn>. 

</list>


<sect1 id="s-ident-exemplo">Exemplos
 <p>
Não faz muito sentido exemplos de arquivo de configuração do <prgn>oidentd</prgn> 
por estes serem muito simples e estarem bem explicados em <ref id="s-ident-ficha">.
No entanto acho interessante mostrar alguns exemplos de configurações do 
<file>hosts.allow</file> e <file>hosts.deny</file> fazendo uso dos recursos 
de restrições baseadas em usuário@endereço : 
<example>
# 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

</example>

 
