Двухфакторная аутентификация: libpam-csp и csp-monitor в Astra Linux (Астра Линукс)

#1 2022.06.06 14:30:41

0

Архитектура системы

Аутентификация пользователей (pam-csp)

Двухфакторная аутентификация с использованием так называемых "токенов" (USB-ключей, криптографических ключей) реализована в виде стандартного PAM-модуля libpam-csp, обрабатывающего два события:
- аутентификация пользователя;
- смена пользовательского пароля.

Для доступа к токенам используется стандартная библиотека opensc-pkcs11, позволяющая модулю libpam-csp работать с любыми поддерживающими эту библиотеку токенами различных производителей.

Контроль пользовательской сессии (csp-monitor)

Для контроля за ходом пользовательской сессии используется сервис csp-monitor.

Этот сервис принимает от pam_csp по шине DBus сообщения о входе (и выходе) пользователя с использованием токена и поддерживает список текущих пользовательских сессий с информацией об использованных для входа токенах.

Сервис осуществляет мониторинг подключений и отключений USB устройств и, в случае если какой-либо токен из числа участвующих в пользовательской аутентификации был вынут, блокирует все сессии этого пользователя. Для дальнейшей разблокировки сессии пользователь должен подключить токен и ввести PIN-код, точно так же, как если бы пользователь выбрал команды меню "Завершение работы" и затем "Блокировка" (или как если бы сессия была заблокирована по неактивности пользователя).

Сервис управляется как обычный systemd юнит:

systemctl status csp-monitor

На данный момент сервис не имеет параметров.

Для взаимодействия с токенами сервис также использует стандартную библиотеку opensc-pkcs11.


Подготовка к работе клиентской машины

Модуль libpam-csp входит в состав пакета libpam-csp и может быть установлен с помощью графического менеджера пакетов или из командной строки командой:

sudo apt install libpam-csp csp-monitor

При работе в Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20210611SE16 (оперативное обновление 7) и последующими оперативными обновлениями пакет csp-monitor будет автоматически установлен при установке пакета libpam-csp.

При инсталляции пакета модуль pam_csp регистрируется в цепочках pam-модулей в следующих PAM-профилях:
/etc/pam.d/common-auth
/etc/pam.d/common-password
/etc/pam.d/common-session



Инициализация токенов

 AstraLinux писал(а) 
Данная процедура одинакова как для локальных так и для доменных пользователей.


Операции по подготовке токенов выполняются на компьютере ответственного за подготовку токенов администратора перед передачей токенов пользователям . Для выполнения операций на этом компьютере должны быть установлены пакеты:

- opensc-pkcs11 версии не ниже 0.19.0-1;
- ifd-rutokens версии не ниже 1.0.4 (для Rutoken S и Rutoken ECP) (доступен по ссылке https://www.rutoken.ru/support/download/get/rtDrivers-x64-deb.html);
- или, возможно, иные специфичные для производителя используемой модели токена интерфейсные модули (в терминологии стандарта PCSC - Interface Device Handler).

Установить пакет opensc-pkcs11 можно командой:

sudo apt install opensc-pkcs11

Установка интерфейсных модулей выполняется в соответствии с инструкциями производителей соответствующих токенов.

Процедура инициализации обычно зависит от используемой модели токена.

Для токенов Rutoken процедура следующая:

Инициализировать токен:

Для Rutoken S:

pkcs15-init --erase-card
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk "" --pin "12345678"
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk ""


Для Rutoken ECP:

pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize


Проверить, что токен успешно инициализирован, можно с помощью команды:

pkcs15-tool -D


Использование токена

Установить пакет libpam-csp:

sudo apt install libpam-csp

Задать команду принудительной смены пароля:
Для локальных пользователей на компьютере пользователя:

sudo passwd --expire <имя_пользователя>

Для доменных пользователей необходимо использовать соответствующие инструменты администрирования домена.

Сообщить пользователю текущий PIN токена.

Далее пользователь пред входом в свою сессию подключает токен и, как обычно при входе, указывает свои логин и пароль, и в ответ на дополнительное приглашение

Supply token PIN:

пользователь вводит сообщенный ему PIN.

Если PIN введён правильно, то пользователь получает приглашения ввести и подтвердить свой личный PIN:

Supply new token PIN:
Retype new token PIN:


При этом можно указать новый PIN, а можно два раза нажать <Enter>, чтобы оставить существующий. После этого произойдет генерация нового случайного пароля, его назначение пользовательской учётной записи и вход в систему. Теперь в токене будет храниться 16-символьный пароль, недоступный без знания PIN-а.

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

login: user
Supply token PIN:


При необходимости пользователь может сам сменить себе пароль. Для этого ему нужно будет войти в систему, а затем:

При первом входе - подключить токен и выполнить команду passwd. При этом потребуется ввести текущий клавиатурный пароль:

passwd
Введите ПИН-код :
Введите текущий пароль :
Введите новый ПИН-код :
Введите новый ПИН-код ещё раз :


При последующих входах команду passwd следует выполнять при подключенном токене. При этом пароль запрашиваться уже не будет:

passwd
Введите ПИН-код :
Введите новый ПИН-код :
Введите новый ПИН-код ещё раз :


Для локального пользователя администратор может подготовить токен со сгенерированным паролем заранее. Для этого следует подключить токен и выполнить команду:

sudo passwd <имя_пользователя>
Введите ПИН-код :
Введите новый ПИН-код :
Введите новый ПИН-код ещё раз :
ПИН-код успешно изменён.
passwd: пароль успешно изменен