Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux — MAILSGUN.RU

Что надо, чтобы начать?

  • Любой современный дистрибутив Linux. Я выполнял тестовую настройку в MX Linux 18.2_x64. Это конечно не серверный дистрибутив, но для Debian вряд ли будут какие-то отличия. Для других дистрибутивов могут слегка различаться пути до библиотекконфигов.
  • Токен. Мы продолжаем использовать модель , которая идеально подходит по скоростным характеристикам для корпоративного применения.
  • Для работы с токеном в Linux необходимо установить следующие пакеты:
    libccid libpcsclite1 pcscd pcsc-tools opensc

Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux

Немного вводных об astra linux directory (ald) и jacarta pki

Домен

Astra Linux Directory (ALD)

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

ALD использует технологии LDAP, Kerberos5, Samba/CIFS и обеспечивает:

— это линейка PKI-токенов для строгой аутентификации пользователей в корпоративных системах, безопасного хранения ключевых контейнеров программных СКЗИ и цифровых сертификатов российского производителя – компании

В среде Astra Linux Directory (ALD) электронные ключи JaCarta PKI могут использоваться для двухфакторной аутентификации пользователя в домене ALD и отказа от паролей. Кроме того, с этими же электронными ключами можно выполнять различные сценарии внутри ОС, после аутентификации, такие, как: электронная подпись, хранение ключевых контейнеров, доступ к Web-ресурсам, проброс ключа в сессии MS Windows. Доступ к VDI сервисам, таким, как VmWare или Citrix.

Начало работы

  1. Устанавливаем:
    $ apt-get install xca
  2. И запускаем:
    $ xca
  3. Создаём нашу базу данных для CA — /root/CA.xdb
    Мы рекомендуем хранить базу данных Certificate Authority в папке, куда есть доступ только у администратора. Это важно для защиты закрытых ключей корневых сертификатов, которые используются для подписывания всех остальных сертификатов.

Проверяем, что Рутокен ЭЦП 2.0 работает в системе

В терминале выполняем$ pkcs11-tool —module /usr/lib/librtpkcs11ecp.so -TЕсли увидите строку Rutoken ECP <no label> – значит всё хорошо.

Похожее:  Личный кабинет ГудЛайн: вход, регистрация, официальный сайт

Устанавливаем необходимые пакеты

sudo apt-get install libccid pcscd openscЕсли хотите добавить блокировку рабочего стола скринсейвером – дополнительно установите пакет libpam-pkcs11.

Добавляем PAM-модуль с поддержкой ГОСТов


Загружаем библиотеку с Копируем содержимое папки PAM librtpam.so.1.0.0 в системную папку/usr/lib/ или /usr/lib/x86_64-linux-gnu/или /usr/lib64

Устанавливаем пакет с librtpkcs11ecp.so

Загружаем и устанавливаем DEB- или RPM-пакет по ссылке:

Считываем сертификат

Проверяем, что на устройстве есть сертификат$ pkcs11-tool —module /usr/lib/librtpkcs11ecp.so -OЕсли после строчки:Using slot 0 with a present token (0x0)

  • выводится информация о ключах и сертификатах, то необходимо считать сертификат и сохранить на диск. Для этого выполните следующую команду, где вместо {id} нужно подставить ID-сертификата, который вы увидели в выводе предыдущей команды:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    В случае если файл cert.crt создан переходим к пункту 6).
  • нет ничего, значит устройство пустое. Обратитесь к администратору или создайте ключи и сертификат самостоятельно, следуя следующему пункту.

1) Создаём тестовый сертификат

Внимание! Описанные способы создания ключей и сертификатов подходят для тестирования и не предназначены для применения в боевом режиме. Для этого нужно использовать ключи и сертификаты, изданные доверенным центром сертификации вашей организации или аккредитованным удостоверяющим центром.
PAM-модуль создан защищать локальные компьютеры и подразумевает работу в небольших организациях. Поскольку пользователей немного, Администратор может сам следить за отзывом сертификатов и вручную блокировать учетные записи, как и за сроком действия сертификатов. PAM-модуль пока не умеет проверять сертификаты по CRL и строить цепочки доверия.

Регистрируем сертификат в системе


Убедитесь, что ваш сертификат выглядит как base64 файл:

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

Если ваш сертификат выглядит так:

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

то нужно сконвертировать сертификат из формата DER в PEM-формат(base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEMСнова проверяем, что теперь все в порядке.

Добавляем сертификат в список доверенных сертификатов$ mkdir ~/.eid$ chmod 0755 ~/.eid$ cat cert.pem >> ~/.eid/authorized_certificates$ chmod 0644 ~/.eid/authorized_certificatesПоследняя строка защищает список доверенных сертификатов от случайного или намеренного изменения другими пользователями. Это исключает ситуацию, когда кто-то добавит сюда свой сертификат и сможет входить в систему от вашего имени.

Настраиваем аутентификацию

Настройка нашего модуля PAM совершенно стандартна и делается точно также, как и настройки других модулей. Создаём в файл /usr/share/pam-configs/rutoken-gost-pam содержащий полное имя модуля, включен ли он по умолчанию, приоритет модуля и параметры аутентификации.В параметрах аутентификации есть требования к успешности операции:

  • required (требуемый): такие модули должны вернуть положительный ответ. Если результат вызова модуля содержит отрицательный ответ, это приведёт к ошибке аутентификации. Запрос будет сброшен, но остальные модули будут вызваны.
  • requisite (необходимый): похож на required, но сразу же приводит к сбою аутентификации и игнорирует остальные модули.
  • sufficient (достаточный): если перед таким модулем ни один из модулей required или sufficient не вернул отрицательного результата, то модуль вернёт положительный ответ. Оставшиеся модули будут проигнорированы.
  • optional (дополнительный): если в стеке нет модулей required и ни один из модулей sufficient не вернул положительного результата, то хотя бы один из модулей optional должен вернуть положительный ответ.

Полное содержание файла /usr/share/pam-configs/rutoken-gost-pam:Name: Rutoken PAM GOSTDefault: yesPriority: 800Auth-Type: PrimaryAuth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

сохраняем файл, после этого выполняем$ sudo pam-auth-updateв появившемся окне ставим звёздочку около Rutoken PAM GOST и нажимаем OK

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

Проверяем настройку


Чтобы понять что всё настроено, но при этом не потерять возможность входа в систему введите команду$ sudo loginВведите имя пользователя. Всё настроено правильно, если система потребует PIN-код устройства.

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

Настраиваем блокировку компьютера при извлечении токена

В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.Для настройки pkcs11_eventmgr служит файл конфигурации: /etc/pam_pkcs11/pkcs11_eventmgr.confДля различных дистрибутивов Линукс, команда которая вызывает блокировку учетной записи при извлечении смарт-карт или токена будет отличаться. См. event card_remove.Пример файла конфигурации представлен ниже:

pkcs11_eventmgr
{ # Запуск в бэкграунде daemon = true; # Настройка сообщений отладки debug = false; # Время опроса в секундах polling_time = 1; # Установка тайм-аута на удаление карты # По-умолчанию 0 expire_time = 0; # Выбор pkcs11 библиотеки для работы с Рутокен pkcs11_module = usr/lib/librtpkcs11ecp.so; # Действия с картой # Карта вставлена: event card_insert { # Оставляем значения по умолчанию (ничего не происходит) on_error = ignore ; action = "/bin/false"; } # Карта извлечена event card_remove { on_error = ignore; # Вызываем функцию блокировки экрана # Для GNOME action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock"; # Для XFCE # action = "xflock4"; # Для Astra Linux (FLY) # action = "fly-wmfunc FLYWM_LOCK"; } # Карта долгое время извлечена event expire_time { # Оставляем значения по умолчанию (ничего не происходит) on_error = ignore; action = "/bin/false"; }
}

После этого добавьте приложение pkcs11_eventmgr в автозагрузку. Для этого отредактируйте файл .bash_profile:$ nano /home/<имя_пользователя>/.bash_profileДобавьте в конец файла строку pkcs11_eventmgr и перезагрузитесь.

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

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

Apache

Так же как и с nginx проблем с установкой apache ни у кого не должно возникнуть. Если же вы не знаете, как установить этот web-сервер, просто воспользуйтесь официальной документацией.

Librtpam

Разработанный компанией «Актив» модуль добавляет двухфакторную аутентификацию пользователей по смарт-картам или USB-токенам с помощью асимметричных ключей по последним стандартам отечественной криптографии.

Рассмотрим принцип его работы:

  • на токене хранится сертификат пользователя и его закрытый ключ;
  • сертификат сохранён в домашнем каталоге пользователя как доверенный.

Процесс аутентификации происходит следующим образом:

  1. На Рутокене выполняется поиск личного сертификата пользователя.
  2. Запрашивается PIN-код токена.
  3. Происходит подпись случайных данных на закрытом ключе непосредственно в чипе Рутокена.
  4. Полученная подпись проверяется с помощью открытого ключа из сертификата пользователя.
  5. Модуль возвращает вызвавшему приложению результат проверки подписи.

Можно аутентифицироваться по ключам ГОСТ Р 34.10-2022 (длины 256 или 512 бит) или устаревшему ГОСТ Р 34.10-2001.

За безопасность ключей можно не беспокоиться – они генерируются непосредственно в Рутокене и никогда не покидают его память во время криптографических операций.

Как использовать PAM-модули для локальной аутентификации в Linux по ключам ГОСТ-2022 на Рутокене

Рутокен ЭЦП 2.0 сертифицирован ФСБ и ФСТЭК по НДВ 4, поэтому может применяться в информационных системах, обрабатывающих конфиденциальную информацию.

Настройка клиента. проверка работоспособности

Создайте на клиенте каталог

/etc/krb5/

. Скопируйте в

/etc/krb5/

сертификат CA

(cacert.pem)

c сервера.

Настройте kerberos в /etc/krb5.conf. Секцию [libdefaults] дополните следующими строками.

Нужна ли инструкция по настройке работы tls с сертификатами на гост 34.10-2022:

Проголосовали 44 пользователя. Воздержались 9 пользователей.

Подготовка смарт-карты. выпуск ключей и сертификата пользователя

Убедитесь в том, что установлены пакеты

libengine-pkcs11-opensslopensc

. Подключите устройство, которое следует подготовить.

Проинициализируйте устройство, установите PIN-код пользователя. Помните, что инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления.

Для инициализации необходимо воспользоваться утилитой pkcs11-tool.

pkcs11-tool —slot 0 —init-token —so-pin 00000000 —label ‘JaCarta PKI’ —module /lib64/libASEP11.so,

где:

—slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;

—init-token – команда инициализации токена;

—so-pin 00000000 – PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;

—label ‘JaCarta PKI’ – метка устройства;

—module /lib64/libASEP11.so — указывает путь до библиотеки libASEP11.so. Устанавливается в рамках пакета idprotectclient см. раздел «Установка драйверов на сервер и клиент».

Для задания PIN-кода пользователя используйте команду:

pkcs11-tool —slot 0 —init-pin —so-pin 00000000 —login —pin 11111111 —module /lib64/libASEP11.so,

где:

—slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.;

—init-pin – команда установки PIN-кода пользователя;

—so-pin 00000000 – PIN-код администратора JaCarta PKI. По умолчанию имеет значение 00000000;

Практическое использование


Подойдёт практически любой современный Линукс, для примера мы будем использовать xUbuntu 18.10.

Пример демо-зоны

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

Проверяем работу в firefox

Раз уж мы всё полностью делаем в Linux, то будем считать, что и наши пользователи тоже работают в Linux (если у них Windows, то .

  1. Запускаем Firefox.
  2. Попробуем в начале зайти без токена. Получаем вот такую картинку:
    Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux
  3. Заходим на about:preferences#privacy, и идём в Security Devices…
  4. Жмём Load, чтобы добавить новый PKCS#11 Device Driver и указываем путь до нашей librtpkcs11ecp.so.
  5. Для проверки того, что сертификат видится можно зайти в Certificate Manager. Отобразится запрос на ввод PIN-кода. После корректного ввода можно проверить, что на вкладке Your Certificates появился наш сертификат с токена.
  6. Теперь заходим с токеном. Firefox предлагает выбрать сертификат, который будет выбран на сервер. Выбираем наш сертификат.
    Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux
  7. PROFIT!
    Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux

Настройка выполняется один раз, и как видно в окне запроса на сертификат мы можем сохранить наш выбор. После этого при каждом входе на портал нам надо будет только вставить токен и ввести PIN-код пользователя, который был задан при форматировании. После такой аутентификации сервер уже знает какой пользователь на него зашёл и можно больше не делать никаких дополнительных окон для проверки, а сразу пускать пользователя в его личный кабинет.

Простой путь (через браузер)

Для получения тестового сертификата используйте . Процесс займёт не более 5 минут.

Путь гика (через консоль и, возможно, компилятор)

Проверьте версию OpenSC $ opensc-tool —versionЕсли версия меньше чем 0.20, то обновитесь или соберите из нашего GitHub-а (на момент выхода этой статьи релиз 0.20 ещё не выпущен) или из ветки master основного проекта OpenSC не позднее

Генерируем ключевую пару с параметрами:—key-type: GOSTR3410-2022-512:А (ГОСТ-2022 512 бит c парамсетом А), GOSTR3410-2022-256:A (ГОСТ-2022 256 бит с парамсетом A)

—id: идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII. Используйте только ASCII-коды печатных символов, т.к. id нужно будет передать OpenSSL в виде строки. Например, ASCII-кодам “3132” соответствует строка «12». Для удобства, можно воспользоваться .

$ ./pkcs11-tool —module /usr/lib/librtpkcs11ecp.so —keypairgen —key-type GOSTR3410-2022-512:A -l —id 3132

Далее будем создавать сертификат. Ниже будет описано два пути: первый через УЦ (мы будем использовать тестовые УЦ), второй – самоподписанный. Для этого сначала надо установить и настроить OpenSSL версии 1.1 или новее для работы с Рутокен через специальный модуль rtengine используя руководство .Например: для ‘—id 3132’ в OpenSSL надо указывать «pkcs11:id=12«.

Можно воспользоваться услугами тестового УЦ, коих много, например, , и , для этого создадим запрос на сертификат

Другой вариант – можно поддаться лени и создать самоподписанный$ openssl req -utf8 -new -keyform engine -key «pkcs11:id=12» -engine rtengine -out req.csr

Загружаем сертификат на устройство$ openssl req -utf8 -x509 -keyform engine -key «pkcs11:id=12» -engine rtengine -out cert.cer

Создаём ключи и сертификат root ca

В основе инфраструктуры открытых ключей (PKI) лежит иерархическая система. Главным в этой системе является корневой центр сертификации или root CA. Его сертификат и надо создать в первую очередь.

  1. Создаём для CA закрытый ключ RSA-2048. Для этого на вкладке Private Keys нажимаем New Key и выбираем соответствующий тип.
  2. Задаём имя для новой ключевой пары. Я её назвал — CA Key.
  3. Выписываем сам сертификат CA, с использованием созданной ключевой пары. Для этого переходим на вкладку Certificates и нажимаем New Certificate.
  4. Обязательно выбираем SHA-256, потому что использование SHA-1 уже не может считаться безопасным.
  5. В качестве шаблона обязательно выбираем [default] CA. Не забудьте нажать на Apply all, иначе шаблон не применяется.
  6. На вкладке Subject выбираем нашу ключевую пару. Там же вы можете заполнить все основные поля сертификата.

Двухфакторная аутентификация на сайте с использованием USB-токена. Теперь и для Linux

Установка драйверов на сервер и клиент

Для обеспечения работы со смарт-картой

JaCarta PKI

на клиенте и сервере установите следующие пакеты:

libccid, pcscd, libpcsclite1

. После установки этих обязательных пакетов установите

, который можно загрузить с официального сайта «Аладдин Р.Д.».

Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit на клиенте и сервере.

Для обеспечения возможности выпуска ключей и сертификатов на JaCarta PKI на сервере также установите пакеты libengine-pkcs11-openssl и opensc.

Установка и настройка центра сертификации на сервере

В качестве центра сертификации

(CA)

будет использован

OpenSSL

OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA и сертификаты X.509, подписывать их, формировать CSR и CRT.

Заключение

ПК с Linux в российских госструктурах становятся все популярнее, а настроить надёжную двухфакторную аутентификацию в этой ОС не всегда просто. Будем рады этим руководством помочь решить “проблему паролей” и надёжно защитить доступ к ПК, не затратив на это много времени.