Um guia para os iniciantes no mundo do FreeBSD
Configurando o uso do sistema de autenticacao S/Key (one-time passwords) no FreeBSD.
Algumas vezes precisamos liberar acesso via telnet a alguns usuarios,
porem isso pode comprometer a seguranca do servidor, pois uma
pessoa mal intencionada podera capturar o login/password ,quando enviado pela rede,
do usuario e conseguir deste modo, efetuar um acesso nao autorizado ao sistema.
Para tentar minimizar essa possibilidade podemos nos valer de alguns recursos
disponiveis no FreeBSD ( e em outras variantes do UNIX )
como por exemplo o sistema S/Key.
O S/Key e um sistema de "one-time password"
(1 password diferente a cada login) que usa o
MD4 para gerar um password, associado a uma chave e a uma determinada interacao. O S/Key e instalado por default
em todas as versoes do FreeBSD apartir da versao 1.1.5. S/Key e uma marca registrada da
Bell Communications Research, INC.
O sistema S/Key distribuido com o FreeBSD e constituido pelos aplicativos
keyinit, key, keyinfo, pelo banco de dados /etc/skeykeys e
pelo arquivo de configuracao /etc/skey.access.
- O keyinit e o programa responsavel por adicionar um novo usuario ao banco
de dados do S/Key (/etc/skeykeys).
- O key e o programa responsavel por gerar os one-time passwords de cada chave.
- O keyinfo e o programa responsavel por informar a chave e a interacao atual associada a cada usuario.
- O arquivo /etc/skey.access e utilizado para definir os hosts/users/portas que podem
logar normalmente no sistema sem usar o S/Key. Se este arquivo estiver presente so poderao
logar normalmente (sem usar S/Key) os hosts/users que estiverem devidamente autorizados.
Se este arquivo nao existir (ele nao e criado por default na instalacao do FreeBSD)
seus usuarios poderao logar normalmente ou usando o S/Key.
Uma vez que o S/Key e instalado por default, seus usuarios podem optar
por utilizar o S/Key sem necessitar da intervencao do root. Para verificar quais usuarios
estao usando S/Key de uma olhada no arquivo /etc/skeykeys.
Inicializando o S/Key para o seu login
Para usar o S/Key e muito simples, voce devera estar usando uma conecao segura (por exemplo o console do servidor) e executar o programa keyinit.
Por exemplo:
1 - Loge normalmente no sistema (Nao precisa ser a conta root !!!).
2 - Execute o comando keyinit:
% keyinit
Adding edson:
Reminder - Only use this method if you are directly connected.
If you are using telnet or rlogin exit with no password and use keyinit -s.
Enter secret password: [NAO PRECISA SER A SUA SENHA REAL]
Again secret password: [Confirme a senha escolhida]
ID edson s/key is 99 om37456
SAG TAR FONT SLOW FATE BOZO
Vamos ver o significado das linhas exibidas...
- A primeira linha informa que o usuario edson sera incluido ao banco de dados do S/Key.
- A segunda e a terceira linha lembram voce que voce so devera executar esse comando se estiver usando uma conexao segura.
- A quarta e quinta linha solicita que voce digite e confirme uma senha que sera utilizada
para gerar os seus one-time passwords. Veja que nao precisa ser a mesma
senha que voce usa atualmente. Vale lembrar tambem que voce devera
escolher uma boa senha ou seja uma senha de no minimo 8 caracteres que
misture letras maiusculas/minusculas/numeros/carcateres extendidos/,
e claro evite usar qualquer senha que use dados pessoais como datas de aniversarios, telefones, etc.
- A sexta linha informa que a chave om37456 foi associada ao usuario edson e que a interacao
atual desta chave e 99 (ou seja permite +98 logins com esta chave, apos a interaco de
numero 1 sera necessario rodar o keyinit novamente).
Obs: O numero de interacao e sempre decrescente.
- A setima linha mostra o password para a chave om37456 na interacao 99 (login atual),
o formato dos one-time passwords sera sempre parecido com esse, 6 palavras em ingles escrita com todas as letras maiusculas.
Para o proximo login sera necessario gerar o password para a interacao 98 ou voce nao ira conseguir logar.
Obs: Se voce esquecer de gerar o password, voce so podera logar na
console do servidor onde o login normal e sempre permitido ou podera
solicitar ao root que remova a entrada referente ao seu login do
arquivo /etc/skeykeys, desativando o uso do S/Key para o seu login.
Se voce nao tiver como inicializar o S/Key em uma conexao segura voce podera faze-lo
por uma conexao insegura executando o keyinit com a opcao -s e
rodar o programa key em um sistema seguro, por exemplo
no console de outro servidor FreeBSD.
Ex:
1 - Loge normalmente no sistema remoto via telnet.
2 - Execute o comando keyinit:
% keyinit -s
Adding edson:
Reminder you need the 6 English words from the skey command.
Enter sequence count from 1 to 9999: [Digite o numero de interacoes (logins) desejados para a chave a ser criada.]
Enter new key [default om37457]: Pressione ENTER
s/key 200 om37457
s/key access password:
3 - Agora voce devera executar em um local seguro o programa key para gerar
o password solicitado no prompt do keyinit, execute o programa key
seguindo o exemplo abaixo:
% key 200 om37457
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:[Digite uma senha]
SAGE CAR FONT LINE FATE LUNE
4 - Agora volte ao prompt do keyinit e digite a senha gerada pelo key:
s/key access password: SAGE CAR FONT LINE FATE LUNE
ID edson s/key is 200 om37457
SAGE CAR FONT LINE FATE LUNE
Pronto voce ja sabe como inicializar o S/Key atraves de uma conexao segura e de uma insegura. Agora vamos ver como gerar os passwords que serao utilizados...
Gerando os one-time passwords
Para gerar um one-time password valido, voce devera ter em maos a senha
usada no keyinit, a chave associada ao usuario e a interacao desejada. Vale lembrar
que voce devera executar o comando key em um local seguro para evitar que
capturem a senha usada no keyinit ou de nada adiantara o uso do S/Key. Voce podera
gerar de 1 a quantos passwords voce desejar de uma unica vez, se optar por gerar passwords para mais de
1 login guarde os em local seguro. Eu gero os passwords apenas no momento de usar ;-) . Bom vamos ao que interessa...
Em um terminal seguro execute o programa key fornecendo para ele o numero da interacao para a qual o password sera gerado e a chave associada ao seu login.
Exemplo:
% key 97 om37456
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:[Digite a senha utilizada no keyinit]
FIRE PEN CAT BLUE LINE FALL
O comando acima gera o password a ser utilizado pelo usuario edson ,
chave S/Key om37456 no login de interacao 97.
Se eu deseja-se gerar de uma unica, seria necessario utilizar a opcao -n com o comando key.
Por exemplo para gerar 10 passwords de uma unica vez:
% key -n 5 97 om37456
Reminder - Do not use this program while logged in via telnet or rlogin.
Enter secret password:[Digite a senha utilizada no keyinit]
93: ROTE AT QUICK NECK LEAD FUSS
94: DRILL COPE BOB INCUR REGA SOUL
95: GAPE ELSE COMP MEN AUTO POUR
96: LOVE GOD DOG KNIFE SUN FREE
97: FIRE PEN CAT BLUE LINE FALL
O comando acima gerou 5 password partindo da interacao 97.
Agora que ja sabemos como gerar os passwords vamos fazer um teste...
Testando o S/Key
Para testar o S/Key nos podemos dar um telnet no servidor, onde executamos o
keyinit, supondo que o servidor se chame omega e que o login seja edson:
% telnet omega
Trying 192.225.192.13...
Connected to omega.pro-unix.org.
Escape character is '^]'.
Login: edson
s/Key 97 om37456
Password: [ O password seria: FIRE PEN CAT BLUE LINE FALL ]
Last login ...
[etc]
Se apos o login eu fecha-se a secao de telnet e inicia-se uma nova, eu teria:
% telnet omega
Trying 192.225.192.13...
Connected to omega.pro-unix.org.
Escape character is '^]'.
Login: edson
s/Key 96 om37456
Password: [ O password seria: LOVE GOD DOG KNIFE SUN FREE ]
Last login ...
[etc]
E assim sucessivamente, a cada login a interacao sera decrementada requerendo um novo password a cada login.
Deste modo, mesmo que alguem capture a senha usada em uma secao, ele nada podera fazer com ela, pois
ela e valida apenas para um login (E voce ja logou com ela ;-) ).
O que diminue o risco de alguem acessar seu servidor usando uma senha capturada na rede.
Claro que isso so vale se voce rodar o programa key apenas em locais seguros ,
pois se um crcaker pegar a senha usada no keyinit ele podera gerar as senhas que necessitar...
Obs:
Vale lembrar que sua senha anterior continua valida para logins no console do servidor.
Caso o arquivo /etc/skey.access nao tenha sido criado, no prompt:
s/Key 97 om37456
Password:
Voce podera logar usando tanto um one-time password quanto a sua senha normal no servidor.
Por isso e recomendado que voce crie o arquivo /etc/skey.access, para configurar
a politica de uso, ou seja quem podera ou nao logar sem usar a autenticacao via S/Key.
Autorizando o login sem uso do sistema S/Key
Apos criar o arquivo /etc/skey.access (mesmo que em branco) vale a seguinte regra: " Tudo que nao for expressamente permitido sera negado".
Ou seja, com excessao do console, local em que qualquer usuario pode
logar usando sua senha normal,
nenhum usuario ira poder logar no
sistema usando outra autenticacao que nao o S/Key.
Em algumas vezes voce podera necessitar que alguns usuarios ou determinados hosts
tenham acesso ao seu servidor sem utilizar o S/Key ou seja usando a autenticacao normal do FreeBSD,
voce devera usar o arquivo /etc/skey.access para definir essas permissoes.
Por exemplo:
permit internet 200.224.192.10 255.255.255.0
permit user edson
permit port ttyd1
- A linha 1 define que o host 200.224.192.10 com netmask 255.255.255.0 pode acessar
o servidor em questao sem usar autenticacao S/Key.
- A linha 2 define que o usuario edson pode acessar o servidor sem utilizar S/Key.
- A linha 3 define que conexoes feitas na porta ttyd1 nao precisam utilizar autenticacao S/key.
Maiores informacoes sobre o uso do S/Key podem ser obtidas no manual online do FreeBSD.
Caso voce tenha efetuado um teste e queira desativar a autenticacao por S/Key em
seu servidor , remova o arquivo /etc/skey.access (Isso se ninguem mais usar S/Key) e remova a
linha referente ao login em questao do /etc/skeykeys, lembre-se que precisa de acesso root para modificar esses arquivos.
Espero que tenha gostado deste tutorial e que possa fazer um bom uso do que aqui foi discutido.
Boa Sorte !
Se você possui alguma critica , duvida ou sugestão ,entre em contato pelo e-mail: edson.brandi@uol.com.br