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/