Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Введение
В данной инструкции описывается, как настроить модуль pam_pkcs11
для работы с библиотекой librtpkcs11ecp.so
.
Стенд
В качестве дистрибутива использовалась ALT Linux 6.0.2.
Нам понадобится токен
...
или смарт-карта
...
семейства Рутокен ЭЦП, отформатированные через Панель управления Рутокен.
Настройки для токена и смарт-карты идентичны.
Проверка модели токена
- Подключите USB-токен к компьютеру.
...
- Для определения названия модели USB-токена откройте Терминал и введите команду:
$ lsusb
В результате в окне Терминала отобразится название модели USB-токена:
Image Added
Убедитесь, что используете: Aktiv Rutoken ECP
Если вы используете смарт-карту Рутокен, то проверку проходить не требуется.
Общий порядок действий
1 Устанавливаем необходимые пакеты и их зависимости:
Для этого вы можете воспользоваться Терминалом:
Code Block | ||
---|---|---|
|
...
$ sudo apt-get install opensc pam_pkcs11 pcsc-lite-ccid openssl-engine_pkcs11 |
Или из меню
...
запустить Приложения - Системные - Программа управления пакетами Synaptic и используя быстрый поиск выбрать для установки пакеты:
- opensc,
- pam_pkcs11,
- pcsc-lite-
...
- ccid,
- openssl-engine_pkcs11.
2 Скачиваем и устанавливаем пакет для вашей системы
- Библиотека rtPKCS11ecp для GNU/Linux RPM 32-bit (x86)
- Библиотека rtPKCS11ecp для GNU/Linux RPM 64-bit (x86_64)
Если установка завершилась корректно, то в папке /usr/lib (или /usr/lib64) появится библиотека librtpkcs11ecp.so.
3 Проверяем работу токена или смарт-карты
Подключаем токен или смарт-карту к компьютеру. Запускаем dmesg и убедимся в том, что устройство опредилось корректно.
Image Added
Для 32-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp. |
...
so -T |
Для 64-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -T |
4 Создаем ключевую пару
Note |
---|
Если у вас уже имеется выписанная на токен ключевая пара RSA с привязанным к ней сертификатом, то вы можете использовать их для аутентификации. Рекомендуемая длина ключа RSA - не ниже 2048 бит. Действуйте по основной инструкции, пропустив шаги 4-8. |
Image Removed
...
Внимание! При выполнении команды запрашивается PIN-код пользователя. Генерация ключевой пары может занять некоторое время.
Для 32-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45 |
Для 64-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45 |
...
Image Added
Утилита pkcs11-tool
входит в состав opensc
.
Параметры, задаваемые в этой строке:
--module <arg> | путь к библиотеке pkcs11 (обязательный параметр) |
| генерация ключевой пары |
-- key-type <arg> | задает тип и длину ключа. В нашем случае тип – rsa, длина - 2048 бит (с длиной ключа 1024 бит возникают проблемы) |
-l | запрос PIN-кода токена до каких-либо операций с ним (обязательный параметр) |
--id <arg> | определяет id создаваемого объекта (понадобится при создании сертификата) |
5 Создаем сертификат в формате PEM
Запускаем openssl
и подгружаем модуль поддержки pkcs11:
Для 32-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ openssl OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/openssl/engines/libpkcs11_gost.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so |
Для 64-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ openssl OpenSSL> engine |
...
dynamic -pre SO_PATH:/usr/lib64/openssl/engines/libpkcs11_gost.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/ |
...
lib64/librtpkcs11ecp.so |
...
Image Added
Создаем сертификат в PEM-формате. Внимание! При выполнении этой команды запрашивается PIN-код пользователя.
Code Block | ||
---|---|---|
| ||
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.pem -text |
...
Image Added
Здесь:
-key | указывает закрытый ключ (в нашем случае 0:45 – слот:ID ключа) |
| выдает самоподписанный сертификат |
6 Конвертируем сертификат из формата PEM в формат CRT
Code Block | ||
---|---|---|
| ||
OpenSSL> x509 -in cert.pem -out cert.crt -outform DER |
7 Сохраняем сертификат на аутентифицирующий носитель
Закрываем openssl (используя команду exit).
Cохраняем сертификат CRT на Рутокен. Внимание! При выполнении этой команды запрашивается PIN-код пользователя.
Для 32-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45 |
Для 64-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45 |
...
Image Added
Здесь:
-y <arg> | тип объекта (может быть cert, privkey, pubkey, data) |
| записать объект на токен |
8 Проверяем, что на токене есть всё, что необходимо
Внимание! При выполнении команды запрашивается PIN-код пользователя.
Для 32-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O -l |
Для 64-битной версии используйте команду:
Code Block | ||
---|---|---|
| ||
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -O -l |
9 Создаем файлы конфигурации pam_pkcs11
Воспольуемся примерами, которые предоставляют разработчики pam_pkcs11.
Потребуются права суперпользователя:
Code Block | ||
---|---|---|
| ||
$ su Password: # |
Для ALT Lixnux верси 6.0 и 7.0 используйте команду:
Code Block | ||
---|---|---|
| ||
# cp /usr/share/pam_pkcs11/pam_pkcs11.conf.example /etc/security/pam_pkcs11/pam_pkcs11.conf |
...
# cp /usr/share/pam_pkcs11/subject_mapping.example /etc/security/pam_pkcs11/subject_mapping |
Для ALT Lixnux верси 8 используйте команду:
Code Block | ||
---|---|---|
| ||
# cp /usr/share/doc/pam_pkcs11/pam_pkcs11.conf.example /etc/security/pam_pkcs11/pam_pkcs11.conf # cp /usr/share/doc/pam_pkcs11/subject_mapping.example /etc/security/pam_pkcs11/subject_mapping |
на вопрос о переписывании файла следует ответить "y"
10 Включаем аутентификацию по
...
внешнему носителю
Code Block | ||
---|---|---|
|
...
# rm /etc/pam.d/system-auth |
...
# ln -s /etc/pam.d/system-auth-pkcs11 /etc/pam.d/system-auth |
на вопрос об удалении ссылки следует ответить "y"
11 Редактируем конфигурацию аутентификации в системе
Отредактируем вторую строчку файла конфигурации /etc/pam.d/system-auth.
Внимание, приведенная ниже конфигурация является примером, а не эталоном настройки системы.
Для редактирования можно воспользоваться редактором mcedit
Code Block | ||
---|---|---|
| ||
# mcedit /etc/pam.d/system-auth |
Для 32-битной версии используйте строку:
Code Block | ||
---|---|---|
| ||
auth [success=1 default=ignore] pam_pkcs11.so pkcs11_module=/usr/lib/librtpkcs11ecp.so |
Для 64-битной версии используйте строку:
Code Block | ||
---|---|---|
| ||
auth [success=1 default=ignore] pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so |
12 Редактируем конфигурацию pam_pkcs11
Отредактируем файл /etc/security/pam_pkcs11/pam_pkcs11.conf
...
Внимание, приведенная ниже конфигурация является примером, а не эталоном настройки системы.
Для редактирования можно воспользоваться редактором mcedit
Code Block | ||
---|---|---|
| ||
# mcedit /etc/security/pam_pkcs11/pam_pkcs11.conf |
Для 32-битной версии используйте:
Code Block | ||
---|---|---|
| ||
pam_pkcs11 { nullok = false; debug = false; use_first_pass = false; use_authtok = false; card_only = false; wait_for_card = false; use_pkcs11_module = |
...
rutokenecp; # Aktiv |
...
Rutoken ECP pkcs11_module |
...
rutokenecp { module = /usr/lib/librtpkcs11ecp. |
...
so slot_num = 0; support_thread = true; ca_dir = /etc/pam_pkcs11/cacerts; crl_dir = /etc/pam_pkcs11/crls; cert_policy = signature; } use_mappers = subject; mapper_search_path = /lib/pam_pkcs11; mapper subject { debug = false; module = internal; ignorecase = false; mapfile = file:///etc/security/pam_pkcs11/subject_mapping; } } |
Для 64-битной версии замените строку
module = /usr/lib/librtpkcs11ecp.so на строку module = /usr/lib64/librtpkcs11ecp.so
и строку
mapper_search_path = /lib/pam_pkcs11; на строку mapper_search_path = /lib64/pam_pkcs11;
13 Добавляем связку сертификата на токене с пользователем системы ALT Linux.
Для этого выполняем команду
...
pkcs11_inspect
Code Block | ||
---|---|---|
|
...
# pkcs11_inspect |
...
Image Removed
...
> /etc/security/pam_pkcs11/subject_mapping |
Используя текстовый редактор закомментируем или удаляем ненужные строчки
Для этого можно использовать редактор mcedit
Code Block | ||
---|---|---|
| ||
# mcedit /etc/security/pam_pkcs11/subject_mapping |
...
Code Block | ||
---|---|---|
| ||
# |
...
Printing |
...
data for |
...
mapper subject: /C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=Aktiv/CN=alt/emailAddress=alt@mail.ru -> alt |
Внимание! Вместо alt нужно установить имя пользователя в вашей системе
Если вы не знаете имя пользователя запустите команду whoami (без прав суперпользователя)
Code Block | ||
---|---|---|
| ||
$ whoami |
14 Проверям выполненные настройки
Проверьте, что настройка была выполнена верно, используя команду login. Не завершайте свою сессию, пока не убедитесь в том, что все работает корректно.
Если команда login выполняется успешно, то вы можете завершать свою сессию и использовать аутентификацию по токенам и смарт-картам Rutoken.
Image Modified
В случае возникновения ошибок еще раз проверьте все настройки. Для выявления проблемы вы так же можете включить вывод дополнительной информации при аутетификации.
Для этого:
- В файле pam_pkcs11.conf исправьте все строки вида "debug = false;", на строки "debug = true;".
- В конец второй строки файла конфигурации /etc/pam.d/system-auth добавьте слово "debug".
Не забудьте отключить вывод дополнительной инфомации после настройки системы.
15 Настройка звершена!
На этом настройка закончена. После перезапуска ОС окно входа в систему будет выглядеть так:
Image Modified
...
Приложение: настройка аутентификации с имеющимся сертификатом
16 Другие пользователи
При необходимости добавить вход по токену для других пользователей следует:
1) Настроить другие токены аналогичным образом. Это рекомендуемый способ, так как политика "один токен - один пользователь", является предпочтительной.
2) Выписать другую пару ключей и сертификат на тот же токен. (иногда бывает удобно для периодической работы из под суперпользователя)
В обоих случаях в файле subject_mapping должно оказаться две (или несколько) записей
Если у вас уже имеется выписанная на токен ключевая пара RSA с привязанным к ней сертификатом, то вы можете использовать их для аутентификации.
Рекомендуемая длина ключа RSA - не ниже 2048 бит.
Действуйте по основной инструкции, пропустив шаги 4-8.
...