
Я хотел бы иметь возможность подключаться по SSH к своей машине, используя смарт-карту Gemalto .NET в качестве метода аутентификации. Как это можно сделать на машине Fedora 13 (или в стиле Red Hat)?
Вот примерные шаги, которые, по моему мнению, необходимы:
- Предоставление сертификата для смарт-карты (и, возможно, центра сертификации для его выпуска?)
- Получите сертификат на смарт-карту
- Настройте SSH-сервер для разрешения аутентификации с помощью смарт-карт и настройте его на использование определенного сертификата/CA.
- SSH-клиент с поддержкой смарт-карт (дополнительные баллы за бесплатный клиент на базе Windows)
решение1
Драйверы Gemalto теперь с открытым исходным кодом, я полагаю. У них есть исходный код на сайте.
Вам нужно будет настроить pam
модуль (я не уверен, как это сделать, но код, безусловно, есть). Я полагаю, что конфигурация pam
потребует сопоставления принципа сертификата с локальным идентификатором пользователя.
GDM, как я понимаю, теперь поддерживает смарт-карты, но я не уверен, как он это определяет. Я попробую поискать это позже (самый простой способ, вероятно, просто заглянуть в исходный gdm
код).
Конечно, все это требует pcscd
и libpcsclite
быть установленным. Вам также нужно будет скопировать libgtop11dotnet.so
в /usr/lib
.
Исходный код для компиляции libgtop11dotnet.so:https://github.com/AbigailBuccaneer/libgtop11dotnet
решение2
Я бы рекомендовал kerberos. MIT выпускает клиент и сервер krb5.
vwduder, могли бы вы порекомендовать считыватель смарт-карт и источник карт, соответствующих стандарту FIPS-201?
http://csrc.nist.gov/publications/fips/fips201-1/FIPS-201-1-chng1.pdf
У меня есть копия на моем собственном сервере, но я не настолько популярен на этом stacktrace в данный момент, чтобы поделиться ею с вами. Вышеуказанное лишь немного менее надежно, чем наши собственные серверы, так что вы, вероятно, сможете получить ее у них ;)
[править] Теперь я достаточно популярен!
решение3
При использовании ключей RSA 1) и 2) тривиальны, потому что, как мы увидим в 3), фактический сертификат не имеет значения в этом контексте. Просто зайдите на cacert.org или сгенерируйте самоподписанный сертификат, и все готово.
Для 3) вам нужно будет извлечь ваш открытый ключ и установить его в $HOME/.ssh/authorized_keys. Обратите внимание на владельца файла и разрешения! (700 для .ssh, 600 для authorized_keys). Аутентификация открытого ключа на уровне хоста не рекомендуется, но оставлена как упражнение для пытливых умов.
Что касается 4) вам следует обратить внимание на PuTTY SC (http://www.joebar.ch/puttysc/) или -предпочтительно- PuTTY-CAC (http://www.risacher.org/putty-cac/), который улучшает PuTTY SC за счет улучшенного алгоритма извлечения открытого ключа, а также включает поддержку Kerberos-GSSAPI из ветки разработки PuTTY.
решение4
Я сделал видео, демонстрирующее использование смарт-карты с сервером Linux с помощью PuttySC иSecureCRT. Посмотреть можно здесь:Как использовать SSH с помощью смарт-карты
Я не объясняю, как предоставить сертификат в карте, но если вы это сделаете, помните, что ключ администратора карты должен быть изменен с помощью Системы управления картами. Вам будет намного проще, если ваша компания предоставит вам смарт-карту, чтобы вам не пришлось беспокоиться об этой части.
После подготовки карты вам необходимо извлечь открытый ключ, а затем добавить его в ~/.sshd/authorized_key.
Для подключения к серверу можно использовать такие инструменты, как PuttySC или SecureCRT. Вам нужно будет получить библиотеку PSKC#11 для карты (либо от производителя смарт-карты, либо версию с открытым исходным кодом). Настройте инструмент SSH с библиотекой, он должен иметь возможность прочитать ее и найти сертификат.
При аутентификации инструмент запросит у вас PIN-код смарт-карты.