SSH avec des clés authorised_keys sur un système Ubuntu avec un répertoire personnel chiffré?

38

J'ai récemment configuré un nouveau serveur avec Ubuntu Karmic 9.10 et, lorsque j'ai créé mon répertoire personnel, j'ai choisi de le chiffrer. Maintenant, après le chargement de mon fichier allowed_keys dans ~ / .ssh, il n'est pas reconnu car mon répertoire personnel n'est décrypté qu'après ma connexion. Existe-t-il un moyen de faire en sorte que les clés SSH fonctionnent avec des répertoires personnels chiffrés sous Ubuntu?

Josh
la source
De meilleures suggestions de balises bienvenues, impossible de trouver de très bons correspondances dans les balises suggérées.
Josh
1
Je pense que ceux-ci sont sur place, en fait. il y a une ubuntubalise mais je ne pense pas que ce problème soit spécifique à un système d'exploitation particulier.
Quack Quichotte
Un symptôme de ce problème pour moi dans Ubuntu 11.10 est que la première tentative de ssh dans la machine est que l’authentification par mot de passe est requise (car elle authorized_keysn’est pas encore accessible). Si je lance une autre connexion ssh, l'authentification par clé fonctionne alors.
mindless.panda

Réponses:

39

Modifiez cette ligne dans votre fichier sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

Et déplacez ensuite votre fichier registered_keys vers / etc / ssh / votre-nom d'utilisateur / authorised_keys

Cet article documente une autre façon de résoudre ce problème.

djhowell
la source
1
Je pensais que la première solution semblait parfaite mais cela ne fonctionnait pas pour moi. Pas certain de pourquoi. Mais le poste que vous avez lié a très bien fonctionné. Merci!
Josh
3
Josh - l'utilisateur cible est-il propriétaire de ces fichiers et des autorisations 600 (700 pour le répertoire)?
NVRAM
1
Voir ce lien pour des instructions complètes: Clés SSH sur Ubuntu . Faites défiler jusqu'à la section de dépannage.
jjeaton
8

Cette solution a été inspirée par ce post . IMHO c'est bien mieux que de modifier votre / etc / ssh / sshd_config puisqu'il ne nécessite pas d'accès 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
la source
3
Pouvez-vous fournir un résumé de ce que cela fait réellement?
mindless.panda
J'ai fait une modification d'expliquer ce qui se passe: vous enregistrez votre clé publique (s) avec laquelle vous souhaitez accéder à la machine authorized_keysen /home/**.ecryptfs**/$USERsans cryptage et un lien vers de vous chiffré la maison ainsi que votre maison non crypté. Le nouveau .profiledans votre maison non cryptée doit monter votre répertoire personnel crypté, "cd" dans celui-ci et source de votre réel .profile.
LiveWireBT
Fonctionne comme prévu sur une nouvelle installation 16.04. Quelques remarques: la maison non chiffrée n’est pas accessible en écriture (ce qui est logique, vous ne voulez pas que les utilisateurs subvertissent tout en stockant accidentellement des données là-bas), alors modifiez les autorisations temporairement. De plus, tout cela doit être fait depuis le terminal, déconnecté de l'interface graphique et de lightdm ou quel que soit le DM que vous utilisez, arrêté. ecryptfs-mount-privatedemande à chaque fois le mot de passe de l'utilisateur après une connexion réussie via des clés publiques, sauf si vous êtes connecté à l'interface graphique. Mon édition remplace quelques échos par un document here, il est moins répétitif de taper, ne vous y trompez pas.
LiveWireBT
2

Je viens de passer un peu de temps à jouer avec cela, et la réponse est que c'est à peu près fondamentalement impossible. Il est possible de configurer des connexions avec ssh authentifiées par une clé publique authentifiée sans mot de passe. Vous n'avez donc pas besoin de saisir votre mot de passe pour vous connecter , mais cela ne vous mènera nulle part, car votre répertoire personnel est toujours chiffré.

Le fait est que votre répertoire personnel crypté est crypté avec un mot de passe *. Le seul moyen de le décrypter est donc avec ce mot de passe.

Et si vous pensez qu'en théorie, il devrait être possible d'utiliser votre clé ssh pour déchiffrer la phrase secrète de montage lors de la connexion, cela ne fonctionnera pas car votre clé privée n'est jamais du tout envoyée au serveur.

Donc, fondamentalement, si vous voulez un cryptage, vous devez utiliser des mots de passe. Les répertoires de départ cryptés sont incompatibles avec les connexions par empreinte digitale pour la même raison.


* Je sais que c'est plus compliqué qu'un seul mot de passe, mais restons simple pour l'instant.

Ryan C. Thompson
la source
Eh bien, la réponse de djhowell a parfaitement fonctionné, donc mon répertoire personnel est probablement chiffré avec une clé du système d'exploitation et peut être utilisé pour le déchiffrer. En outre, lorsque SSHing entre en jeu, sshd ne sait pas déchiffrer mon répertoire local, ce qui n’explique pas pourquoi cela fonctionne avec l’authentification par mot de passe.
Josh
Attendez, alors lorsque vous vous connectez via ssh sans saisir de mot de passe, votre répertoire personnel crypté est réellement monté?
Ryan C. Thompson
Oui. Et démonté quand je me déconnecte.
Josh
C'est étrange. Je reçois le comportement que je décris dans ma réponse. Mon répertoire privé n'est monté que si mon identifiant de connexion implique un mot de passe (en particulier mon identifiant). Je me demande ce que vous avez fait différemment pour le faire fonctionner avec des clés publiques.
Ryan C. Thompson Le
@ Ryan Thompson utilisez-vous Ubuntu 9.10?
Josh
1

Si vous n'aimez pas modifier la configuration par défaut (je n'aime pas, j'aime que mes fichiers soient là où je m'attendais), alors vous voudrez peut-être jeter un coup d'œil à mon article sur la façon de le faire:

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

En bref. Vous placez vos clés dans la version chiffrée de votre utilisateur ~/.sshet reliez la version chiffrée de façon symbolique ~/.ssh. De cette façon, c'est toujours là.

Pour les paresseux comme moi, voici un script à faire pour vous. Il suffit de l'exécuter en tant qu'utilisateur normal. Aucun accès root ou autorisations nécessaires et aucune modification de la configuration du serveur requise. Paramètres utilisateur normaux purs.

#!/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
la source
0

Vous pouvez utiliser la clé publique plus sécurisée pour vous connecter, puis exécuter les opérations suivantes pour monter votre répertoire après avoir saisi votre mot de passe:

ecryptfs-mount-private

Lisez le ~/README.txtfichier après vous être connecté via SSH. Vous constaterez que vous n’avez pas vos fichiers car le répertoire crypté n’est pas monté.

De toute façon, vous ne devriez pas utiliser de clé publique sans mot de passe pour vous connecter. Regardez ssh-agent pour une meilleure solution.

Gaffe
la source