FreeSource: MaximTyurin/eToken

У нас есть Aladdin eToken Pro 32k от компании Aladdin и Debian GNU/Linux 4.0 Etch.

При работе с eToken Pro можно использовать один из двух

методов:

1. Работа через opensc и openct по стандарту PKCS#15

1. Работа через демон от Aladdin по их протоколу

Мы будем использовать PKCS#15.

Инициализация eToken

Сначала устанавливаем opensc и openct для

доступа к смарт-карте.

Список поддерживаемых карт можно посмотреть на

официальном сайте.

Сначала eToken нужно отформатировать и инициализировать в Windows. Это

нужно потому что драйвер от Aladdin и Open SC используют разные

структуры данных. Кроме того форматирование из Windows с помощью

программы от Aladdin форматирует весь eToken, а Open SC стирает только

структуру PKCS#15.

Поэтому если хочется использовать eToken в Windows и Linux

одновременно то сначала его нужно отформатировать и инициализировать в

Windows, а потом инициализировать в Linux с помощью Open SC.

Теперь вставляем eToken и смотрим определился ли он:

Запоминаем идентификатор ключа (0) – он нам в дальнейшем понадобится.

Теперь создадим структуру PKCS#15 на eToken

Если eToken не будет использоваться в Microsoft Windows то создаем

структуру PKCS#15 и форматируем токен.

вводим PIN для Secirity Officer (SO PIN) и PUK для Security Officer

(максимум 8 символов).

SO PIN будет нужен для создания профилей.

SO PUK будет нужен для разблокирования профилей.

Теперь создаем сертификат x509 в Tiny CA 2 (RSA 1024bit, SHA1 digest)

и экспортируем его в формате PKCS#12 вместе с ключом (ставим галочку

«Include Key (PEM)"). Не забываем отключить вставку в PKCS#12 сертификата CA.

Теперь создаем профиль на eToken:

вводим PIN, PUK и SO PIN

И заливаем сертификат:

Идентификатор по умолчанию – 45.

Если залился только один сертификат значит опция split-key не

сработала тогда смотрим для какого использования залился сертификат

Видно что сертификат используется для подписи, поэтому заливаем еще

раз и указываем использовать для расшифровки:

Если залился сертификат для расшифровки тогда заливаем с опцией

--key-usage sign.

И теперь смотрим ключи:

Видим что есть оба сертификата (подписи и расшифровки).

Теперь смотрим ID залитого сертификата:

Теперь нужно включить пользователей, авторизирующихся с помощью eToken

в группу scard:

Open SSH

Чтоб пользоваться ssh используя авторизацию по eToken нужно

пересобрать openssh.

Устанавливаем исходники:

Заходим в каталог debian и правим файл control:

1. Добавляем в Build-Depends libopensc2-dev

1. Добавляем в Recommends для openssh-client libopensc2 и opensc

Правим файл rules:

1. Добавляем в configure параметр --with-opensc=/usr

1. Убираем комментарий со строки:

Теперь нужно наложить патч из opensc

Устанавливаем исходники opensc:

Достаем патч ask-for-pin.diff из src/openssh и накладываем его на

openssh.

Без этого патча не будет работать запрос PIN в ssh.

Исходники opensc больше не понадобятся.

Теперь добавляем запись для changelog для openssh, собираем и устанавливаем

пакет.

После установки пакета можно пользоваться авторизацией по eToken в

ssh.

Сначала достанем из токена открытую часть ключа:

Теперь authorized_keys нужно закинуть на серверы в /.ssh/

После этого можно авторизоваться на сервере:

Авторизация в системе

Есть несколько модулей pam которые используют eToken для авторизации в

системе.

Начнем с самого простого.

pam_p11

Проект pam_p11 состоит из

двух простых модулей pam, даже не имеющих настроек:

1. pam_p11_opensc.so

1. pam_p11_openssh.so

Работают они одинаково и различаются только проверяемым сертификатом.

pam_p11_openssh.so проверяет пользователя по сертификатам в

/.ssh/authorized_keys

pam_p11_opensc.so проверяет пользователя по сертификатам в

/.eid/authorized_certificates

Модуль libpam-p11 версии 0.1.2 из Etch не будет работать с eToken.

Нужно сделать backport из Lenny версии 0.1.3.

Кроме того его надо пропатчить перед сборкой.

Вот патч:

Собираем пакет и устанавливаем его.

Теперь можно настроить авторизацию.

Для pam_p11_opensc нужные файлы создаются так:

Для pam_p11_openssh:

И теперь правим конфигурацию pam.

Например для su правим файл /etc/pam.d/su В начало файла после строки

добавляем строку

И теперь пользователи с eToken открытый ключ которых лежит в

/root/.ssh/authorized_keys могут запускать su и у них будет спрашивать

только PIN токена

При отсутствии токена авторизация будет проходить штатно.

И так для всех необходимых файлов в /etc/pam.d/