Данная статья – небольшая заметка по результатам исследования способов реализации двухфакторной аутентификации в ОС Astra Linux Special Edition (очередные обновления 1.7 и 1.8) с применением штатных средств ОС.
В качестве небольшого отступления стоит сказать, что вместо "двухфакторной аутентификации" было бы правильнее использовать понятие "многофакторная аутентификация", так как именно данный термин устанавливается ГОСТ Р 58833-2020 "Защита информации. Идентификация и аутентификация. Общие положения".
В Astra Linux имеется несколько модулей, позволяющих реализовать MFA, в том числе аутентификацию как по паролю, так и по сертификату. Далее приведем сравнительный анализ соответствующих PAM-модулей согласно документации (все модули доступны в составе основного репозитория).
| Модуль | Пакет | Комментарий | Возможность блокировки пользовательской сессии при отключении ключевого носителя |
|---|---|---|---|
| pam_csp | libpam_csp | Модуль аутентификации по паролю, сохраненному в токене. Для доступа к сохраненному паролю используется PIN-код. Допускает использование пассивных токенов. | Только при условии использования csp-monitor. Начиная с csp-moniror версии 1.0.8+ci1 — для токенов и смарт-карт, в более ранних версиях — только для токенов. |
| pam_p11 | libpam-p11 | Модуль аутентификации по сертификату. Проверка сертификата выполняется с помощью неизвлекаемого ключа. Требует использования активного токена. | Нет. |
| pam_pkcs11 | libpam_pkcs11 | Универсальный модуль аутентификации. Возможна настройка разных способов проверки, в том числе без использования токенов (LDAP). | Да. |
| pam_sss | pam_sss | Универсальный модуль аутентификации в домене службы sssd. Поддерживает аутентификацию с использованием ключевых носителей. | Нет. |
Использовать аутентификацию по сертификату (или ключу) целесообразно при наличии в инфраструктуре предприятия собственного PKI. В простейшем же случае для локальных пользователей возможна настройка аутентификации по паролю, сохраненному на токене (модуль pam_csp): для прохождения аутентификации необходимо предъявить токен (фактор владения), а также пин-код (фактор знания), после чего пароль пользователя будет автоматически извлечен из хранилища. Далее описывается пример процедуры подготовки токена и настройки АРМ для использования _pamcsp.
Данный способ не рекомендуется к применению для доменных пользователей.
В данном примере предполагается использование Рутокен, однако общий принцип настройки будет аналогичен и для токенов других производителей.
В случае, если используемый токен не поддерживается стандартными библиотеками, необходимо установить набор библиотек от вендора и указать интерфейсную библиотеку в кофигурационном файле /etc/security/pam_csp.conf (создать его, если не существует). Например:
[global]
pkcs11_module = librtpkcs11ecp.so
Далее необходимо инициализировать сам токен. В случае с Рутокен первоначальная инициализация токена производится специальной утилитой вендора — rtAdmin:
./rtadmin format --pin-change-policy both -r -l "LABEL" --new-so-pin 87654321
Произведем предварительную очистку смарт-карты и создадим новую структуру PKCS #15:
pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin 87654321 --so-puk ""
, где --so-pin - пин-код администратора (Security Officer PIN), --so-puk - пустой, т.к. не используется для Рутокен.
Теперь присвоим контейнеру пин-код администратора (--so-pin) и пин-код пользователя (--pin):
pkcs15-init --store-pin --so-pin 87654321 --pin 12345678 --label "User PIN" --auth-id 02 --puk "" --finalize
Далее запишем на токен аутентификационную пару пароль-пользователь:
pam_csp_ctl -c -u administrator -s P@ssw0rd -p 12345678
, где -u - имя учетной записи пользователя ОС, -s - пароль учетной записи пользователя ОС, -p - пин-код пользователя токена.
Обратите внимание, что пароль пользователя вводится в терминал в открытом виде. После завершения процедуры настройки токена следует очистить историю введенных команд, либо на время его инициализации отключить сохранение истории команд в целом. В bash отключить историю команд можно с помощью set +o history (и соответственно set -o history для обратного включения).
Проверить корректность сохранения учетных данных (перечислить информацию о хранящихся УЗ) можно следующей командной:
pam_csp_ctl -l
В первую очередь потребуется установить пакет libpam-csp, предоставляющий нужный нам PAM-модуль:
sudo apt install libpam-csp
Далее по аналогии с п. 1. может потребоваться установка дополнительных библиотек для работы с токеном. Важно не забыть указать необходимую интерфейсную библиотеку в /etc/security/pam_csp.conf.
После перезагрузки устройства будет доступна двухфакторная аутентификация (теперь при входе в систему или при запросе повышения привилегий будет запрашиваться пин-код пользователя контейнера), однако при этом сохранится и возможность входа по паролю (при отключенном токене). Для того, чтобы включить жесткую многофакторную аутентификацию в конфигурационный файл /etc/security/pam_csp.conf в секцию [global] необходимо добавить следующий параметр:
require_token = true
Отдельно стоит отметить, что при отключении токена сессия пользователя будет блокироваться — за это отвечает отдельная systemd-служба csp-monitor.
В случае потери возможности аутентификации по токену (например, при настройке и отладке самого механизма аутентификации) получить привилегировангый доступ к системе "по паролю" возможно через Recovery mode в GRUB (если дополнительно не включен запрет на отображение загрузчика).
Актуальную и более подробную информацию по настройке MFA в Astra Linux можно найти в оф. документации.