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

12668
Josh

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

38
Приветствуются лучшие предложения тегов, не удалось найти действительно хороших совпадений в предложенных тегах. Josh 14 лет назад 0
Я думаю, что это на самом деле. есть тег `ubuntu`, но я не думаю, что эта проблема специфична для какой-либо конкретной ОС. quack quixote 14 лет назад 1
Симптом этой проблемы для меня в Ubuntu 11.10 заключается в том, что первая попытка подключиться к компьютеру по ssh заключается в том, что требуется аутентификация по паролю (так как `authorized_keys` еще не доступен). Если я запускаю другое ssh-соединение, тогда аутентификация по ключу работает. mindless.panda 12 лет назад 0

5 ответов на вопрос

39
djhowell

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

AuthorizedKeysFile /etc/ssh/%u/authorized_keys 

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

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

Я думал, что первое решение звучит идеально, но оно не работает для меня. Не уверен почему. Но пост, на который вы ссылались, работал отлично. Спасибо! Josh 14 лет назад 1
Джош - является ли целевой пользователь владельцем этих файлов и разрешений 600 (700 для каталога)? NVRAM 14 лет назад 3
Смотрите эту ссылку для получения подробных инструкций: [Ключи SSH в Ubuntu] (https://help.ubuntu.com/community/SSH/OpenSSH/Keys). Прокрутите вниз до раздела устранения неполадок. jjeaton 12 лет назад 1
8
Marc-Antoine

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

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

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

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

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


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

Что ж, ответ djhowell сработал отлично, так что, предположительно, мой домашний каталог зашифрован ключом, который есть у ОС, и может использовать его для расшифровки. Кроме того, когда SSHing входит, sshd не знает, как расшифровать мою домашнюю директорию, поэтому это не объясняет, почему он работает с аутентификацией по паролю. Josh 14 лет назад 0
Подождите, поэтому, когда вы входите через ssh без ввода каких-либо паролей, ваш зашифрованный домашний каталог фактически монтируется? Ryan Thompson 14 лет назад 0
Да, это так. И размонтируется, когда я выхожу из системы. Josh 14 лет назад 0
Ну, это странно. Я получаю поведение, которое я описываю в своем ответе. Мой личный каталог монтируется только в том случае, если мой логин содержит пароль (в частности, мой логин-пароль). Интересно, что вы сделали по-другому, чтобы заставить его работать с открытыми ключами. Ryan Thompson 14 лет назад 0
@ Райан Томпсон вы используете Ubuntu 9.10? Josh 14 лет назад 0
Да я. Ubuntu Jaunty. Это сломано в Jaunty или что-то? Ссылка на сайт? Ryan Thompson 14 лет назад 0
@ Джош, я знаю, что это старый комментарий, но любопытно, если ты все еще находишь это работает? Ubuntu закрыл ошибку «Не исправить», как это описал Райан. Достойный обходной путь (в зависимости от чувствительности безопасности) - удалить .ecryptfs / auto-umount, так что вам нужно только один раз вручную смонтировать каталог. https://bugs.launchpad.net/ecryptfs/+bug/367804 Jeremy 12 лет назад 0
Я не уверен, @ Джереми ... Я обновил свои серверы Ubuntu, не возвращался к этому вопросу некоторое время. Мне нужно сделать несколько тестов ... Josh 12 лет назад 0
В Ubuntu 14.04 теперь я могу использовать открытый / закрытый ключи для аутентификации с использованием SSH с зашифрованным домашним каталогом. Но после успешной аутентификации я все еще получаю приглашение с моим паролем для входа в систему, иначе мой зашифрованный дом не будет подключен. То, что вы сказали, выглядит правильно для меня Райан! Это поведение, которое мне нравится для моего обычного пользователя, но я не могу использовать зашифрованную домашнюю папку для Ansible, кажется (все еще ищу решение). Huygens 8 лет назад 0
1
B. Davis

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

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
3498DB

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

ecryptfs-mount-private 

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

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

Похожие вопросы