SSH com chaves autorizadas para um sistema Ubuntu com homedir criptografado?

38

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

Josh
fonte
Boas sugestões de tags foram bem-vindas, não foi possível encontrar correspondências realmente boas nas tags sugeridas.
26909 Josh
1
Eu acho que essas são verdadeiras. há uma ubuntutag, mas não acho que esse problema seja específico de nenhum sistema operacional em particular.
quack quixote
Um sintoma desse problema para mim no Ubuntu 11.10 é que a primeira tentativa de ssh na máquina é que a autenticação por senha é necessária (já que authorized_keysainda não está acessível). Se eu iniciar outra conexão ssh, a autenticação de chave funcionará.
usar o seguinte

Respostas:

39

Mude esta linha no seu arquivo sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

E então mova seu arquivo allowed_keys para / etc / ssh / your-username / allowed_keys

Esta postagem documenta outra maneira de resolver isso.

djhowell
fonte
1
Eu pensei que a primeira solução parecia perfeita, mas não funcionou para mim. Não sei por que. Mas a postagem que você vinculou funcionou muito bem. Obrigado!
21289 Josh
3
Josh - o usuário de destino é o proprietário desses arquivos e possui permissões 600 (700 para o dir)?
NVRAM
1
Veja este link para obter instruções completas: Chaves SSH no Ubuntu . Role para baixo até a seção de solução de problemas.
jjeaton
8

Esta solução foi inspirada neste post . IMHO é muito melhor do que modificar o seu / etc / ssh / sshd_config, pois 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
Marc-Antoine
fonte
3
Você pode fornecer uma declaração resumida do que isso realmente faz?
Mindless.panda
Eu fiz uma edição para explicar o que acontece: você economiza sua chave pública (s) com o qual você deseja acessar a máquina authorized_keysem /home/**.ecryptfs**/$USERsem criptografia e link para ele de você criptografada casa, bem como a sua casa sem criptografia. O novo .profileem sua casa não criptografada deve montar seu diretório pessoal criptografado, "cd" nele e obter o seu real .profile.
LiveWireBT
Funciona conforme o esperado em uma nova instalação 16.04. Poucas observações: a casa não criptografada não era gravável (o que faz sentido, você não deseja que os usuários subvertam tudo armazenando dados acidentalmente lá); portanto, altere as permissões temporariamente. Também é preciso fazer tudo isso no terminal, desconectado da GUI e do lightdm ou em qual DM que você está usando parou. ecryptfs-mount-privatesolicita a senha do usuário todas as vezes após o login bem-sucedido por meio de chaves públicas, a menos que você esteja logado na GUI. Minha edição substitui alguns ecos por um documento aqui, é menos repetitivo para digitar, não se confunda com isso.
LiveWireBT
2

Passei algum tempo brincando com isso, e a resposta é que é basicamente fundamentalmente impossível. Ele é possível configurar logins-chave pública autenticados-sem senha via ssh, para que você não tem que digitar sua senha para logar-se , mas isso não leva a lugar nenhum, porque a sua pasta pessoal ainda está criptografada.

O simples fato é que 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 ao servidor.

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


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

Ryan C. Thompson
fonte
Bem, a resposta de djhowell funcionou perfeitamente, de modo que, provavelmente, meu diretório pessoal está criptografado com uma chave que o sistema operacional possui e é capaz de usar para descriptografá-lo. Além disso, quando o SSH entra, o sshd não sabe como descriptografar o diretório doméstico, de modo que não explica por que ele funciona com a autenticação de senha.
21289 Josh
Espere, então, quando você efetua login via ssh sem digitar nenhuma senha, seu diretório pessoal criptografado é montado?
Ryan C. Thompson
Sim. E desmontado quando eu sair.
28289 Josh
Bem, isso é estranho. Eu recebo o comportamento que descrevo na minha resposta. Meu diretório particular só é montado se meu login envolver uma senha (especificamente, minha senha de login). Gostaria de saber o que você fez de diferente para fazê-lo funcionar com chaves públicas.
22919 Ryan C. Thompson
@Ryan Thompson você está usando o Ubuntu 9.10?
28289 Josh
1

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

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

Em resumo. Você coloca suas chaves na versão criptografada do usuário ~/.sshe vincula a versão criptografada ~/.sshao outro. Desta forma, está sempre lá.

Para as pessoas preguiçosas como eu, aqui está um script para fazer isso por você. Basta executá-lo como o usuário normal. Não é necessário acesso ou permissões raiz e não são necessárias alterações na configuração do servidor. Configurações normais do usuário puro.

#!/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
B. Davis
fonte
0

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

ecryptfs-mount-private

Leia o ~/README.txtarquivo depois de efetuar o login via SSH; você descobrirá que não possui 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. Veja o ssh-agent para uma maneira melhor.

Gaff
fonte