Acesso seguro (e prático) às VMs

Como já foi divulgado por aqui, o controle do acesso às Vms do CEFALA está centralizado no servidor LDAP, que se encontra instalado na VM nfs. A senha de login de cada usuário é única para todas as VMs e está armazenada na base LDAP.

Existem duas maneiras de modificar a senha:

  1. Faça um login em nfs.cefala.org e use o comando passwd. Note que é possível rodar o comando passwd nas outras VMs, mas a modificação não é propagada à base LDAP e, na verdade, não serve para nada.
  2. Visite a interface phpLDAPadmin da VM nfs na URL https://nfs.cefala.org/phpldapadmin/. Clique en login na barra da esquerda e preencha o campo Login DN com cn=Rafael Laboissière,dc=cefala,dc=org (usando o seu nome ao invés do meu) e o campo Password com a sua senha LDAP.

Obviamente, estes dois métodos só funcionam se você já possuir uma senha válida na base LDAP e se você se lembrar dela. Caso contrário, você terá que pedir ajuda a um dos administradores da base LDAP (Arlindo e este seu humilde servidor, no momento).

O login por SSH às VMs utiliza, por default, a autenticação Unix clássica usando a senha LDAP. Entretanto, a maneira mais prática e mais segura de se autentificar nas VMs do CEFALA é através de pares de chave SSH. Ela é segura porque evita o envio de senhas através da Internet. Ok, ok, eu sei que as conexões via SSH são encriptadas, mas deixem-me cultivar a minha paranoia de segurança. Além disto, a conexão por par de chaves SSH introduz um obstáculo a mais aos piratas da Net pois, além da senha, elas terão que se apoderar também da chave privada que, normalmente, nunca sai do seu notebook ou computador pessoal.

Quando ao aspecto da praticidade, o uso de pares de chave SSH permite conexões transparentes sem a necessidade de fornecimento da senha a cada transação (scp, git pull/push, etc.).

A coisa funciona da seguinte maneira. Inicialmente, crie um par de chaves no seu sistema pessoal, usando o comando ssh-keygen. Este comando proporá a criação da chave privada em ~/.ssh/id_rsa. Você poderá mudar este nome, o que te permite criar tantos pares de chaves quanto você quiser. Eis um exemplo de criação de pares de chave:

$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rafael/.ssh/id_rsa): /home/rafael/.ssh/id_rsa.cefala
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/rafael/.ssh/id_rsa.cefala.
Your public key has been saved in /home/rafael/.ssh/id_rsa.cefala.pub.
The key fingerprint is:
b4:37:bd:e8:e8:64:f2:4c:0a:1b:59:09:d0:ef:af:04 rafael@edge
The key's randomart image is:
+---[RSA 2048]----+
|  ..             |
|   ..            |
|    ..  .        |
|     ..o . .     |
|    E.o S o .    |
|     +.  . o .   |
|    + o.+ . .    |
|     = O.o       |
|    . oo= .      |
+-----------------+

Note que, no exemplo acima, eu criei chaves com nomes ~/.ssh/id_rsa.cefala (a chave privada) e ~/.ssh/id_rsa.cefala.pub (a chave pública). A primeira é preciosa e não deve nunca sair do seu sistema pessoal. A segunda é feita para ser divulgada a Zeus e o mundo. Note, também, que é possível criar a chave sem senha. Entretanto, se você fizer isto, eu desço aí em Belo Horizonte para bater em você com vara de marmelo.

O próximo passo consiste na transferência da chave pública ao CEFALA, o que é feito da seguinte forma:

ssh-copy-id -i ~/.ssh/id_rsa.cefala.pub rlaboiss@xxx.cefala.org

substituindo rlaboiss pelo seu nome de login e xxx pelo nome de qualquer uma das VMs do CEFALA (dev, git, nfs, sci ou www). Este comando simplesmente adiciona a sua chave pública como uma linha do arquivo remoto ~/.ssh/authorized_keys. Como a partição /home/ é compartilhada por todas as VMs, basta rodar uma só vez o comando ssh-copy-id acima.

Em seguida, para simplificar as coisas e evitar o uso da opção -i a cada comando ssh, coloque o seguinte no arquivo .ssh/config do seu computador pessoal:

Host *.cefala.org
  User rlaboiss
  IdentityFile ~/.ssh/id_rsa.cefala

Lembre-se de usar o seu nome de login no lugar de rlaboiss.

Se você estiver usando um desktop moderno, como o GNOME3, por exemplo, que roda sob ssh-agent, você só precisará fornecer uma única vez a senha do seu par de chaves SSH, aquele que você usou no comando ssh-keygen (e espero que você tenha realmente usado uma senha, para o bem do seu lombo!). A partir daí, todas as conexões SSH ou Git nas VMs do CEFALA serão feitas sem necessidade de fornecimento da senha.

Update: No parágrafo acima, eu dou a entender que o ssh-agent só pode ser usado em sessões de desktop como o GNOME, por exemplo. Entretanto, existe uma maneira muito simples de rodá-lo dentro de uma sessão de shell. Neste caso basta fazer isto aqui:

$ eval $(ssh-agent)
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/rlaboiss/.ssh/id_rsa:
Identity added: /home/rlaboiss/.ssh/id_rsa (/home/rlaboiss/.ssh/id_rsa)

Você pode usar qualquer chave SSH como argumento do comando ssh-add, sendo o valor por default ~/.ssh/id_rsa. Após a execução destes comandos, as conexões via sss/scp não pedirão senha, contanto que a chave pública (no exemplo acima .ssh/id_rsa.pub) esteja estocada no arquivo .ssh/authorized_keys do servidor acessado. Vide explicação mais acima neste post.

social