двухфакторная аутентификация на сайте с использованием 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> – значит всё хорошо.

Похожее:  CABINET KVADO RU ВХОД В ЛИЧНЫЙ КАБИНЕТ СПБ ШУШАРЫ

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *