Данное решение не рекомендуется использовать для компьютеров в доменах.
Рекомендованные решения для компьютеров в доменах см. в статье Двухфакторная аутентификация в доменах.

Данная статья применима к:

  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7)
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
    с установленным обновлением БЮЛЛЕТЕНЬ № 20200327SE16 (оперативное обновление 5)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
    с установленным обновлением Бюллетень № 20201007SE16
  • Astra Linux Common Edition 2.12

При использовании решения pam_csp совместно с FreeIPA параметр доменной политики паролей "минимальный срок действия пароля" должен быть установлен в 0. Это можно сделать с помощью web-интерфейса администрирования FreeIPA ("Политика" — "Политики паролей") или из командной строки (требуется наличие Kerberos-билета администратора домена) командой:

ipa pwpolicy-mod --minlife=0

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

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

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

  • аутентификация пользователя с использование ключевого носителя;
  • изменение пользователем собственного пароля.

Модуль использует собственный формат данных для аутентификации, несовместимый с другими системами двухфакторной аутентификации. См. статьи:

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

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

  • Принимает по шине DBus сообщения о входе и выходе пользователей с использованием ключевого носителя, регистрируя пользовательские сессии и информацию об использованных для входа ключевых носителях. Сообщения о входе могут передаваться модулем pam_csp.
  • Осуществляет мониторинг подключений и отключений USB-устройств:
    • При отключении ключевого носителя блокирует сессии, для входа в которые были использован этот носитель. Для разблокировки сессии пользователь должен подключить ключевой носитель и ввести PIN-код, точно так же, как если бы он сам заблокировал сессию ("Пуск" — "Завершение работы" — "Блокировка") или как если бы сессия была заблокирована по отсутствию активности пользователя.
    • При подключении и отключении ключевых носителей выполняет на подключенных ключевых носителях поиск аутентификационных записей пользователей. В ранних версиях контролируются только токены. Начиная с csp_monitor версии 1.0.8+ci1 контролируется также подключение и отключение смарт-карт. Поиск выполняется в записях, используемых модулем pam-csp, и в сертификатах. В качестве имени пользователя используется значение CN (commonName) поля subj сертификата. Сертификаты, помеченные как сертификаты удостоверяющих центров (basicConstraints = CA:TRUE) игнорируются. Соответствие находящихся в ключевом носителе ключей и сертификатов не проверяется. Имена, которым не соответствуют данные в базе passwd, игнорируются. Обнаруженные имена пользователей сохраняются в файле /etc/X11/fly-dm/token. Далее этот файл может использоваться модулем входа (fly-dmgreet) для отображения списка возможных имен для входа. 

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

systemctl status csp-monitor

См. также: Включение отображения списка пользователей на экране входа.

Установка пакетов

Для подготовки ключевых носителей к использованию в качестве средства двухфакторной аутентификации требуется установить пакет libpam-csp.

Для выполнения двухфакторной аутентификации дополнительно требуется установить пакет libpam-scp и и пакет csp-monitor. Пакеты могут быть установлены с помощью графического менеджера пакетов или из командной строки командой:

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

При установке пакета libpam-csp устанавливается PAM-модуль pam_csp.so. Модуль регистрируется в цепочках PAM-модулей в следующих PAM-профилях:

  • /etc/pam.d/common-auth;
  • /etc/pam.d/common-password;
  • /etc/pam.d/common-session.

Подготовка ключевых носителей для передачи пользователям

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

  • пакет opensc-pkcs11 версии не ниже 0.19.0-1 (устанавливается автоматически при установке пакета libpam-csp или csp-moniror);
  • интерфейсные модули для используемых ключевых носителей (см. Ключевые носители (токены) PKCS в Astra Linux);
  • используемый интерфейсный модуль должен быть указан в файле 

Процедура подготовки одинакова для локальных и для доменных пользователей и состоит из следующих шагов:

  1. Инициализировать (очистить) ключевой носитель. Эта операция обязательна как для бывших в эксплуатации, так и для новых ключевых носителей.
  2. Создать базовую структуру данных (аналог форматирования дискового раздела в ОС).
  3. Создать по крайней мере одно защищенное хранилище данных (аналог пользовательского домашнего каталога). В отличие от обычных каталогов ОС доступ к хранилищу защищен паролем (PIN-кодом).
  4. Записать необходимую для аутентификации информацию в созданное хранилище данных.

Ключевые носители Рутокен

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

Ключевые носители Рутокен Lite

Последовательность команд:

pkcs15-init --erase-card
pkcs15-init --create-pkcs15 --so-pin <PIN_администратора> --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin <PIN_пользователя> --puk "" --so-pin <PIN_администратора> --finalize
pam_csp_ctl -c -u <имя_пользователя> -s <пароль_пользователя> -p <PIN_пользователя>

Ключевые носители Рутокен S

Последовательность команд:

pkcs15-init --erase-card
pkcs15-init --create-pkcs15 --so-pin <PIN_администратора> --pin <PIN_пользователя> --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin <PIN_пользователя> --puk "" --so-pin <PIN_администратора>
pam_csp_ctl -c -u <имя_пользователя> -s <пароль_пользователя> -p <PIN_пользователя>

Ключевые носители Рутокен ЭЦП

Для работы с ключевыми носителями Рутокен ЭЦП указать интерфейсный модуль в файле /etc/security/pam_csp.conf в секции [global] (если файл не существует,  то создать его):

[global]
pkcs11_module = librtpkcs11ecp.so

Для очистки (инициализации) ключевых носителей Рутокен ЭЦП следует использовать инструмент rtadmin, предоставляемый производителем. Инструмент и инструкции к нему доступны по ссылке: Утилита администрирования Рутокен (rtAdmin).

Инструмент rtadmin не работает с токенами Рутокен Lite/S. 

Пример команды очистки (rtadmin версии 3.1):

./rtadmin format --pin-change-policy both -r -l "LABEL" --new-so-pin "SO_PIN"

При работе с токенами Рутокен ЭЦП после выполнения первой команды требуется дождаться готовности токена к выполнению следующей команды. При этом, пока токен не готов, следующая команда будет завершаться ошибкой. Пример сценария с проверкой готовности:

pkcs15-init --erase-card -p rutoken_ecp
while ! pkcs15-init --create-pkcs15 --so-pin <PIN_администратора> --so-puk "" ; do echo Fail ; sleep 1 ; done
pkcs15-init --store-pin --so-pin <PIN_администратора> --pin <PIN_пользователя> --label "User PIN" --auth-id 02 --puk "" --finalize
pam_csp_ctl -c -u <имя_пользователя> -s <пароль_пользователя> -p <PIN_пользователя>

Ключевые носители Аладдин

Указать интерфейсный модуль в файле /etc/security/pam_csp.conf в секции [global] (если файл не существует,  то создать его):

[global]
pkcs11_module = libjcPKCS11-2.so

Для инициализации токенов Аладдин рекомендуется использовать предоставляемый производителем инструмент Единый клиент JaCarta.

Для токенов Аладдин JaCarta PKI после форматирования следует выполнить команды разметки:

pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --so-pin <PIN_администратора> --init-token --label 'JaCarta PKI Short'
pkcs11-tool --module /usr/lib/libjcPKCS11-2.so --so-pin <PIN_администратора> --init-pin --pin <PIN_пользователя>
Подготовку токенов Аладдин можно выполнить двумя командами:
pam_csp_ctl -e -p <PIN_пользователя>
pam_csp_ctl -c -u <имя_пользователя> -s <пароль_пользователя> -p <PIN_пользователя>

Проверка результатов подготовки ключевого носителя

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

pam_csp_ctl -l

Использование токенов для двухфакторной аутентификации

Подготовка компьютеров

  1. На компьютерах, на которых будет выполняться вход с использованием двухфакторной аутентификации:

    1. установить пакет libpam-csp:

      sudo apt install libpam-csp

    2. Установить интерфейсный модуль для используемых ключевых носителей и указать его в файле /etc/security/pam_csp.conf в секции [global] (если файл не существует,  то создать его).
    3. Если требуется принудительная смена пользовательского пароля при первом входе, то установить срок его действия истекшим:
      1. Для локальных пользователей команда должна быть выполнена непосредственно на компьютере, на котором будет выполняться вход (можно использовать уделенную сессию SSH):

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

  2. Передать пользователю токен и пользовательский PIN-код.

Действия пользователя

Вход в сессию

Действия пользователя:

  1. Подключить токен.
  2. При входе указать свой логин.

  3. В ответ на дополнительное приглашение:

    Введите ПИН-код:

    ввести сообщенный ему PIN-код.
    В зависимости от настроек языка приглашение может выглядеть как "Supply token PIN:".

Смена пароля

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

  1. Войти в систему. Допускается вход как с использованием, так и без использования токена.

  2. Подключить токен, если он не был подключен ранее.

  3. Выполнить команду:

    passwd

  4. В ответ на приглашение ввести и подтвердить PIN-код.
  5. Ввести и подтвердить новый пароль.

Самостоятельная смена PIN-кода пользователем

pkcs11-tool --change-pin --module /usr/lib/libjcPKCS11-2.so --pin <старый_PIN-код> --new-pin <новый_PIN-код>
Если PIN-коды не заданы опциями команды, то они будут запрошены в интерактивном режиме.

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

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

  1. Подключить токен.
  2. Выполнить команду:

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

  3. В ответ на приглашение ввести PIN-код пользователя.

  4. Ввести и подтвердить новый пароль пользователя.

  • No labels