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?


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.


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

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.


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 <bdavis@enetworkservices.net>

# 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

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.