Category: Shell Script

Mai 21 2009

Gerando segunda senha para SSH aleatória.

Olá,

Ontem mostrei para você como deixar seu SSH mais seguro e até mesmo como pedir outra senha no mesmo. Mas me deu uma idéia na cabeça que está senha poderia ser gerada aleatoriamente todos os dias. Então pensei e cheguei a seguinte idéia. Todos os dias, em tal hora, será gerada uma segunda senha nova. Está será enviada para mim por e-mail. Ou seja ao acessar o SSH precisarei colocar a senha do meu usuário, logo em seguida a senha que foi gerada e está em meu e-mail.

Shell-script para gerar senha Aleatoria (.gerarSenha):

caracteres=(a b c d e f g h i j k l m n o p q r s t u v w y x z 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V X W Y Z)
total=(${#caracteres[*]})
for ((i=1; i<=10; i++)); {
Valor=$((RANDOM%$total))
String=”$String${caracteres[$Valor]}”
}
echo $String > .senhaDoDia

Este arquivo criara uma seqüência aleatória de caracteres e salvara ela no arquivo “.senhaDoDia”

Script para pegar a senha do .senhaDoDia (.leitorLinha):

while read linha
do
senhaGerada=$linha
done

Este arquivo lê o conteúdo do arquivo que for passado como “parâmetro”

Arquivo PHP que envia a senha para meu e-mail (sendMail.php):

<?
$s = $_GET['s'];
mail(“E-MAIL”, “ASSUNTO”, “Sua senha de hoje é $s”);
?>

Script para enviar senha (.enviarSenha):

source .secure/.leitorLinha < .secure/.senhaDoDia
wget http://www.suapagina.com/sendMail.php?s=$senhaGerada -q
rm -rf sendMail.php?s=$senhaGerada

Este arquivo utiliza o .leitorDeLinha para colocar a .senhaDoDia em $senhaGerada e faz uma requisição ao endereço que tem a função de enviar e-mail. O mais correto era configurar o próprio servidor para enviar o e-mail não dependendo assim de duas máquinas. Eu simplesmente fiz assim, pois não estou com vontade de configurar um servidor de e-mail no momento e para testes resolvi utilizar minha hospedagem.

As mudanças no seu .profile devem ser as seguintes (.profile):

source .secure/.leitorLinha < .secure/.senhaDoDia
echo Digite sua senha de segurança:
read senha
if [ $senha == $senhaGerada ]

Pronto, agora você tem um script que gera uma senha aleatoria, envia para seu e-mail e pede a mesma quando você se logar no seu SSH. Lembrando que você deve colocar o .gerarSenha para ser executado sempre tal dia em tal horário ou uma condição que você preferir. Lembro também que caso está máquina seja a sua caseira, que você utiliza o X e coisas do tipo, talvez possam ocorrer problemas se você se logar em uma tela já do ambiente gráfico pois acredito que ele pedira a senha de segurança. Não testei em um computador com o X, então enquanto isso recomendo está prática apenas para “servidores” ou computadores que terão seu SSH acessado remotamente (não esqueça você vai precisar de internet para pegar a senha em seu e-mail)

Matheus Bratfisch

Arquivos para gerar, enviar, ler segunda senha do ssh.

PS: Desculpe-me se ficou algo confuso, sabe como são essas idéias malucas né? Mas qualquer dúvida entre em contato comigo.

Mai 20 2009

Instalar e deixar seu servidor SSH mais seguro.

Boa noite,

Estou com umas idéias de coisas que planejo “desenvolver” para navegar de maneira mais segura. Como precisarei do SSH, acesso a portas das máquinas virtuais e coisas assim estou fazendo posts relacionados a estes assuntos já que precisarei dos mesmos para “desenvolver” tal segurança. E assim, o futuro post não ficará tão extenso.

Para você instalar o ssh-server no Ubuntu é muito simples:
$ sudo apt-get install openssh-server

Após isso você deve fazer algumas modificações para ficar mais seguro. Acesse o arquivo /etc/ssh/sshd_config
$ sudo vi /etc/ssh/sshd_config

AllowUsers USUARIO #habilita somente este usuario
AllowGroups GRUPO_DO_USUARIO # habilita somente este grupo
PasswordAuthentication yes
MaxStartups 2:100:2
Port XXX # Alguma porta aleatoria de sua vontade que não esteja em uso.

O que o MaxStartups faz? Especifica o número máximo de conexões não autenticadas ao servidor. Sua sintaxe é a seguinte inicio:porcentagem:maximo. Vamos supor, inicio = 10, porcentagem = 50, maximo = 20. Quando for atingidas 10 conexões ele irá iniciar com a porcentagem, ou seja, uma conexão terá chance de ser fechada de cara ou não, a mesma aumenta linearmente até o número máximo de conexões, e apartir dessa todas são negadas. Eu particularmente pensei um pouco e decidi adotar o inicio com 2, porcentagem com 100 e máximo como 2 então qualquer nova conexão apartir de 2 será automaticamente recusada. (Isso pode ser um problema caso existam pessoas tentando invadir seu servidor e provavelmente estarão utilizando todas as sessões). Talvez o recomendavel seja mais correto 10:30:60 porém prefiro deixar o meu mais restrito.
/etc/init.d/ssh

Você ainda pode adicionar o seguinte código ao /home/usuario/.profile:

echo Digite sua senha de segurança:
read senha
if [ $senha == "SUA_SENHA" ]
then
# CÓDIGOS QUE JÁ ESTÃO NO PROFILE!
else
exit
fi

Não se esqueça de bloquear acesso do root

Na minha máquina também desabilitei o comando “su” da seguinte maneira:
$ chmod 700 /usr/bin/su-to-root

Grato,
Matheus

Referencias:
Desabilitar Comando SU
Informação MaxStartups

Duas dicas que não são relacionadas com segurança, você pode descomentar a linha

Banner /etc/arquivo # Default /etc/issue.net

A mensagem que está dentro do /etc/arquivo irá ser exibida quando se conectar no SSH.

Para editar a mensagem que apareça assim que o usuario se loga você deve editar o /etc/motd.