Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

В продолжение этой темы, по совету Анатолия Убушаева обменял у поставщика Rutoken S на Rutoken ЭЦП 2.0 и руководствуясь этой статьёй произвел настройку системы. Авторизация вроде бы заработала, но появился ряд вопросов, ответов на которые я пока не нашел:

1. После входа в систему с помощью токена, при попытке повышения привилегий в консоли, например su - система выдает ошибку "ERROR:pam_pkcs11.c:501: no valid certificate which meets all requirements found" и предлагает авторизоваться с помощью пароля. А при попытке открыть root-terminal вываливается окно ошибки:
Failed to run /usr/bin/x-terminal-emulator as user root.
Failed to communicate with gksu-run-helper.
Received:
Пароль: _pkcs11.c:501: no valid certificate which meets all requirements found [0m
While expecting:
gksu: waiting
Я так понял, что где то не хватает нужного сертификата, но какого и где разобраться не смог.

2. Synaptic игнорирует авторизацию по токену. Как это можно исправить?

3. По извлечению токена система не производит logout. Как это можно исправить?

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

Критичными для меня вопросами являются 3 и 4.

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Добрый день, xnod
1) добавим в инструкцию пункт, как настроить вход для других пользователей [сделано]
2) synaptic хочет права суперпользователя, а у вас вход по токену для root не настроен (это связано с п.1)
3) https://opensc.github.io/pam_pkcs11/doc/pam_pkcs11.html пункт 8.4, мы пока не успели это перевести и адаптировать к Астре и АльтЛинукс, но это на 99.9% должно работать. Если вы нам с этим поможете - будем благодарны.
4) в п.11 инструкции нужно поменять auth [success=1 default=ignore], на auth [success=1 default=die]

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Кирилл Мещеряков пишет:

1) добавим в инструкцию пункт, как настроить вход для других пользователей [сделано]

К великому сожалению то что Вы добавили - не работает.
т.е. делаю все по инструкции, делаю пользователя admin, генерирую ключ с id 45, делаю сертификат, записываю его на токен, правлю конфиги, проверяю - работает. Авторизация проходит как и положено, но повышение привилегий по токену все еще не доступно.
Теперь делаю su -, генерирую ключ с id  50, делаю сертификат, записываю его на токен, делаю "pkcs11_inspect > /etc/security/pam_pkcs11/subject_mapping", правлю его так:
# Printing data for mapper subject:
/C=RU/ST=CITY/L=CITY/O=ORG/OU=IT/CN=ADMIN -> admin
# Printing data for mapper subject:
/C=RU/ST=CITY/L=CITY/O=ORG/OU=IT/CN=ROOT -> root

делаю логаут, логинюсь под admin - успешно. Открываю консоль, ввожу su - получаю запрос на пин токена.
Ввожу пин - получаю:
ERROR:pam_pkcs11.c:625: verify_signature() failed: EVP_VerifyFinal() failed: error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01

(2016-09-06 12:17:49 отредактировано xnod)

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Кирилл Мещеряков пишет:

3) https://opensc.github.io/pam_pkcs11/doc/pam_pkcs11.html пункт 8.4, мы пока не успели это перевести и адаптировать к Астре и АльтЛинукс, но это на 99.9% должно работать. Если вы нам с этим поможете - будем благодарны.

Эта документация никак ясности не привносит, особенно:

Your ~/.xsession should look like: FIXME

Но по ключевому слову "pkcs11_eventmgr" все таки можно кое что нагуглить...
В Alt Linux SPT 6.0 конфиг этого менеджера расположен в /etc/security/pam_pkcs11/pkcs11_eventmgr.conf
и должен выглядеть как то так:

# Sample pkcs11_eventmgr configuration file
#
pkcs11_eventmgr {

    # Run in background? Implies debug=false if true
    daemon = true;

    # show debug messages?
    debug = false;
    
    # polling time in seconds
    polling_time = 1;

    # expire time in seconds
    # default = 0 ( no expire )
    expire_time = 0;
    
    # pkcs11 module to use
    pkcs11_module = /usr/lib64/librtpkcs11ecp.so;

    #
    # list of events and actions

    # Card inserted
    event card_insert {
        # what to do if an action fail?
        # ignore  : continue to next action
        # return  : end action sequence
        # quit    : end program
        on_error = ignore ;

        # You can enter several, comma-separated action entries
        # they will be executed in turn
        action = "/usr/bin/xset led on",
            "/usr/bin/gnome-screensaver-command -d";
    }

    # Card has been removed
    event card_remove { 
        on_error = ignore;
        action = "/usr/bin/xset led off",
            "/usr/bin/gnome-screensaver-command -l";
    }

    # Too much time card removed
    event expire_time { 
        on_error = ignore;
        action = "/bin/false";
    }
}

Потом нужно добавить /usr/bin/pkcs11_eventmgr в автозагрузку и должно работать.
Кстати кто знает куда лучше добавлять автозагрузку этого менеджера?

Кирилл Мещеряков пишет:

4) в п.11 инструкции нужно поменять auth [success=1 default=ignore], на auth [success=1 default=die]

это единственное что заработало сразу, но с оговоркой - предварительно нужно настроить sudoers иначе рискуете спилить сук на котором сидите.

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

xnod пишет:

Ввожу пин - получаю:
ERROR:pam_pkcs11.c:625: verify_signature() failed: EVP_VerifyFinal() failed: error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01

Немного подробнее:

$ su
DEBUG:pam_config.c:249: Using config file /etc/security/pam_pkcs11/pam_pkcs11.conf
DEBUG:pam_pkcs11.c:301: username = [root]
DEBUG:pam_pkcs11.c:312: loading pkcs #11 module...
DEBUG:pkcs11_lib.c:971: PKCS #11 module = [/usr/lib64/librtpkcs11ecp.so]
DEBUG:pkcs11_lib.c:988: module permissions: uid = 0, gid = 0, mode = 755
DEBUG:pkcs11_lib.c:997: loading module /usr/lib64/librtpkcs11ecp.so
DEBUG:pkcs11_lib.c:1005: getting function list
DEBUG:pam_pkcs11.c:324: initialising pkcs #11 module...
DEBUG:pkcs11_lib.c:1102: module information:
DEBUG:pkcs11_lib.c:1103: - version: 2.20
DEBUG:pkcs11_lib.c:1104: - manufacturer: Aktiv Co.                       
DEBUG:pkcs11_lib.c:1105: - flags: 0000
DEBUG:pkcs11_lib.c:1106: - library description: Rutoken ECP PKCS #11 library    
DEBUG:pkcs11_lib.c:1107: - library version: 1.4
DEBUG:pkcs11_lib.c:1114: number of slots (a): 15
DEBUG:pkcs11_lib.c:1137: number of slots (b): 15
DEBUG:pkcs11_lib.c:1033: slot 1:
DEBUG:pkcs11_lib.c:1043: - description: Aktiv Rutoken ECP 00 00                                         
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0007
DEBUG:pkcs11_lib.c:1047: - token:
DEBUG:pkcs11_lib.c:1053:   - label: Rutoken                         
DEBUG:pkcs11_lib.c:1054:   - manufacturer: Aktiv Co.                       
DEBUG:pkcs11_lib.c:1055:   - model: Rutoken ECP     
DEBUG:pkcs11_lib.c:1056:   - serial: хххххххх        
DEBUG:pkcs11_lib.c:1057:   - flags: ххххххх
DEBUG:pkcs11_lib.c:1033: slot 2:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 3:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 4:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 5:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 6:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 7:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 8:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 9:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 10:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 11:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 12:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 13:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 14:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
DEBUG:pkcs11_lib.c:1033: slot 15:
DEBUG:pkcs11_lib.c:1043: - description:                                                                 
DEBUG:pkcs11_lib.c:1044: - manufacturer:                                 
DEBUG:pkcs11_lib.c:1045: - flags: 0006
Found the Smart card.
DEBUG:pkcs11_lib.c:1362: opening a new PKCS #11 session for slot 1
DEBUG:pkcs11_lib.c:1574: Saving Certificate #1:
DEBUG:pkcs11_lib.c:1576: - type: 00
DEBUG:pkcs11_lib.c:1577: - id:   45
DEBUG:pkcs11_lib.c:1574: Saving Certificate #2:
DEBUG:pkcs11_lib.c:1576: - type: 00
DEBUG:pkcs11_lib.c:1577: - id:   50
DEBUG:pkcs11_lib.c:1574: Saving Certificate #3:
DEBUG:pkcs11_lib.c:1576: - type: 00
DEBUG:pkcs11_lib.c:1577: - id:   55
DEBUG:pkcs11_lib.c:1609: Found 3 certificates in token
DEBUG:mapper_mgr.c:172: Retrieveing mapper module list
DEBUG:mapper_mgr.c:73: Loading static module for mapper 'subject'
DEBUG:mapper_mgr.c:196: Inserting mapper [subject] into list
DEBUG:pam_pkcs11.c:435: verifing the certificate #1
DEBUG:cert_vfy.c:417: Neither CA nor CRL check requested. CertVrfy() skipped
DEBUG:mapper_mgr.c:299: Mapper module subject match() returns 0
DEBUG:pam_pkcs11.c:489: certificate is valid but does not match the user
DEBUG:pam_pkcs11.c:435: verifing the certificate #2
DEBUG:cert_vfy.c:417: Neither CA nor CRL check requested. CertVrfy() skipped
DEBUG:mapper_mgr.c:299: Mapper module subject match() returns 0
DEBUG:pam_pkcs11.c:489: certificate is valid but does not match the user
DEBUG:pam_pkcs11.c:435: verifing the certificate #3
DEBUG:cert_vfy.c:417: Neither CA nor CRL check requested. CertVrfy() skipped
DEBUG:mapper_mgr.c:299: Mapper module subject match() returns 1
DEBUG:pam_pkcs11.c:492: certificate is valid and matches the user
Добро пожаловать Rutoken!
Smart card PIN: 
DEBUG:pam_pkcs11.c:542: password = [12345678]
DEBUG:pkcs11_lib.c:1381: login as user CKU_USER
DEBUG:pkcs11_lib.c:1760: reading 128 random bytes from /dev/urandom
DEBUG:pkcs11_lib.c:1779: random-value[128] = [cf:4d:fb:...:89]
DEBUG:pkcs11_lib.c:1721: hash[35] = [...:1d:8e:15:...:60]
DEBUG:pkcs11_lib.c:1742: increased signature buffer-length to 512
DEBUG:pkcs11_lib.c:1751: signature[256] = [43:74:cd:...:61]
DEBUG:pam_pkcs11.c:616: verifying signature...
DEBUG:pkcs11_lib.c:1441: logout user
DEBUG:pkcs11_lib.c:1447: closing the PKCS #11 session
DEBUG:pkcs11_lib.c:1453: releasing keys and certificates
ERROR:pam_pkcs11.c:625: verify_signature() failed: EVP_VerifyFinal() failed: error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01
Пароль: 
DEBUG:pam_pkcs11.c:726: pam_sm_setcred() called

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Подниму тему, поскольку вопрос о повышении привилегий так и не решился.
16 пункт этой инструкции, как я уже указывал, не работает. А некоторые приложения, например антивирус Dr.Web требует привилегий root для осуществления настроек. И что с этим делать непонятно.

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Извините, что долго не отвечал.

Отвечу по всем пунктам сразу, начну с самого насущного.

У вас подпись не сходится. Вы скорее всего опечатались при выписывании какого-нибудь сертификата.
Можете конечно попробовать поразбираться путем ручной подписи и проверки подписи на разных ключах и сертификатах, но я бы на вашем месте убил бы их все и выписал заново - аккуратно.

Насчет документации, спасибо вам за помощь.

А судоерс - это дело ваше.
Вы ведь можете вообще судо не использовать, есть и другие способы смены пользователя.

(2016-09-09 17:12:05 отредактировано xnod)

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

Кирилл Мещеряков пишет:

У вас подпись не сходится. Вы скорее всего опечатались при выписывании какого-нибудь сертификата.
Можете конечно попробовать поразбираться путем ручной подписи и проверки подписи на разных ключах и сертификатах, но я бы на вашем месте убил бы их все и выписал заново - аккуратно.

Ну вроде делаю copy-paste опечататься не где, но для проверки попробую еще десяточек раз.
Кстати если подпись не сходится, возможно не с тем ключом идет сравнение?
Где хранится открытая часть ключа в системе?
Ведь говорит же "certificate is valid and matches the user"
Что такое "block type is not 01" ?

Когда создаем сертификат в формате PEM

OpenSSL>  engine dynamic -pre SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1  -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so

что означает LIST_ADD:1 ?

Re: Авторизация пользователей в ALT Linux SPT 6.0 с помощью Rutoken ЭЦП

xnod пишет:

Ну вроде делаю copy-paste опечататься не где, но для проверки попробую еще десяточек раз

именно из-за copy paste вы могли и ошибиться с номером id например

xnod пишет:

Кстати если подпись не сходится, возможно не с тем ключом идет сравнение?

именно это я и хотел вам сказать

xnod пишет:

Где хранится открытая часть ключа в системе?

в сертификате

xnod пишет:

Ведь говорит же "certificate is valid and matches the user"

это означает что вы правильно привязали сертификат к пользователю, но не говорит о том что сертификату соответствует правильный ключ

xnod пишет:

Что такое "block type is not 01" ?

ошибка при проверке подписи

xnod пишет:

что означает LIST_ADD:1 ?

добавление engine в список загруженных engine (менять это не надо)