SSH с авторизованными ключами к системе Ubuntu с зашифрованным homedir?

38

Недавно я установил новый сервер с Ubuntu karmic 9.10, и когда я создал свой домашний каталог, я решил сделать его зашифрованным. Теперь, после загрузки моего файла author_keys в ~ / .ssh, он не распознается, потому что мой домашний каталог не расшифровывается до тех пор, пока я не войду в систему. Есть ли способ заставить работать ключи SSH с зашифрованными домашними каталогами в Ubuntu?

мистифицировать
источник
Приветствуются лучшие предложения тегов, не удалось найти действительно хороших совпадений в предложенных тегах.
Джош
1
я думаю, что это на самом деле. есть ubuntuтег, но я не думаю, что эта проблема специфична для какой-либо конкретной ОС.
Квик-кихот
Симптом этой проблемы для меня в Ubuntu 11.10 заключается в том, что первая попытка подключиться к компьютеру по ssh заключается в том, что требуется аутентификация по паролю (поскольку authorized_keysона пока недоступна). Если я запускаю другое соединение ssh, аутентификация ключа тогда работает.
mindless.panda

Ответы:

39

Измените эту строку в вашем файле sshd_config:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

А затем переместите ваш файл author_keys в / etc / ssh / your-username / authorized_keys

Этот пост документирует другой способ решить эту проблему.

djhowell
источник
1
Я думал, что первое решение звучит идеально, но оно не работает для меня. Не уверен почему. Но пост, на который вы ссылались, работал отлично. Благодарность!
Джош
3
Джош - является ли целевой пользователь владельцем этих файлов и разрешений 600 (700 для каталога)?
NVRAM
1
Смотрите эту ссылку для получения подробных инструкций: SSH Keys на Ubuntu . Прокрутите вниз до раздела устранения неполадок.
jjeaton
8

Это решение было вдохновлено этим постом . ИМХО, это намного лучше, чем модифицировать ваш / etc / ssh / sshd_config, так как он вообще не требует 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
Можете ли вы дать краткое изложение того, что это на самом деле делает?
mindless.panda
Я сделал правку , чтобы объяснить , что происходит: вы сохраните открытого ключа (ами) , с которым вы хотите получить доступ к машине , чтобы authorized_keysв /home/**.ecryptfs**/$USERбез шифрования и ссылку на него от вас шифруются дома, а также ваш незашифрованном дома. Новое .profileв вашем незашифрованном доме должно монтировать ваш зашифрованный домашний каталог, «cd» в него и источник вашего реального .profile.
LiveWireBT
Работает, как и предполагалось, на новой установке 16.04. Несколько замечаний: незашифрованный дом был недоступен для записи (что имеет смысл, вы не хотите, чтобы пользователи подрывали все, случайно сохранив там данные), поэтому временно измените разрешения. Также нужно сделать все это из терминала, вышедшего из GUI и lightdm или из-за того, что когда-либо использованный DM останавливался. ecryptfs-mount-privateзапрашивает пароль пользователя каждый раз после успешного входа в систему с помощью открытых ключей, если вы не вошли в GUI. Мое редактирование заменяет несколько отголосков документом здесь, он менее повторяется для ввода, не смущайтесь этим.
LiveWireBT
2

Я просто потратил некоторое время, возиться с этим, и ответ в том, что это в значительной степени невозможно. Это есть возможность настроить беспарольные открытые ключи с проверкой подлинностью логинов через SSH, так что вам не придется вводить свой пароль для входа в системе , но это не уедет, потому что ваш домашний каталог еще зашифрован.

Простой факт заключается в том, что ваш зашифрованный домашний каталог зашифрован паролем *, поэтому единственный способ расшифровать его - использовать этот пароль.

И если вы думаете, что в теории должна быть возможность использовать ваш ключ ssh для расшифровки парольной фразы монтирования при входе в систему, это не сработает, потому что ваш закрытый ключ вообще никогда не отправляется на сервер.

В общем, если вы хотите шифрование, вы должны использовать пароли. Зашифрованные домашние каталоги несовместимы с логинами отпечатков пальцев по той же причине.


* Я знаю, что это сложнее, чем один пароль, но давайте пока будем проще.

Райан К. Томпсон
источник
Что ж, ответ djhowell сработал отлично, так что, предположительно, мой домашний каталог зашифрован ключом, который есть у ОС и может использовать для его расшифровки. Кроме того, когда SSHing входит, sshd не знает, как расшифровать мою домашнюю директорию, поэтому это не объясняет, почему он работает с аутентификацией по паролю.
Джош
Подождите, поэтому, когда вы входите через ssh без ввода каких-либо паролей, ваш зашифрованный домашний каталог фактически монтируется?
Райан С. Томпсон,
Да, это так. И размонтируется, когда я выхожу.
Джош
Ну, это странно. Я получаю поведение, которое я описываю в своем ответе. Мой личный каталог монтируется только в том случае, если мой логин содержит пароль (в частности, мой логин-пароль). Интересно, что вы сделали по-другому, чтобы заставить его работать с открытыми ключами.
Райан К. Томпсон,
@ Райан Томпсон вы используете Ubuntu 9.10?
Джош
1

Если вам не нравится изменять настройки по умолчанию (мне не нравится, мне нравятся мои файлы там, где я их ожидаю), вы можете взглянуть на мой пост о том, как это сделать:

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

Короче. Вы помещаете свои ключи в зашифрованную версию своего пользователя ~/.sshи указываете зашифрованную версию ~/.sshдругого пользователя. Так всегда есть.

Для таких ленивых, как я, вот сценарий, который сделает это за вас. Просто запустите его как обычный пользователь. Нет корневого доступа или разрешений, необходимых и никаких изменений конфигурации сервера не требуется. Чисто нормальные пользовательские настройки.

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

Вы можете использовать более безопасный открытый ключ для входа в систему, а затем выполнить следующую команду, чтобы смонтировать каталог после ввода пароля:

ecryptfs-mount-private

Прочитав ~/README.txtфайл после входа в систему через SSH, вы обнаружите, что у вас нет ваших файлов, потому что зашифрованный каталог не смонтирован.

Вы не должны использовать открытые ключи без пароля для входа в любом случае. Посмотрите на ssh-agent для лучшего способа.

багор
источник