Настройка двухфакторной аутентификации
Настройка двухфакторной (многофакторной) аутентификации в ОС выполняется с использованием программного модуля pam_p11 и аппаратного криптографического устройства (токена) Рутокен ЭЦП PKI.
Рассматривается разделение на рабочую станцию администратора — устройство, с которого выполняется настройка токена, и целевую станцию — устройство, на котором осуществляется вход в ОС с использованием второго фактора. В некоторых случаях обе роли могут быть совмещены на одном устройстве.
Первым фактором аутентификации выступает наличие устройства с уникальным закрытым ключом, вторым фактором — знание PIN-кода, ассоциированного с данным устройством.
Подготовка рабочих станций
Подготовка рабочих станций осуществляется в несколько этапов:
- Для Систем на базе платформы ROSA2021.1 и новее требуется установка следующих пакетов:
sudo dnf install task-smartcards pam_p11
При установке пакета task-smartcards автоматически создаётся группа tokenlogin. Пользователи, входящие в данную группу, проходят аутентификацию с использованием второго фактора. Остальные пользователи проходят аутентификацию по паролю;
- После установки пакета task-smartcards необходимо выполнить активацию службы pcscd.socket:
sudo systemctl enable --now pcscd.socket
В версиях ОС, начиная с 12.3, данная служба активирована по умолчанию. Повторная активация не приведёт к негативным последствиям.
- Далее необходимо провести проверку и при необходимости настройку политики polkit. Пакет pcsc-lite содержит политику org.debian.pcsc-lite.policy, разрешающую доступ к токенам всем пользователям. При необходимости допускается создание пользовательской политики в каталоге
/etc/polkit-1/. В большинстве случаев дополнительная настройка не требуется.
Подготовка токена Рутокен
Подготовка токена осуществляется в несколько этапов:
- Подключение устройства. Токен Рутокен ЭЦП PKI должен быть подключён к рабочей станции администратора. Устройство должно определяться в Системе, например:
Bus 001 Device 005: ID 0a89:0030 Aktiv Rutoken ECP
- Очистка данных с токена производится с помощью команды:
pkcs15-init --erase-card -p rutoken_ecp
- Создание нового контейнера PKCS#15 осуществляется командой:
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
где 87654321 — PIN администратора.
- Присвоение контейнеру пользовательского PIN (
12345678) и PIN администратора (87654321):
pkcs15-init --store-pin --label "User PIN" --auth-id 02 –pin\ "12345678" --puk "" --so-pin "87654321" --finalize
- Генерация ключевой пары (RSA длиной 2048 бит) с помощью команды:
pkcs15-init -G rsa/2048 --auth-id 02 --id 42 --label "SSH\ User's Key" --public-key-label "SSH User's Public Key"
- При выполнении команды будет запрошен PIN пользователя:
User PIN [User PIN] required. Please enter User PIN [User\ PIN]:
Необходимо ввести заданный ранее пароль 12345678.
Извлечение и перенос публичного ключа
При необходимости можно использовать токен в качестве второго фактора аутентификации при входе по SSH. Описанные далее действия можно выполнить на любой из станций.
Для использования токена при входе по SSH необходимо извлечь публичный ключ:
ssh-keygen -D /usr/lib64/opensc-pkcs11.so -I 0:42 >> key.pub
Содержимое файла key.pub требуется добавить в файл ~/.ssh/authorized_keys соответствующего пользователя на целевой станции.
Файл ~/.ssh/authorized_keys используется PAM-модулем pam_p11 независимо от наличия и настроек сервера OpenSSH.
Подготовка целевой станции
Подготовка целевой станции осуществляется в несколько этапов.
На целевой станции требуется установка модуля pam_p11:
sudo dnf install pam_p11
Добавление пользователей в группу tokenlogin (группа автоматически создается при установке пакета task-smartcards) выполняется следующими действиями:
- Добавление локальных пользователей:
sudo usermod -a -G tokenlogin user
где вместо user используется имя целевого пользователя.
- Добавление доменных пользователей с использованием механизма сопоставления групп, который реализуется с помощью пакета libnss-role.
Данный механизм позволяет считать члена одной группы (например, из домена) одновременно членом другой — локальной.
Предполагается, что на контроллере домена (Microsoft Active Directory / Samba AD либо FreeIPA) имеется группа с именем "Token Login". В случае корректного включения станции с установленной ОС РОСА "ХРОМ" в домен, Система будет видеть принадлежность доменного пользователя к данной группе.
Для активации механизма сопоставления необходимо выполнить установку пакета:
sudo dnf install libnss-role
В процессе установки модуль role будет автоматически добавлен в строку "group" конфигурационного файла /etc/nsswitch.conf.
Далее следует определить соответствие между доменной группой и локальной:
sudo roleadd 'Token Login' tokenlogin
В результате в файл /etc/role будет добавлена соответствующая запись. После этого при выполнении команды id доменного пользователя в выводе отразится его принадлежность как к группе "Token Login", так и к локальной группе tokenlogin.
Список ключей пользователя
Для обеспечения возможности входа в Систему с использованием второго фактора (токена) необходимо добавить открытый ключ, извлечённый из токена, в файл ~/.ssh/authorized_keys соответствующего пользователя.
При подключённом токене требуется выполнить следующую команду:
ssh-keygen -D /usr/lib64/opensc-pkcs11.so -I 0:42
Результат выполнения команды представляет собой строку, содержащую открытый ключ. Данный ключ необходимо внести в файл ~/.ssh/authorized_keys пользователя, которому предполагается разрешение входа с использованием токена.
Процедура выполняется от имени данного пользователя и включает следующие шаги:
- создание каталога .ssh (при отсутствии):
mkdir --mode=700 -p ~/.ssh
- открытие файла
~/.ssh/authorized_keysна редактирование:
nano ~/.ssh/authorized_keys
вставка строки с открытым ключом, полученным ранее, и сохранение файла.
Файл ~/.ssh/authorized_keys используется PAM-модулем pam_p11 как при удалённом входе по SSH, так и при локальном входе через терминал. Наличие соответствующего открытого ключа в этом файле является обязательным условием для успешной аутентификации с использованием токена.
Создание общего файла настроек PAM
Для организации централизованной конфигурации аутентификации с использованием токена рекомендуется создать отдельный файл /etc/pam.d/p11, содержащий настройки, специфичные для работы PAM-модуля pam_p11.
Создание и редактирование файла выполняется следующим образом:
sudo nano /etc/pam.d/p11
В файл необходимо внести следующую конфигурацию:
auth required pam_env.so
#auth required pam_faillock.so preauth silent deny=5\ unlock_time=900
auth required pam_p11.so /usr/lib64/opensc-pkcs11.so
#auth required pam_faillock.so authfail deny=5\ unlock_time=900
password optional pam_p11.so /usr/lib64/opensc-pkcs11.so
После внесения изменений файл следует сохранить (в редакторе nano для этого используется комбинация клавиш Ctrl+O), затем нажать Enter и выйти по Ctrl+X.
Если планируется использование модуля pam_faillock для защиты от подбора PIN-кода, необходимо удалить символ "#" в начале соответствующих строк, тем самым активировав их (раскомментировать).
В дальнейшем при необходимости следует указать подключение данного файла (стека p11) в других PAM-конфигурациях, например, в файлах login, sshd или gdm-password, посредством директивы substack p11.
Особенности работы pam_p11
Если ни один из ранее вызванных модулей PAM не запросил пароль, pam_p11 инициирует его запрос и использует введённый PIN-код для доступа к закрытому ключу на токене. Если же пароль уже получен предыдущим модулем, pam_p11 использует его как PIN-код. В конфигурациях, приведённых в данном разделе руководства, модуль pam_p11 всегда вызывается первым и самостоятельно инициирует ввод PIN-кода.
Расширенная настройка
Далее в разделе Настройка двухфакторной аутентификации — Расширенные настройки рассматриваются типовые примеры настройки PAM для использования второго фактора аутентификации. При необходимости допускается реализация более сложных и специфичных конфигураций PAM-модулей.
Для ознакомления с официальной справочной информацией по формату конфигурационных файлов PAM рекомендуется использовать встроенную документацию:
man pam.conf
Просмотр логов
После выполнения попытки входа в Систему возможно получение диагностической информации о работе PAM-модулей, в том числе pam_p11, посредством системного журнала:
sudo journalctl -b | grep pam_p11
Вывод ограничивается сообщениями текущего сеанса загрузки Системы. При необходимости фильтрация может быть адаптирована под другие модули или условия.
Настройка входа в TTY
Настройка, при которой токен используется исключительно при входе в Систему через терминал TTY (переключение с помощью сочетания клавиш Alt+Ctrl+FN), выполняется в конфигурационном файле /etc/pam.d/login.
Для внесения изменений необходимо открыть файл с правами суперпользователя:
sudo nano /etc/pam.d/login
Затем внести следующие изменения в файл:
- Замена строки "auth include system-auth" на блок:
auth [default=1 success=ignore] pam_succeed_if.so user\ ingroup\ tokenlogin
auth substack p11
auth [default=ignore success=1] pam_succeed_if.so user\ ingroup\ tokenlogin
auth substack system-auth
- Замена строки "password include system-auth" на блок:
password [default=1 success=ignore] pam_succeed_if.so user\ ingroup tokenlogin
password substack p11
password [default=ignore success=1] pam_succeed_if.so user\ ingroup tokenlogin
password substack system-auth
После сохранения изменений рекомендуется выполнить вход через терминал TTY под пользователем, для которого ранее был настроен ключ SSH. При возникновении проблем следует обратиться к журналу Системы, как описано в п. Просмотр логов.
Настройка входа через GDM
Для настройки входа через графический дисплей-менеджер GDM требуется изменение файла /etc/pam.d/gdm-password.
Необходимо открыть файл на редактирование с правами суперпользователя (например, с помощью редактора nano):
sudo nano /etc/pam.d/gdm-password
Далее внести в файл /etc/pam.d/gdm-password следующие изменения:
- закомментировать строки (добавить символ "#" в начало строки):
auth substack password-auth
auth optional pam_gnome_keyring.so
- добавить после закомментированных строк следующий блок:
auth [default=1 success=ignore] pam_succeed_if.so user\ ingroup tokenlogin
auth substack p11
auth [default=ignore success=1] pam_succeed_if.so user\ ingroup tokenlogin
auth substack password-auth
- аналогично закомментировать следующие строки:
password substack password-auth
-password optional pam_gnome_keyring.so use_authtok
Следует обратить внимание, что отключение модуля pam_gnome_keyring необходимо в данном случае, поскольку его назначение — автоматическая разблокировка пользовательского хранилища ключей при совпадении пароля от хранилища с системным паролем пользователя — теряет смысл при использовании PIN-кода и токена.
- добавить после них блок:
password [default=1 success=ignore] pam_succeed_if.so user\ ingroup tokenlogin
password substack p11
password [default=ignore success=1] pam_succeed_if.so user\ ingroup tokenlogin
password substack system-auth
сохранить изменения в файле и выполнить вход в Систему через GDM. При корректной настройке вместо стандартного пароля будет запрошен PIN-код от токена.
Настройка входа по SSH
При входе в Систему по SSH с использованием токена в качестве второго фактора аутентификации токен должен быть физически подключён к рабочей станции, с которой производится подключение, а на целевой станции должен быть зарегистрирован только открытый ключ.
Содержимое открытого ключа, извлечённого с токена, должно быть добавлено в файл ~/.ssh/authorized_keys соответствующего пользователя на целевой станции. Порядок извлечения ключа приведён в п. Извлечение и перенос публичного ключа.
Вход по SSH с вводом PIN-кода и пароля
Настройка целевой станции
Рассматривается конфигурация, при которой при входе по SSH пользователь сначала вводит PIN-код токена, а затем — свой пароль. В данном варианте PAM-модуль pam_p11 не требуется.
Для активации данного режима необходимо запретить вход по паролю, разрешив только комбинацию открытого ключа и интерактивной аутентификации, командой:
echo "AuthenticationMethods publickey,keyboard-interactive"\ | sudo tee -a /etc/ssh/sshd_config
Также необходимо убедиться, что параметр UsePAM в том же файле установлен в значение yes (данное значение задано по умолчанию в ОС):
UsePAM yes
При необходимости скорректировать значение и перезапустить службу SSH:
sudo systemctl restart sshd
Вход с рабочей станции
На рабочей станции, с которой выполняется подключение, должен быть установлен и подключён токен. Подключение осуществляется по следующей команде:
ssh -I /usr/lib64/opensc-pkcs11.so -p <порт>\ <пользователь>@<ip\
-адрес>
где параметры:
- <порт> — номер порта, на котором запущен sshd на целевой станции (по умолчанию – 22);
- <пользователь> — имя пользователя на целевой станции;
- <ip-адрес> — IP-адрес целевой станции.
После выполнения команды будет последовательно запрошено:
- PIN-код от токена;
- пароль пользователя.
Вход по SSH только с вводом PIN-кода
Настройка целевой станции
В данной конфигурации используется модуль pam_p11, а пользователь выполняет вход исключительно по PIN-коду без ввода системного пароля:
- открыть на редактирование PAM-конфигурацию для sshd:
sudo nano /etc/pam.d/sshd
- закомментировать строку (добавить символа "#" в начало строки):
auth include system-auth
- вставить вместо неё блок:
auth [default=1 success=ignore] pam_succeed_if.so user ingroup\ tokenlogin
auth substack p11
auth [default=ignore success=1] pam_succeed_if.so user ingroup\ tokenlogin
auth substack system-auth
- аналогично закомментировать строку:
password includesystem-auth
- вставить вместо неё блок:
password [default=1 success=ignore] pam_succeed_if.so user\ ingroup tokenlogin
password substack p11
password [default=ignore success=1] pam_succeed_if.so user\ ingroup tokenlogin
password substack system-auth
- убедиться, что параметр UsePAM в /etc/ssh/sshd_config установлен в значение "yes".
Вход с рабочей станции
Токен должен быть подключён к рабочей станции, с которой производится вход. Подключение выполняется командой:
ssh -I /usr/lib64/opensc-pkcs11.so -p <порт>\ <пользователь>@<ip\-адрес>
После этого будет запрошен только PIN-код. При корректной настройке вход будет выполнен без запроса системного пароля пользователя.