[OpenBSD]

[Índice da FAQ] [Seção 7 - Controle do Teclado e da Tela] [Seção 9 - Migração para OpenBSD]

8 - Questões Gerais


Conteúdo


8.1 - Esqueci a senha do root, o que faço agora?

O processo básico para recuperar o root é inicializar em modo usuário único, montar as partições adequadas (/ e /usr), executar o passwd(1) para mudar a senha do root. Você pode então inicializar e iniciar sessão normalmente.

O processo detalhado:

Se essa é uma máquina pública, você deve provavelmente usar o sudo(8) para dar a múltiplas pessoas (de confiança) a possibilidade de executar comandos como root.

"Espera. Isso parece muito fácil! Isso não é muito seguro!" Se um atacante tem acesso físico ao seu sistema, ele vence, independente do SO no computador. Há algumas formas de forçar o uso de uma senha em modo usuário único (veja ttys(5)), ou eliminar a pausa em i386/amd64 (veja boot.conf), mas falando de maneira prática, transpor esses truques também é muito fácil (Um jeito: inicialize o sistema com um disquete ou CD-ROM, edite ou troque o arquivo de senhas). Você pode tentar prevenir isso, mas então alguém irá arrancar o disco rígido para fora do seu computador. Deixar nosso computador difícil de usar não é uma segurança real, e se você não tem uma máquina física em segurança, você não tem a segurança real.

Nota: muitos sistemas de "gerenciamento remoto" dão acesso à maioria das funcionalidades de um acesso físico ao computador, e isso precisa ser considerado. Não diga para você mesmo que o sistema é seguro se existe um modo para um atacante pegar o console, inserir um disquete virtual e forçar a reinicialização da máquina. Eles podem também ter acesso físico ao sistema. O sistema de gerenciamento de console normalmente não é tão seguro como o OpenBSD...

8.2 - O X não inicia, recebo muitas mensagens de erro

Uma causa comum para os problemas no X é a definição da variável do sysctl(8) machdep.allowaperture. Já que o padrão é ela estar desativada no OpenBSD, essa é uma causa bastante clara do problema.

Você precisa editar o arquivo /etc/sysctl.conf e definir o valor machdep.allowaperture=2 (ou 1, dependendo da sua plataforma). Isso permite que o X acesse o driver de abertura, xf86(4), na próxima reinicialização. Esse valor não pode ser mudado depois da inicialização. Esse valor também pode ser definido durante a instalação se você responder "Y" quando você for questionado se espera usar o sistema X Window.

O OpenBSD requer que o driver de abertura esteja ativado nas plataformas alpha, amd64, i386, macppc e sparc64 para controlar o acesso à placa de vídeo. Outras plataformas usam uma forma segura para controlar o sistema de vídeo, e não precisam disso (e não tem isso no kernel delas). Se você não vai usar o X no seu sistema, é recomendado que você não ative o driver de abertura.

Para mais informação a respeito da configuração e uso do X na sua plataforma, veja o arquivo /usr/X11R6/README no seu sistema instalado.

8.3 - Posso usar a linguagem de programação "L" no OpenBSD?

Você encontra o suporte para várias linguagens de programação comuns tanto no sistema base (mais especificamente nos pacotes de arquivos baseXX.tgz e compXX.tgz) quanto no sistema de pacotes e portes. É recomendado que você instale o pacote de arquivos requerido, ou um pacote que contém o compilador específico que você quer usar, em vez de compilá-lo a partir do código fonte. Para a maioria dos compiladores, a compilação a partir do código fonte requer muitos recursos do sistema e é frequentemente desnecessária, a menos que você tenha necessidades específicas ou não exista um pacote disponível.

A seguinte tabela tenta fornecer uma visão geral dos compiladores para diferentes linguagens, onde você pode encontrar, e se existem quaisquer problemas ou limitações. Algumas delas são limitadas a certas plataformas, isso pode ser visto examinando um resultado de pesquisa na árvore de portes, e notando o que é mencionado em "Archs", ou inspecionando diretamente o arquivo Makefile do porte. No último caso, olhe as linhas que contém ONLY_FOR_ARCHS, NOT_FOR_ARCHS, BROKEN, etc.

Nota: Para facilitar o uso, este artigo fornece uma lista alfabética sem distinção entre as diferentes categorias de linguagens de programação. Esta não é uma lista que engloba tudo o que está disponível ou pode ser usado no OpenBSD. Se você achar que existem imperfeições ou problemas que não são mencionados aqui, sinta-se livre para relatar o problema.

LinguagemOnde?Notas
Awk base48.tgz, awk(1)
lang/gawk awk do projeto GNU
C, C++ comp48.tgz, gcc(1) Os compiladores de C e C++ no sistema base foram auditados e possuem várias melhorias de segurança (por exemplo, ProPolice) ativadas por padrão. Veja gcc-local(1) para detalhes. Ele também emite avisos quando ocorre o uso de funções inseguras, tais como sprintf(), strcpy(), strcat(), tmpnam(), etc. Note que a maioria das plataformas usam o gcc 3.3.5, mas algumas ainda usam o 2.95.3.
C, C++ lang/gcc Esses compiladores não passaram por uma auditoria de segurança e não contêm melhorias de segurança como aqueles no sistema base. Os compiladores são renomeados para egcc, eg++, etc., para evitar a confusão com seus semelhantes no sistema base.
Caml lang/ocaml Objective Caml
COBOL lang/open-cobol
Erlang lang/erlang
Fortran comp48.tgz, g77(1) Somente o suporte para Fortran 77.
lang/gcc Fortran 95 também é suportado pelo egfortran no gcc 4.0 e posteriores. Esse novo compilador é fornecido como um subpacote (g95) do gcc.
Haskell lang/ghc
lang/nhc98
Java devel/jdk JDK da Sun - somente a versão 1.7 está disponível como pacote; para versões antigas, veja as instruções de compilação a seguir.
lang/classpath bibliotecas de classe base essenciais para Java
lang/kaffe
lang/jikes Compilador rápido, funciona bem. Este necessita de um "run-time jar", a versão bytecode de toda a API padrão.
devel/eclipse IDE grande; funciona com o JDK da Sun
Lisp lang/clisp
Lua lang/lua Bibliotecas adicionais para Lua e utilidades auxiliares estão disponíveis na árvore de portes.
Perl base48.tgz, perl(1) Muitos módulos Perl estão disponíveis na árvore de portes, então procure por eles antes de instalar módulos do CPAN.
PHP www/php4 Uma grande quantidade de subpacotes está disponível para diferentes módulos PHP.
www/php5
Prolog lang/swi-prolog Ambiente SWI-Prolog.
Python lang/python Outros portes estão usando o Python 2.5 por padrão.
Ruby lang/ruby
Scheme lang/chicken
lang/scheme48
lang/scm
shells/scsh
Smalltalk lang/squeak
Tcl lang/tcl

Compilação do JDK da Sun

Devido às restrições da licença SCSL da Sun, o OpenBSD não pode distribuir pacotes binários do JDK < 1.7. A partir da versão 1.7, o OpenBSD possui um porte completamente licenciado como GPLv2, que pode ser instalado como um pacote. Usuários em busca do plugin de navegador ainda têm que compilar a versão 1.5 ou 1.6 a partir dos portes, até que a Sun disponibilize o código fonte do plugin. Note que você vai precisar de uma boa quantidade de RAM para a compilação funcionar.

Os portes do JDK estão no subdiretório devel/jdk da árvore de portes. Você pode escolher entre diferentes versões, cada uma em seu próprio subdiretório. Quando você digitar make, você verá uma mensagem pedindo que você baixe manualmente os arquivos de código fonte do sítio Web da Sun. Antes de você fazer isso, você precisa se registrar naquele sítio Web e aceitar a licença. Esse é o motivo pelo qual o sistema de portes não pode iniciar o download automaticamente.

Depois que você fez o download dos arquivos de distribuição necessários e do conjunto de correções, copie-os para o diretório /usr/ports/distfiles. Você também precisa ter o X instalado no seu sistema. Comece a compilação digitando make no subdiretório do porte.

O JDK requer um compilador Java 2 como um iniciador para a compilação. Para este propósito, desde o OpenBSD 4.0, o porte do JDK 1.5 usa o kaffe, o que permite que o JDK 1.5 seja usado tanto na plataforma i386 quanto na amd64, e reduz o tempo de compilação consideravelmente.

Versões antigas do JDK ainda requerem uma versão do JDK para Linux. A emulação do Linux no OpenBSD é restrita aos sistemas i386, desse modo as antigas versões do JDK somente compilam em i386. O sistema de portes deve tomar conta de instalar os arquivos necessários e regular a variável kern.emul.linux=1. Para mais informação, leia sobre emulação do Linux na página de manual compat_linux(8), e também a FAQ 9 - Como executar binários do Linux no OpenBSD. Note que essa emulação do Linux somente é requerida durante a compilação do JDK, o que resulta em um JDK nativo para o OpenBSD. Você não precisa da emulação do Linux para trabalhar com o JDK nativo.

Depois de muitas horas, a compilação chega ao fim. Simplesmente continue com make install para instalar o JDK.

Se você receber erros do tipo "Could not reserve enough space for object heap", tente aumentar os seus limites de memória de processos usando o comando embutido do shell ulimit com o sinalizador -d.

Outras ferramentas de desenvolvimento

Adicionalmente, existem muitas outras ferramentas de desenvolvimento disponíveis dentro do sistema base ou como pacotes ou portes. Alguns exemplos:

8.4 - O que é a árvore de portes?

Por favor, veja a FAQ 15, Utilização dos portes.

8.5 - O que são pacotes?

Por favor, veja a FAQ 15, Gerenciamento de pacotes.

8.6 - Devo usar Portes ou Pacotes?

Por favor, veja a FAQ 15.

8.8 - Existe alguma maneira de usar meu drive de disquete se ele não foi vinculado durante a inicialização?

Você precisa configurar o kernel para sempre assumir que o drive de disquete está vinculado, mesmo se ele não foi detectado durante a fase de inicialização, marcando o bit sinalizador 0x20 no fdc(4). Isso pode ser feito usando o User Kernel Config ou o config(8) para alterar seu kernel,

# config -e -f /bsd
OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> change fd*
254 fd* at fdc0 drive -1 flags 0x0
change [n] y
drive [-1] ? ENTER
flags [0] ? 0x20
254 fd* changed
254 fd* at fdc0 drive -1 flags 0x20
ukc> q
Saving modified kernel.
#

8.9 - Carregador de inicialização do OpenBSD (i386, específico para amd64)

Quando seu sistema OpenBSD está inicializando, você provavelmente vai notar o prompt de inicialização ("boot").

boot>

Para a maioria das pessoas, você não tem que fazer nada aqui. Ele inicializa automaticamente se nenhum comando for dado. Mas algumas vezes problemas acontecem, ou funções especiais são necessárias. É nessa parte que tais opções são úteis. Antes de avançar, você deve ler a página de manual boot(8). Aqui nós veremos os comandos comuns mais usados no carregador de inicialização.

Para começar, se nenhum comando é utilizado o carregador de inicialização tenta automaticamente carregar o /bsd, se este falhar ele tenta o /obsd, e se este falhar ele tenta o /bsd.old. Você pode especificar um kernel digitando:

boot> boot hd0a:/bsd
ou
boot> b /bsd

Isso carrega o kernel nomeado bsd da partição 'a' do primeiro disco rígido reconhecido pelo BIOS.

Esta é uma pequena lista das opções que você pode usar com o kernel do OpenBSD.

Essas opções são passadas no formato: boot [ imagem [-acds]]

Para mais informações, você pode ler a página de manual boot(8).

8.10 - Utilização de S/Key no seu sistema OpenBSD

S/Key é um sistema de autenticação ``one-time password'' (uma senha diferente a cada início de sessão). Ele pode ser útil para aquelas pessoas que não têm a possibilidade de usar um canal criptografado que protege suas credenciais de autenticação, como o que pode ser estabelecido pelo ssh(1).

AVISO: Os sistemas de senha "one-time" protegem somente a informação de autenticação. Eles não previnem "eavesdroppers" de rede de ganhar acesso à informação privada. Além disso, se você está acessando um sistema seguro A, é recomendado que você faça isso a partir de um outro sistema confiável B, para se assegurar de que ninguém está ganhando acesso ao sistema A ao capturar as teclas digitadas ou ao capturar e/ou forjar a entrada e saída nos seus dispositivos de terminal.

O sistema S/Key gera uma sequência de senhas "one-time" (uso único) a partir da frase secreta do usuário junto com um convite recebido do servidor através de uma função de dispersão segura. O sistema somente é seguro se a frase secreta nunca for transferida pela rede. A inicialização ou mudança da sua frase secreta PRECISA ser feita através de um canal seguro, tal como o ssh(1) ou o console.

A implementação S/Key do OpenBSD pode usar uma variedade de algoritmos como a função de dispersão "one-way". Os seguintes algoritmos estão disponíveis:

Configuração de S/Key - As primeiras etapas

Para começar, o diretório /etc/skey precisa existir. Se esse diretório não existe, o super usuário deve criá-lo. Isso pode ser feito com:

# skeyinit -E

Uma vez que o diretório está criado, você pode inicializar seu S/Key. Para fazer isso você precisa usar o skeyinit(1). O skeyinit(1) pergunta a você qual é a frase secreta S/Key, então você precisa executar esse comando dentro de um canal seguro, conforme explicado acima! O programa sempre lembra isso a você. No skeyinit(1), você será abordado pela senha para o sistema. Essa é a mesma senha que você usa para iniciar sessão no sistema. Depois que você obteve autorização com sua senha do sistema, você será perguntado pela sua frase secreta S/Key. Essa NÃO é a senha do sistema. Sua frase secreta precisa ter no mínimo 10 caracteres. Nós sugerimos o uso de uma frase memorizável que contenha diversas palavras como frase secreta. Este é um exemplo de uso.

$ skeyinit
Reminder - Only use this method if you are directly connected
           or have an encrypted channel.  If you are using telnet,
           exit with no password and use skeyinit -s.
Password:
[Adding ericj with md5]
Enter new secret passphrase:
Again secret passphrase:

ID ericj skey is otp-md5 100 oshi45820
Next login password: HAUL BUS JAKE DING HOT HOG

Uma linha de importância em particular é a ID ericj skey is otp-md5 100 oshi45820, ela dá muitas informações para o usuário. Esta é a divisão das seções e suas importâncias.

Mas a mais importante é sua senha de uso único. Sua senha de uso único é formada por 6 palavras pequenas, que quando combinadas tornam-se a sua senha de uso único, com espaços e tudo. A senha de uso único mostrada pelo skeyinit não pode ser usada para o início de sessão (há um uso para essa primeira senha one-time, veja skeyinit(1)). Para ser possível iniciar sessão, uma senha de uso único correspondente ao convite mostrado pelo processo de início de sessão precisa ser calculada usando o skey(1). A próxima seção mostra como fazer isso.

Utilização de S/Key para o início de sessão.

Seu skey está inicializado. Agora você está pronto para iniciar sessão. Este é um exemplo de sessão usando S/Key para iniciar uma sessão. Para fazer um início de sessão S/Key, você adiciona :skey ao seu nome de início de sessão.

$ ftp localhost
Connected to localhost.
220 oshibana.shin.ms FTP server (Version 6.5/OpenBSD) ready.
Name (localhost:ericj): ericj:skey
331- otp-md5 96 oshi45820
331 S/Key Password: 
230- OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010
230-
230- Welcome to OpenBSD: The proactively secure Unix-like operating system.
230-
230- Please use the sendbug(1) utility to report bugs in the system.
230- Before reporting a bug, please try to reproduce it with the latest
230- version of the code.  With bug reports, please try to ensure that
230- enough information to reproduce the problem is enclosed, and if a
230- known fix for it exists, include that as well.
230-
230 User ericj logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> quit
221 Goodbye.

Note que eu adicionei ":skey" ao meu nome de usuário. Isso diz ao ftpd que eu quero me autenticar usando S/Key. Alguns de vocês devem ter notado que meu número de sequência foi mudado para otp-md5 96 oshi45820, isso é porque eu usei S/Key diversas vezes para iniciar sessão. Mas como você pega sua senha de uso único? Bem, para calcular a senha de uso único você precisa conhecer o número de sequência que você está usando e sua chave. Você provavelmente está pensando, como lembrar o número de sequência?

Quando você está iniciando sessão, o processo de início de sessão mostra uma linha que contém a informação necessária, que você pode usar para gerar uma senha de uso único em um computador confiável através de um canal seguro, copiando a linha em um console:

otp-md5 96 oshi45820

Depois de digitar sua frase secreta, sua senha de uso único é mostrada, e você pode então copiar para o prompt de senha S/Key para iniciar uma sessão. O otp-md5 não é somente uma descrição da dispersão usada, ele é também um nome alternativo para o comando skey(1).

Se você já está autenticado e quer gerar uma senha de uso único para o próximo início de sessão, use skeyinfo(1), ele lhe diz o que usar no próximo início de sessão. Por exemplo, preciso gerar uma outra senha de uso único para um início de sessão que quero fazer no futuro (lembre-se, estou fazendo isso a partir de um canal seguro).

$ skeyinfo
95 oshi45820

O melhor jeito de fazer isso é usar skeyinfo -v, que mostra um comando adequado para ser executado na linha de comando. Por exemplo:

$ skeyinfo -v
otp-md5 95 oshi45820

Assim, um modo simples de gerar a próxima senha S/Key é apenas:

$ `skeyinfo -v`
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:
NOOK CHUB HOYT SAC DOLE FUME

Note as aspas invertidas no exemplo acima.

Eu tenho certeza que muitos de vocês nem sempre tem uma conexão segura ou um computador local confiável para criar essas senhas, e criá-las através de uma conexão insegura não é viável. Como você pode criar múltiplas senhas em uma única vez? Você pode informar ao skey(1) o número de senhas que você quer criar. Elas então podem ser impressas e levadas com você para onde você for.

$ otp-md5 -n 5 95 oshi45820
Reminder - Do not use this program while logged in via telnet.
Enter secret passphrase:
91: SHIM SET LEST HANS SMUG BOOT
92: SUE ARTY YAW SEED KURD BAND
93: JOEY SOOT PHI KYLE CURT REEK
94: WIRE BOGY MESS JUDE RUNT ADD
95: NOOK CHUB HOYT SAC DOLE FUME

Note que a senha de baixo deve ser usada primeiro, porque nós estamos decrementando a partir de 100.

Utilização de S/Key com ssh(1) e telnet(1)

O uso de S/Key com ssh(1) ou telnet(1) é feito de modo idêntico ao ftp -- você simplesmente coloca ":skey" no final do seu nome de usuário. Exemplo:

$ ssh -l ericj:skey localhost
otp-md5 98 oshi45821
S/Key Password: SCAN OLGA BING PUB REEL COCA
Last login: Thu Apr  7 12:21:48 on ttyp1 from 156.63.248.77
OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

You have mail.
$

8.12 - O OpenBSD suporta SMP?
(Multiprocessamento simétrico)

SMP é suportado nas plataformas OpenBSD/i386, OpenBSD/amd64, OpenBSD/mvme88k e OpenBSD/sparc64 (incluindo os processadores UltraSPARC T1).

Um kernel SMP separado, "bsd.mp", é fornecido com os pacotes de arquivos de instalação, que pode ser selecionado na hora da instalação. É aconselhado que você teste a inicialização desse kernel antes de renomeá-lo para "bsd", tornando-o seu kernel padrão.

É esperado que outras plataformas compatíveis com SMP sejam suportadas no futuro. Na maioria das outras plataformas o OpenBSD funciona em um sistema SMP, mas utilizando somente um processador. A exceção disso é a plataforma SPARC -- OpenBSD/sparc requer algumas vezes que módulos MBus extras sejam removidos para que o sistema inicialize.

8.13 - Às vezes recebo erros de entrada/saída quando tento usar meus dispositivos tty

Você precisa usar /dev/cuaXX para as conexões iniciadas a partir de um sistema OpenBSD, os dispositivos /dev/ttyXX são somente para uso como terminal ou "dial-in". No passado foi possível usar dispositivos tty, agora o kernel do OpenBSD não é mais compatível com esse uso.

Extraído de cua(4):

Para portas de terminal de hardware, o "dial-out" é suportado através da correspondência de nós de dispositivos chamados unidades de chamada. Por exemplo, o terminal chamado /dev/tty03 teria uma unidade de chamada correspondente, de nome /dev/cua03. Esses dois dispositivos são normalmente diferenciados criando o nó do dispositivo de unidade de chamada com um número secundário 128 vezes maior que o nó de dispositivo "dial-in". Mesmo que o dispositivo dial-in (o tty) normalmente requeira um sinal de hardware para indicar ao sistema que ele está ativo, o dispositivo de dial-out (o cua) não, e, portanto, pode comunicar-se desimpedido com um dispositivo, tal como um modem. Isso significa que processos como o getty(8) esperam em um dispositivo dial-in até que uma conexão seja estabelecida. Enquanto isso, uma conexão dial-out pode ser estabelecida em um dispositivo dial-out (para a mesma porta de terminal do hardware) sem interferir em nenhuma outra parte do sistema. O processo getty(8) nem mesmo avisa que alguma coisa está acontecendo na porta de terminal. Se uma chamada de conexão chega depois que uma conexão dial-out foi finalizada, o processo getty(8) lida com ela apropriadamente, sem ter avisado a interferência da ação dial-out.

8.14 - Quais navegadores Web estão disponíveis no OpenBSD?

Lynx, um navegador em modo texto, está no sistema base, e tem suporte a SSL. Outros navegadores na árvore de portes são (sem uma ordem em particular):

Navegadores Gráficos (X)

Navegadores de Console (Modo Texto)

Você encontra todos estes na coleção de pacotes. Todos os navegadores mencionados acima estão localizados em /usr/ports/www/ depois da instalação da árvore de portes. A maioria está disponível como pacotes pré-compilados, disponíveis nos servidores FTP e no CD-ROM. Como a maioria dos navegadores gráficos são grandes e requerem algum tempo para o download e compilação, é muito recomendado o uso de pacotes quando disponíveis.

8.15 - Como eu uso o editor mg?

Mg é um mini editor de texto, no estilo do Emacs, incluído no OpenBSD. Mini significa que ele é pequeno (Emacs é muito grande!). Para o básico, leia a página de manual mg(1) e o tutorial que é fornecido junto com o código fonte.

Note que o mg é uma implementação pequena do Emacs, que possui funcionalidades similares ao Emacs 17, mas ele não implementa muitas outras funcionalidades do Emacs. (Isso inclui cliente de correio eletrônico e de notícias, como também modos para Lisp, C++, Lex, Awk, Java, etc.)

8.16 - O ksh(1) não lê o meu arquivo .profile!

Há duas razões comuns para o ksh(1) aparentemente ignorar o arquivo .profile do usuário.

8.17 - Por que meu arquivo /etc/motd é sobrescrito quando eu o modifico?

O arquivo /etc/motd é editado a cada inicialização do sistema, substituindo tudo o que está nele, exceto a primeira linha em branco com a informação da versão do kernel do sistema. Quando você editar esse arquivo, tenha certeza que você começa depois dessa linha em branco, para evitar que o /etc/rc exclua essas linhas quando ele edita o /etc/motd na inicialização.

8.20 - Fontes sem serrilhado e TrueType no X

Veja este documento.

8.21 - O OpenBSD suporta algum sistema de arquivos com "journaling"?

Não, ele não suporta. Nós usamos um mecanismo diferente, chamado Soft Updates, para alcançar resultados similares. Por favor, leia FAQ 14 - Soft Updates para obter mais detalhes.

8.22 - DNS reverso
     - ou -
Por que demora tanto para eu iniciar uma sessão?

Muitos novos usuários do OpenBSD experimentam um atraso de dois minutos no início de sessão quando estão usando serviços como ssh ou ftp. Isso também pode acontecer quando se usa um proxy, como o ftp-proxy, ou quando se envia uma mensagem de correio eletrônico para fora da estação de trabalho através do sendmail.

Isso é, na maioria das vezes, um problema de DNS reverso. DNS é "Domain Name Services" (Serviços de Nome de Domínio), o sistema que a Internet usa para converter um nome tal como "www.openbsd.org" em um endereço IP numérico. Uma outra tarefa do DNS é a funcionalidade de pegar um endereço numérico e converter novamente para um "nome", isso é o chamado DNS Reverso ("Reverse DNS").

Para oferecer um melhor acesso, o OpenBSD faz uma busca de DNS reverso em qualquer máquina que se conecta a ele em muitas formas diferentes, incluindo ssh, ftp, sendmail ou ftp-proxy. Infelizmente, em alguns casos a máquina que está fazendo a conexão não tem uma entrada apropriada de DNS reverso.

Um exemplo dessa situação:

Um usuário configura uma máquina OpenBSD como um firewall e gateway para sua rede interna doméstica, mapeando todos os seus computadores internos para um IP externo usando NAT. Eles também podem estar utilizando a máquina como relay de mensagem ("mail relay") de saída. Eles seguem as instruções de instalação, e estão muito felizes com os resultados, exceto por uma coisa: toda vez que eles tentam se conectar de qualquer maneira ao sistema, eles acabam tendo um atraso de dois minutos antes que aconteça algo.

O que está acontecendo:

Para a estação de trabalho que está atrás da NAT do gateway com um endereço IP não-registrado 192.168.1.35, o usuário usa o ssh para acessar o sistema gateway. O cliente ssh pede o nome de usuário e a senha, e envia ao gateway. O gateway então tenta verificar quem está tentando acessar o sistema fazendo uma pesquisa de DNS reverso do endereço 192.168.1.35. O problema é que endereços 192.168.0.0 são para uso privado, um servidor DNS configurado corretamente que está fora da sua rede não possui informação sobre esses endereços. Alguns servidores retornam rapidamente uma mensagem de erro nesses casos, o OpenBSD assume que não se pode obter mais informação e cessa, liberando o usuário. Outros servidores DNS não retornam NENHUMA resposta. Nesse caso haverá um tempo de expiração até que o resolvedor de nomes do OpenBSD expire o tempo, que leva cerca de dois minutos antes que se permita o acesso para poder continuar. No caso do ftp-proxy, alguns clientes ftp expiram o tempo antes que o tempo da consulta de DNS reverso expire, dando a impressão que o ftp-proxy não está funcionando.

Isso pode ser muito chato. Mas, felizmente, existe uma solução fácil.

Solução usando /etc/hosts:

A solução mais fácil é preencher seu arquivo /etc/hosts com todas as estações de trabalho que você tem na sua rede interna, e se assegurar que seu arquivo /etc/resolv.conf contém a linha lookup file bind, que assegura que o resolvedor entenda que é para começar com o arquivo /etc/hosts, e, se este falhar, usar os servidores DNS especificados pelas linhas "nameserver" no seu arquivo /etc/resolv.conf.

Seu arquivo /etc/hosts será algo parecido com isto:
::1 localhost.in.example.org localhost
127.0.0.1 localhost.in.example.org localhost
192.168.1.1 gw.in.example.org gw
192.168.1.20 scrappy.in.example.org scrappy
192.168.1.35 shadow.in.example.org shadow

Seu arquivo resolv.conf será algo parecido com isto:
search in.example.org
nameserver 24.2.68.33
nameserver 24.2.68.34
lookup file bind

Uma objeção comum a isso é "Mas eu uso DHCP para minha rede interna! Como eu posso configurar meu /etc/hosts?" É fácil. Introduza as linhas para todos os endereços que seu servidor DHCP vai entregar, e para quaisquer dispositivos estáticos:
::1 localhost.in.example.org localhost
127.0.0.1 localhost.in.example.org localhost
192.168.1.1 gw.in.example.org gw
192.168.1.20 scrappy.in.example.org scrappy
192.168.1.35 shadow.in.example.org shadow
192.168.1.100 d100.in.example.org d100
192.168.1.101 d101.in.example.org d101
192.168.1.102 d102.in.example.org d102
         [... parte recortada ...]
192.168.1.198 d198.in.example.org d198
192.168.1.199 d199.in.example.org d199

Nesse caso, estou assumindo que você tem uma faixa DHCP configurada de 192.168.1.100 até 192.168.1.199, mais as três definições estáticas listadas na parte superior do arquivo.

Se seu gateway precisa usar DHCP para a configuração, é possível que você encontre um problema: o dhclient sobrescreve seu /etc/resolv.conf toda vez que a conexão é renovada, o que remove a linha "lookup file bind". Isso pode ser resolvido colocando a linha "lookup file bind" no arquivo /etc/resolv.conf.tail.

Solução usando um servidor DNS local

Os detalhes sobre essa solução vão mais além do objetivo deste documento, mas o truque básico é configurar seu servidor DNS preferido e ter certeza que ele é autoritativo na resolução reversa e direta de DNS para todos os nós da sua rede, e ter certeza que seus computadores (incluindo seu gateway) sabem que é para usar ele como um servidor DNS.

8.23 - Por que as páginas Web do OpenBSD não estão em conformidade com HTML4/XHTML?

As páginas Web atuais foram feitas com muito cuidado para que possam funcionar em uma grande variedade de navegadores reais, anteriores à versão 4.0 e posteriores. Nós não queremos tornar essas páginas velhas em conformidade com HTML4 ou XHTML até termos certeza de que esses padrões também irão funcionar em navegadores antigos; isso não é uma prioridade. Damos boas vindas para novos contribuidores, mas sugerimos que você trabalhe escrevendo código ou na documentação de novos aspectos do sistema, não melhorando as páginas Web existentes para seguir novos padrões.

8.24 - Meu relógio está desajustado vinte e poucos segundos. Por quê?

Ao utilizar o rdate(8) para sincronizar seu relógio com um servidor NTP, você pode observar que seu relógio avançou/atrasou cerca de vinte segundos em relação a sua definição local de tempo.

Isso é causado devido a uma diferença entre o tempo UTC ("Coordinated Universal Time", ou Tempo Universal Coordenado, baseado em observações astronômicas) e o tempo TAI ("International Atomic Time", ou Tempo Atômico Internacional, baseado em relógios atômicos). Para compensar as variações na rotação da terra, se introduz "segundos de salto" no tempo UTC, mas o tempo TAI não é ajustado. Esses segundos de salto são a causa dessa discrepância. Para uma descrição detalhada, pesquise na Web por "leap seconds UTC TAI".

Corrigir o problema é simples. Na maioria dos países você consegue a hora correta se usar o parâmetro "-c" no rdate(8) e um fuso horário fora do diretório /usr/share/zoneinfo/right/. Por exemplo, se você está morando na Alemanha, você pode usar estes comandos:

     # cd /etc && ln -sf /usr/share/zoneinfo/right/CET localtime
     # rdate -ncv ptbtime1.ptb.de
Em outros países as regras podem variar.

8.25 - Por que meu relógio avançou/atrasou várias horas?

O OpenBSD assume por padrão que seu relógio de hardware está configurado para UTC ("Universal Coordinated Time") em vez do tempo local assumido por alguns outros sistemas operacionais, o que pode causar problemas ao utilizar inicialização múltipla.

Muitos outros sistemas operacionais podem ser configurados para fazer o mesmo, o que permite evitar esse problema.

Se ter um relógio de hardware configurado para UTC é um problema, você pode mudar o comportamento padrão do OpenBSD usando o config(8). Por exemplo, para configurar o OpenBSD para usar um relógio de hardware configurado para US/Eastern (5 horas a menos que UTC, ou seja, 300 minutos):

# config -ef /bsd
OpenBSD 4.8 (GENERIC) #136: Mon Aug 16 09:06:23 MDT 2010
    deraadt@i386.openbsd.org:/usr/src/sys/arch/i386/compile/GENERIC
Enter 'help' for information
ukc> timezone 300
timezone = 300, dst = 0
ukc> quit
Saving modified kernel.
Veja options(4) e procure pela opção "TIMEZONE=value" para mais informação.

Normalmente, o fuso horário é configurado durante a instalação. Se você precisa mudar o fuso horário, você pode criar uma nova ligação simbólica para o arquivo de fuso horário apropriado em /usr/share/zoneinfo. Por exemplo, para configurar a máquina para usar EST5EDT como o novo fuso horário local:

# ln -fs /usr/share/zoneinfo/EST5EDT /etc/localtime

Veja também:

[Índice da FAQ] [Seção 7 - Controle do Teclado e da Tela] [Seção 9 - Migração para OpenBSD]


[voltar] www@openbsd.org
$OpenBSD: faq8.html,v 1.11 2010/11/15 18:41:58 ajacoutot Exp $