Set 02 2009

Conectar ao SSH pelo Python.

Boa noite,

Ontem comentei sobre a utilização do pexpect para executar comandos e se comunicar com eles. Hoje brinquei um pouco mais com essa biblioteca e fiz um exemplo de conexão e enviar o comando ‘uptime’ para o servidor. Só um exemplo simples, mas acredito que já da uma idéia de como você pode mexer com essa biblioteca.

Primeiramente você deve ter a biblioteca pexpect instalada. Você pode obte-la em http://sourceforge.net/projects/pexpect/ e para instalar você deve digitar

$ sudo python setup.py install

Após a mesma instalada você já pode se divertir. O pequeno script que fiz para testar foi o seguinte:

import pexpect

class SSH():
def connect(self):
x = True
sshConnection = pexpect.spawn(‘ssh -l matheus -p 22 192.168.0.254′)
sshConnection.expect(‘matheus@192.168.0.254\’s password:’)
sshConnection.sendline(‘senha’)
while True:
print sshConnection.readline();
if x is True:
sshConnection.sendline(‘uptime’)
x = False
sshConnection.readline();

s = SSH()
s.connect()

Bom, o código é auto-explicativo e caso você tenha algum problema para entender, não hesite em entrar em contato,
Matheus Bratfisch

PS: Caso tenha algum problema execute o seguinte comando: $ sudo apt-get install python-dev

PS2: Maldita indentação. Caso você deseje baixe aqui o Conectar ao SSH pelo Python

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.

Mai 13 2009

Bloquear acesso root no ssh.

Boa noite,

Este post será breve, só quero lembrar você de desabilitar o acesso do root no seu servidor ssh. Edite o arquivo “/etc/ssh/sshd_config”

$ sudo vi /etc/ssh/sshd_config

Procure a linha “#PermitRootLogin no” e descomente-a.

Salve o arquivo.
Reinicie seu servidor

$ sudo /etc/init.d/sshd restart

Logo (assim que eu tiver tempo) pretendo formar o servidor aqui em casa e pretendo colocar os passos que eu fiz para instalar o mesmo e algumas configurações importantes para tornar o mesmo mais seguro.

Abraços,
Matheus

English Version: Block root access