SSH con claves_autorizadas a un sistema Ubuntu con homedir encriptado?

38

Recientemente configuré un nuevo servidor con Ubuntu karmic 9.10, y cuando creé mi directorio de inicio elegí hacerlo encriptado. Ahora, después de cargar mi archivo autorizado_keys en ~ / .ssh, no se reconoce porque mi directorio de inicio no se descifra hasta después de iniciar sesión. ¿Hay alguna manera de hacer que las claves SSH funcionen con directorios de inicio cifrados en Ubuntu?

Josh
fuente
Se aceptaron mejores sugerencias de etiquetas, no se pudieron encontrar coincidencias realmente buenas en las etiquetas sugeridas.
Josh el
1
Creo que esos son acertados, en realidad. hay una ubuntuetiqueta, pero no creo que este problema sea específico de ningún sistema operativo en particular.
quack quijote
Un síntoma de este problema para mí en Ubuntu 11.10 es que el primer intento de ssh en la máquina es que se requiere autenticación de contraseña (ya que authorized_keysaún no está accesible). Si inicio otra conexión ssh, la autenticación de clave funciona.
mindless.panda

Respuestas:

39

Cambie esta línea en su archivo sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

Y luego mueva su archivo autorizado_claves a / etc / ssh / su-nombre de usuario / autorizado_claves

Esta publicación documenta otra forma de resolver esto.

djhowell
fuente
1
Pensé que la primera solución sonaba perfecta, pero no funcionó para mí. No estoy seguro de por qué. Pero la publicación que vinculaste funcionó muy bien. ¡Gracias!
Josh
3
Josh: ¿es el usuario objetivo el propietario de esos archivos y los permisos 600 (700 para el directorio)?
NVRAM el
1
Consulte este enlace para obtener instrucciones completas: SSH Keys en Ubuntu . Desplácese hacia abajo hasta la sección de solución de problemas.
jjeaton
8

Esta solución fue inspirada por esta publicación . En mi humilde opinión, es mucho mejor que modificar su / etc / ssh / sshd_config ya que no requiere acceso root en absoluto.

# 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
fuente
3
¿Puede proporcionar una declaración resumida de lo que esto realmente hace?
mindless.panda
Hice una edición para explicar lo que sucede: guardar su clave pública (s) con los que desea acceder a la máquina authorized_keysen /home/**.ecryptfs**/$USERsin cifrado y enlazar con él desde cifró el hogar, así como su casa sin cifrar. Lo nuevo .profileen su hogar no encriptado debe montar su directorio de inicio encriptado, "cd" en él y obtener su fuente real .profile.
LiveWireBT
Funciona según lo previsto en una nueva instalación de 16.04. Pocos comentarios: el hogar no encriptado no se podía escribir (lo cual tiene sentido, no desea que los usuarios subviertan todo almacenando accidentalmente datos allí), así que cambie los permisos temporalmente. También uno tiene que hacer todo esto desde la terminal, desconectado de la GUI y lightdm o cualquier DM que esté utilizando detenido. ecryptfs-mount-privatesolicita la contraseña de usuario cada vez que se inicia sesión correctamente mediante claves públicas, a menos que haya iniciado sesión en la GUI. Mi edición reemplaza algunos ecos con un documento aquí, es menos repetitivo para escribir, no se confunda con eso.
LiveWireBT
2

Acabo de pasar un tiempo jugando con esto, y la respuesta es que es básicamente fundamentalmente imposible. Que es posible establecer inicios de sesión sin contraseña autentificados de clave pública a través de SSH, por lo que no tiene que escribir su contraseña para entrar , pero eso no lleva a ninguna parte, debido a su directorio principal todavía está cifrada.

El simple hecho es que su directorio de inicio encriptado está encriptado con una contraseña *, por lo que la única forma de descifrarlo es con esa contraseña.

Y si está pensando que, en teoría, debería ser posible usar su clave ssh para descifrar la frase de contraseña de montaje al iniciar sesión, eso no funcionará porque su clave privada nunca se envía al servidor.

Básicamente, si quieres encriptar, debes usar contraseñas. Los directorios principales cifrados son incompatibles con los inicios de sesión de huellas digitales por el mismo motivo.


* Sé que es más complicado que una sola contraseña, pero hagámoslo simple por ahora.

Ryan C. Thompson
fuente
Bueno, la respuesta de djhowell funcionó perfectamente, así que presumiblemente mi directorio de inicio está encriptado con una clave que el sistema operativo tiene y puede usar para descifrarlo. Además, cuando SSHing entra, sshd no sabe cómo descifrar mi directorio de inicio, por lo que eso no explica por qué funciona con autenticación de contraseña.
Josh el
Espera, ¿entonces cuando inicias sesión a través de ssh sin escribir ninguna contraseña, tu directorio de inicio encriptado realmente se monta?
Ryan C. Thompson
Si lo hace. Y desmontado cuando me desconecto.
Josh el
Bueno, eso es raro. Me sale el comportamiento que describo en mi respuesta. Mi directorio privado solo se monta si mi inicio de sesión implica una contraseña (específicamente, mi contraseña de inicio de sesión). Me pregunto qué hiciste de manera diferente para que funcione con claves públicas.
Ryan C. Thompson
@ Ryan Thompson, ¿estás usando Ubuntu 9.10?
Josh el
1

Si no le gusta modificar la configuración predeterminada (no lo hago, me gusta que mis archivos estén donde espero que estén), entonces puede echarle un vistazo a mi publicación sobre cómo hacerlo:

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

En breve. Pones tus claves en la versión encriptada de tu usuario ~/.sshy enlazas simbólicamente la versión encriptada ~/.ssha la otra. De esta manera siempre está ahí.

Para la gente perezosa como yo, aquí hay un guión para hacerlo por usted. Simplemente ejecútelo como el usuario normal. No se necesitan permisos ni acceso root y no se requieren cambios en la configuración del servidor. Configuración de usuario normal pura.

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

Puede usar la clave pública más segura para iniciar sesión y luego ejecutar lo siguiente para montar su directorio después de escribir su contraseña:

ecryptfs-mount-private

Lea el ~/README.txtarchivo después de iniciar sesión a través de SSH, encontrará que no tiene sus archivos porque el directorio encriptado no está montado.

No debe utilizar claves públicas sin contraseña para iniciar sesión de todos modos. Mira ssh-agent para una mejor manera.

Garfio
fuente