SSH z uprawnionymi kluczami do systemu Ubuntu z zaszyfrowanym katalogiem głównym?

38

Niedawno założyłem nowy serwer z Ubuntu karmic 9.10, a kiedy utworzyłem swój katalog domowy, postanowiłem go zaszyfrować. Teraz, po załadowaniu mojego pliku autoryzowanego_kluczy do ~ / .ssh, nie jest rozpoznawany, ponieważ mój katalog domowy nie jest odszyfrowywany aż do momentu zalogowania. Czy istnieje sposób, aby klucze SSH działały z zaszyfrowanymi katalogami domowymi w systemie Ubuntu?

Josh
źródło
Mile widziane sugestie lepszych tagów, nie można znaleźć naprawdę dobrych dopasowań w sugerowanych tagach.
Josh
1
myślę, że te są właściwie na miejscu. jest ubuntutag, ale nie sądzę, że ten problem dotyczy konkretnego systemu operacyjnego.
quack quixote
Objawem tego problemu dla mnie w Ubuntu 11.10 jest to, że pierwszą próbą ssh do komputera jest konieczność uwierzytelnienia hasłem (ponieważ authorized_keysnie jest jeszcze dostępne). Jeśli uruchomię inne połączenie ssh, uwierzytelnianie klucza działa.
mindless.panda

Odpowiedzi:

39

Zmień tę linię w pliku sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

A następnie przenieś plik uprawniony do kluczy / etc / ssh / twoja-nazwa użytkownika / uprawnione_ klucze

Ten post dokumentuje inny sposób rozwiązania tego problemu.

djhowell
źródło
1
Myślałem, że pierwsze rozwiązanie brzmi idealnie, ale dla mnie nie zadziałało. Nie pewny dlaczego. Ale post, do którego prowadziłeś link, działał świetnie. Dzięki!
Josh
3
Josh - czy użytkownik docelowy jest właścicielem tych plików i uprawnień 600 (700 dla katalogu)?
NVRAM,
1
Zobacz ten link, aby uzyskać pełne instrukcje: Klucze SSH w Ubuntu . Przewiń w dół do sekcji rozwiązywania problemów.
jjeaton
8

To rozwiązanie zostało zainspirowane tym postem . IMHO jest znacznie lepsze niż modyfikowanie / etc / ssh / sshd_config, ponieważ w ogóle nie wymaga dostępu do roota.

# 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
źródło
3
Czy możesz przedstawić podsumowanie tego, co to właściwie robi?
bezmyślna.
I zmienił się wyjaśnić, co się dzieje: zapisaniu klucza publicznego (S), z którym chcesz uzyskać dostęp do urządzenia, aby authorized_keysw /home/**.ecryptfs**/$USERbez szyfrowania i link do niej z domu zostały zaszyfrowane, a także swojej niezaszyfrowanej domu. Nowy .profilew twoim niezaszyfrowanym domu powinien zamontować zaszyfrowany katalog domowy, „cd” w nim i źródło prawdziwego .profile.
LiveWireBT,
Działa zgodnie z przeznaczeniem dla nowej instalacji 16.04. Kilka uwag: niezaszyfrowany dom nie był zapisywalny (co ma sens, nie chcesz, aby użytkownicy niweczyli wszystko przez przypadkowe zapisanie tam danych), więc tymczasowo zmień uprawnienia. Trzeba to wszystko zrobić z terminala, wylogowany z GUI i lightdm lub którykolwiek DM, którego używasz, został zatrzymany. ecryptfs-mount-privatepyta o hasło użytkownika za każdym razem po udanym logowaniu za pomocą kluczy publicznych, chyba że jesteś zalogowany do GUI. Moja edycja zastępuje kilka echa tutaj dokumentem, jest mniej powtarzalny w pisaniu, nie daj się zwieść.
LiveWireBT,
2

Właśnie spędziłem trochę czasu na tym zadaniu, a odpowiedź jest taka, że ​​jest to zasadniczo niemożliwe. Możliwe jest skonfigurowanie logowania bez uwierzytelniania za pomocą klucza publicznego za pomocą ssh, więc nie musisz wpisywać hasła, aby się zalogować , ale to cię nigdzie nie prowadzi, ponieważ twój katalog domowy jest nadal zaszyfrowany.

Prostym faktem jest to, że zaszyfrowany katalog domowy jest szyfrowany hasłem *, więc jedynym sposobem na jego odszyfrowanie jest hasło.

A jeśli myślisz, że teoretycznie powinno być możliwe użycie klucza ssh do odszyfrowania hasła montowania po zalogowaniu, to nie zadziała, ponieważ twój klucz prywatny nigdy nie jest wysyłany na serwer.

Zasadniczo, jeśli chcesz szyfrować, musisz użyć haseł. Z tego samego powodu zaszyfrowane katalogi domowe są niezgodne z logowaniem odcisków palców.


* Wiem, że jest to bardziej skomplikowane niż pojedyncze hasło, ale na razie zachowajmy prostotę.

Ryan C. Thompson
źródło
Cóż, odpowiedź djhowella działała idealnie, więc prawdopodobnie mój katalog domowy jest zaszyfrowany kluczem, który ma system operacyjny i jest w stanie go odszyfrować. Poza tym, gdy SSHing się włącza, sshd nie wie, jak odszyfrować mój katalog domowy, więc to nie wyjaśnia, dlaczego działa z uwierzytelnianiem za pomocą hasła.
Josh
Poczekaj, więc kiedy logujesz się przez ssh bez wpisywania haseł, twój zaszyfrowany katalog domowy faktycznie zostaje zamontowany?
Ryan C. Thompson
Tak. I podskoczyłem, kiedy się wylogowałem.
Josh
Cóż, to dziwne. Dostaję zachowanie, które opisuję w mojej odpowiedzi. Mój prywatny katalog jest montowany tylko wtedy, gdy mój login zawierał hasło (szczególnie moje hasło logowania). Zastanawiam się, co zrobiłeś inaczej, aby działało z kluczami publicznymi.
Ryan C. Thompson
@Ryan Thompson używasz Ubuntu 9.10?
Josh
1

Jeśli nie lubisz modyfikować domyślnej konfiguracji (nie lubię, moje pliki są tam, gdzie ich oczekuję), możesz rzucić okiem na mój post, jak to zrobić:

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

W skrócie. Umieszczasz klucze w zaszyfrowanej wersji użytkownika ~/.sshi łączysz zaszyfrowaną wersję z ~/.sshdrugą. W ten sposób zawsze tam jest.

Dla leniwych ludzi takich jak ja, oto skrypt, który zrobi to za Ciebie. Po prostu uruchom go jako zwykły użytkownik. Nie wymaga dostępu do uprawnień roota ani uprawnień i nie wymaga zmian konfiguracji serwera. Czyste, normalne ustawienia użytkownika.

#!/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
źródło
0

Możesz użyć bardziej bezpiecznego klucza publicznego, aby się zalogować, a następnie wykonaj następujące czynności, aby zamontować katalog po wpisaniu hasła:

ecryptfs-mount-private

Przeczytaj ~/README.txtplik po zalogowaniu przez SSH, okaże się, że nie masz swoich plików, ponieważ zaszyfrowany katalog nie jest podłączony.

I tak nie powinieneś używać kluczy publicznych bez hasła do logowania. Spójrz na ssh-agent dla lepszego sposobu.

Gafel
źródło