Guia do Linux/Avançado/Servidor ident/Introdução
Introdução
[editar | editar código-fonte]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.
Versão
[editar | editar código-fonte]É 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.
Contribuindo
[editar | editar código-fonte]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.
Instalação
[editar | editar código-fonte]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 daemonoidentd
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
ehosts.deny
dotcpd
. - -h - Mostra as opções de linha de comando do
oidentd
.
Exemplos
[editar | editar código-fonte]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