Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

Простите пароли не са сигурни, а сложните са невъзможни за запомняне. Ето защо те толкова често се оказват върху лепяща бележка под клавиатурата или на монитора. За да се гарантира, че паролите остават в съзнанието на „забравящите“ потребители и надеждността на защитата не се губи, има двуфакторно удостоверяване (2FA).

Благодарение на комбинацията от притежаване на устройство и познаване на неговия ПИН, самият ПИН може да бъде по-прост и лесен за запомняне. Недостатъците в дължината на ПИН кода или произволността се компенсират от изискването за физическо притежание и ограниченията за грубата сила на ПИН кода.

Освен това в държавните агенции се случва, че искат всичко да работи според GOST. Тази 2FA опция за влизане в Linux ще бъде обсъдена. Ще започна отдалеч.

PAM модули

Pluggable Authentication Modules (PAM) са модули със стандартен API и имплементации на различни механизми за удостоверяване в приложенията.
Всички помощни програми и приложения, които могат да работят с PAM, ги вземат и могат да ги използват за удостоверяване на потребителя.
На практика работи по следния начин: командата за влизане извиква PAM, който извършва всички необходими проверки, използвайки модулите, посочени в конфигурационния файл, и връща резултата обратно на командата за влизане.

librtpam

Модулът, разработен от компанията Aktiv, добавя двуфакторна автентификация на потребители, използващи смарт карти или USB токени, използващи асиметрични ключове в съответствие с най-новите стандарти на вътрешната криптография.

Нека да разгледаме принципа на неговото действие:

  • Токенът съхранява сертификата на потребителя и неговия частен ключ;
  • Сертификатът се записва в домашната директория на потребителя като надежден.

Процесът на удостоверяване протича по следния начин:

  1. Rutoken търси личния сертификат на потребителя.
  2. Изисква се ПИН кодът.
  3. Произволни данни се подписват върху частния ключ директно в чипа Rutoken.
  4. Полученият подпис се проверява с публичния ключ от сертификата на потребителя.
  5. Модулът връща резултата от проверката на подписа на извикващото приложение.

Можете да се удостоверите с помощта на ключове GOST R 34.10-2012 (дължина 256 или 512 бита) или остарелия GOST R 34.10-2001.

Не е нужно да се притеснявате за сигурността на ключовете - те се генерират директно в Rutoken и никога не напускат паметта му по време на криптографски операции.

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

Rutoken EDS 2.0 е сертифициран от FSB и FSTEC съгласно NDV 4, следователно може да се използва в информационни системи, които обработват поверителна информация.

Практическа употреба

Почти всеки съвременен Linux ще свърши работа, например ще използваме xUbuntu 18.10.

1) Инсталирайте необходимите пакети

sudo apt-get install libccid pcscd opensc
Ако искате да добавите заключване на работния плот със скрийнсейвър, инсталирайте пакета допълнително libpam-pkcs11.

2) Добавете PAM модул с поддръжка на GOST

Зареждане на библиотеката от https://download.rutoken.ru/Rutoken/PAM/
Копирайте съдържанието на PAM папката librtpam.so.1.0.0 в системната папка
/usr/lib/ или /usr/lib/x86_64-linux-gnu/или /usr/lib64

3) Инсталирайте пакета с librtpkcs11ecp.so

Изтеглете и инсталирайте пакета DEB или RPM от връзката: https://www.rutoken.ru/support/download/pkcs/

4) Проверете дали Rutoken EDS 2.0 работи в системата

В терминала изпълняваме
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Ако видите линията Rutoken ECP <no label> - значи всичко е наред.

5) Прочетете сертификата

Проверка дали устройството има сертификат
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Ако след реда:
Using slot 0 with a present token (0x0)

  • се показва информация относно ключове и сертификати, трябва да прочетете сертификата и да го запишете на диск. За да направите това, изпълнете следната команда, където вместо {id} трябва да замените идентификатора на сертификата, който сте видели в резултата от предишната команда:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Ако файлът cert.crt е създаден, преминете към стъпка 6).
  • няма нищо, тогава устройството е празно. Свържете се с вашия администратор или създайте сами ключовете и сертификата, като следвате следващата стъпка.

5.1) Създайте тестов сертификат

внимание! Описаните методи за създаване на ключове и сертификати са подходящи за тестване и не са предназначени за използване в боен режим. За да направите това, трябва да използвате ключове и сертификати, издадени от доверен сертифициращ орган на вашата организация или акредитиран сертифициращ орган.
PAM модулът е предназначен за защита на локални компютри и е проектиран да работи в малки организации. Тъй като има малко потребители, Администраторът може да следи анулирането на сертификати и ръчно да блокира акаунти, както и срока на валидност на сертификатите. PAM модулът все още не знае как да проверява сертификати с помощта на CRL и да изгражда вериги на доверие.

Лесният начин (чрез браузър)

За да получите сертификат за тест, използвайте уеб услуга "Център за регистрация на Rutoken". Процесът ще отнеме не повече от 5 минути.

Начинът на маниака (чрез конзолата и евентуално компилатора)

Проверете версията на OpenSC
$ opensc-tool --version
Ако версията е по-малка от 0.20, актуализирайте или компилирайте клон pkcs11-tool с поддръжка на GOST-2012 от нашия GitHub (към момента на публикуване на тази статия версия 0.20 все още не е пусната) или от главния клон на главния проект OpenSC не по-късно ангажирам 8cf1e6f

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

--id: идентификатор на обект (CKA_ID) като двуцифрени шестнадесетични числа от ASCII таблицата. Използвайте само ASCII кодове за печатни знаци, защото... id ще трябва да бъде предаден на OpenSSL като низ. Например ASCII кодът “3132” съответства на низа “12”. За удобство можете да използвате онлайн услуга за конвертиране на низове в ASCII кодове.

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

След това ще създадем сертификат. Два начина ще бъдат описани по-долу: първият е чрез CA (ще използваме тестови CA), вторият е самоподписан. За да направите това, първо трябва да инсталирате и конфигурирате OpenSSL версия 1.1 или по-нова за работа с Rutoken чрез специален модул rtengine, като използвате ръководството Инсталиране и конфигуриране на OpenSSL.
Например: за '--id 3132' в OpenSSL трябва да посочите "pkcs11:id=12".

Можете да използвате услугите на тестов CA, от които има много, напр. тук, тук и тук, за това ще създадем заявка за сертификат

Друг вариант е да се поддадете на мързела и да създадете самоподписан
$ 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

6) Регистрирайте сертификата в системата

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

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

Ако вашият сертификат изглежда така:

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

тогава трябва да конвертирате сертификата от формат 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

Последният ред защитава списъка с надеждни сертификати от случайна или умишлена промяна от други потребители. Това не позволява на някой да добави своя сертификат тук и да може да влезе от ваше име.

7) Настройте удостоверяване

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

  • задължително: Такива модули трябва да върнат положителен отговор. Ако резултатът от извикване на модул съдържа отрицателен отговор, това ще доведе до грешка при удостоверяване. Заявката ще бъде премахната, но останалите модули ще бъдат извикани.
  • Requisite: Подобно на изискваното, но незабавно се проваля при удостоверяване и игнорира други модули.
  • достатъчно: Ако нито един от необходимите или достатъчни модули преди такъв модул не е върнал отрицателен резултат, тогава модулът ще върне положителен отговор. Останалите модули ще бъдат игнорирани.
  • по избор: Ако няма задължителни модули в стека и нито един от достатъчните модули не върне положителен резултат, тогава поне един от незадължителните модули трябва да върне положителен резултат.

Пълно съдържание на файла /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

запишете файла, след което изпълнете
$ sudo pam-auth-update
в прозореца, който се показва, поставете звездичка до него Rutoken PAM GOST и кликнете OK

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

8) Проверете настройките

За да разберете, че всичко е конфигурирано, но в същото време не губите възможността да влезете в системата, въведете командата
$ sudo login
Въведете потребителското си име. Всичко е конфигурирано правилно, ако системата изисква ПИН код на устройството.

Как да използвате PAM модули за локално удостоверяване в Linux с помощта на ключове GOST-2012 на Rutoken

9) Конфигурирайте компютъра да бъде блокиран, когато токенът бъде извлечен

Включен в пакета libpam-pkcs11 включена помощна програма pkcs11_eventmgr, което ви позволява да извършвате различни действия при възникване на събития PKCS#11.
За настройки pkcs11_eventmgr служи като конфигурационен файл: /etc/pam_pkcs11/pkcs11_eventmgr.conf
За различните дистрибуции на Linux командата, която кара акаунта да бъде заключен при премахване на смарт карта или токен, ще се различава. См. 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 с помощта на ключове GOST-2012 на Rutoken

Заключение

Компютрите с Linux стават все по-популярни в руските държавни агенции и настройката на надеждна двуфакторна автентификация в тази операционна система не винаги е лесна. Ще се радваме да ви помогнем да разрешите „проблема с паролата“ с това ръководство и надеждно да защитим достъпа до вашия компютър, без да отделяте много време за това.

Източник: www.habr.com

Добавяне на нов коментар