SSH com authorized_keys para um sistema Ubuntu com homedir criptografado?

36

Recentemente, configurei um novo servidor com o Ubuntu karmic 9.10 e, quando criei meu diretório pessoal, optei por torná-lo criptografado. Agora, depois de carregar meu arquivo authorized_keys em ~ / .ssh, ele não é reconhecido porque meu diretório pessoal não é descriptografado até depois do login. Existe uma maneira de fazer com que as chaves SSH funcionem com diretórios pessoais criptografados no Ubuntu?

    
por Josh 26.10.2009 / 21:06

5 respostas

38

Altere esta linha no seu arquivo sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

Em seguida, mova seu arquivo authorized_keys para / etc / ssh / your-username / authorized_keys

Esta postagem documenta outra maneira de resolver isso.

    
por 26.10.2009 / 21:28
8

Esta solução foi inspirada por este post . IMHO é muito melhor do que modificar seu / etc / ssh / sshd_config já que não requer acesso root.

# Make your public key accessible
mkdir -m 700 /home/.ecryptfs/$USER/.ssh
echo $YOUR_PUBLIC_KEY > /home/.ecryptfs/$USER/.ssh/authorized_keys
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys
ecryptfs-umount-private
chmod 700 $HOME
mkdir -m 700 ~/.ssh
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys

# Make it auto-mount with first login.
# Note: it can cause problems with automated login.
echo /usr/bin/ecryptfs-mount-private > ~/.profile
echo cd >> ~/.profile
echo source .profile >> ~/.profile
ecryptfs-mount-private
    
por 20.07.2011 / 18:59
2

Eu passei algum tempo brincando com isso, e a resposta é que é praticamente impossível. É possível configurar logins autenticados por chave pública sem senha via ssh, então você não precisa digitar sua senha para logar , mas isso não levar você a qualquer lugar, porque o seu diretório pessoal ainda está criptografado.

O simples fato é que o seu diretório pessoal criptografado é criptografado com uma senha *, portanto, a única maneira de descriptografá-lo é com essa senha.

E se você está pensando que, em teoria, deve ser possível usar sua chave ssh para descriptografar a senha de montagem no login, isso não funcionará porque sua chave privada nunca é enviada para o servidor.

Então, basicamente, se você quiser criptografia, você tem que usar senhas. Diretórios iniciais criptografados são incompatíveis com logins de impressões digitais pelo mesmo motivo.

* Eu sei que é mais complicado do que uma única senha, mas vamos simplificar por enquanto.

    
por 27.10.2009 / 04:50
1

Se você não gosta de modificar a configuração padrão (eu não gosto, eu gosto de meus arquivos para onde eu espero que eles estejam), então você pode querer dar uma olhada no meu post sobre como fazer isso:

http://www.enetworkservices.net/wordpress/ssh-public-keys-with-encrypted-home-directory.html

Em suma. Você coloca suas chaves na versão criptografada de seu usuário ~/.ssh e associa simbolicamente a versão criptografada de ~/.ssh ao outro. Desta forma, está sempre lá.

Para os preguiçosos como eu, aqui está um script para fazer isso por você. Basta executá-lo como o usuário normal. Nenhum acesso root ou permissões necessárias e nenhuma alteração na configuração do servidor é necessária. Configurações normais do usuário.

#!/bin/bash
#
# Encrypted Home DIR SSH Key fix.
# Requires modification to sshd_config
#  AuthorizedKeys /etc/ssh/authorized_keys/%u/authorized_keys
# sudo mkdir /etc/ssh/authorized_keys -m 777
# for existing users run from home directory when login.
# for new users modify /etc/skel to include .bashrc to call script.
#
# Author: Benjamin Davis <[email protected]>

# Check if directory exists.
if [ ! -d "/etc/ssh/authorized_keys/$LOGNAME" ]
then
    # Make directory with restricted permissions.
    echo "Creating user ssh directory."
    mkdir /etc/ssh/authorized_keys/$LOGNAME -m 700
fi

# Check real users home .ssh folder
if [ -d "/home/$LOGNAME/.ssh" ]
then
    # Check if dir is symlink
    if [ ! -h /home/$LOGNAME/.ssh ]
    then
        echo "Moving configs."
        mv /home/$LOGNAME/.ssh/. /etc/ssh/authorized_keys/$LOGNAME/.
        rm -rf /home/$LOGNAME/.ssh/
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
        clear
    fi
else
    # Does not exist so link it.
    if [[ $EUID -ne 0 ]]
    then
        echo "User ssh config folder does not exist. Creating."
        mkdir /home/$LOGNAME/.ssh -m 700
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
    fi
fi
    
por 12.05.2011 / 23:35
0

Você pode usar a chave pública mais segura para efetuar login e, em seguida, executar o seguinte para montar seu diretório depois de digitar sua senha:

ecryptfs-mount-private

Leia o arquivo ~/README.txt depois de fazer o login via SSH, você verá que você não tem seus arquivos porque o diretório criptografado não está montado.

Você não deve usar chaves públicas sem senha para fazer login de qualquer maneira. Olhe para o ssh-agent para uma maneira melhor.

    
por 12.02.2010 / 17:28