Подробный гайд: Автоблокировка экрана по PIN-коду Рутокен в РЕД ОС (MATE) через pkcs11 - Часть 4

Подробный гайд по настройке автоблокировки экрана и аутентификации по PIN-коду Рутокен в РЕД ОС (MATE) через pkcs11_eventmgr и PAM.

2026.11.02                  


Подробный гайд: Автоблокировка экрана по PIN-коду Рутокен в РЕД ОС (MATE) через pkcs11 - Часть 4Подробный гайд: Автоблокировка экрана по PIN-коду Рутокен в РЕД ОС (MATE) через pkcs11 - Часть 4

18. Если вход по PIN работает, а разблокировка нет: полезная проверка

Посмотрите, где уже настроен pam_pkcs11:

sudo grep -R "pam_pkcs11" /etc/pam.d/

Например, если вход по Рутокену работает через дисплейный менеджер, вы можете увидеть что-то в файлах:

/etc/pam.d/lightdm
/etc/pam.d/gdm-password
/etc/pam.d/sddm
/etc/pam.d/system-auth
/etc/pam.d/password-auth

Если там уже есть рабочая строка, например:



auth sufficient pam_pkcs11.so

или:

auth sufficient pam_pkcs11.so use_first_pass

то аналогичную строку можно использовать и в /etc/pam.d/mate-screensaver.

Но важно ставить её до строки:

auth include password-auth

или:

auth include system-auth

19. Вариант только по Рутокену, без пароля

Если вам нужно, чтобы разблокировка была только по Рутокену, без возможности ввода пароля, используйте более строгий вариант.

Пример:

#%PAM-1.0
auth requisite pam_pkcs11.so
auth required pam_deny.so

account include password-auth
password include password-auth
session include password-auth

Или:

#%PAM-1.0
auth requisite pam_pkcs11.so
auth required pam_deny.so

account include system-auth
password include system-auth
session include system-auth

Внимание

Такой вариант безопаснее, но опаснее административно. Если Рутокен забыт, сломан, заблокирован по PIN или потерян, вы не сможете разблокировать экран обычным паролем. Придётся использовать root-консоль или восстановление.

Для начала лучше использовать вариант с запасным паролем:

auth sufficient pam_pkcs11.so
auth include password-auth

А после стабильной проверки уже можно переходить на строгий режим.


20. Типовые ошибки и решения

Ошибка: экран блокируется, но при разблокировке просит пароль

Причина:

  • не настроен /etc/pam.d/mate-screensaver;
  • используется другой блокировщик;
  • pam_pkcs11.so стоит после pam_unix;
  • нет сопоставления сертификата с пользователем.

Решение:

sudo grep -R "pam_pkcs11" /etc/pam.d/
sudo tail -f /var/log/secure

Добавить:

auth sufficient pam_pkcs11.so
auth include password-auth

в /etc/pam.d/mate-screensaver.


Ошибка: в логе нет pam_pkcs11, только pam_unix

Причина: - файл /etc/pam.d/mate-screensaver не читается; - блокировщик использует другой PAM-сервис.

Решение:

Проверить, какой процесс блокирует экран:

pgrep -af 'mate-screensaver|xscreensaver|light-locker|gnome-screensaver'

Настроить соответствующий PAM-файл.


Ошибка: pam_pkcs11 пишет, что не может загрузить модуль

Примеры сообщений:

Cannot find pkcs11 module
cannot dlopen pam_pkcs11.so

Решение:

Проверить наличие:

ls -l /usr/lib64/security/pam_pkcs11.so
ls -l /usr/lib64/librtpkcs11ecp.so

При необходимости использовать полный путь в PAM:

auth sufficient /usr/lib64/security/pam_pkcs11.so

Ошибка: no certificate found

Причина:

  • Рутокен не виден;
  • не запущен pcscd;
  • неверная библиотека;
  • неверный slot_num;
  • токен занят другим приложением.

Решение:

systemctl status pcscd
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --list-slots

Если слот не 0, можно попробовать указать реальный номер слота в /etc/pam_pkcs11/pam_pkcs11.conf.


Ошибка: сертификат есть, но пользователь не определяется

Сообщения могут быть похожи на:

no matching user found
cannot map certificate to user

Решение:

Проверить:

cat /etc/pam_pkcs11/card_mapping.conf

Файл должен содержать строку вида:

subject = "/C=RU/O=Example/CN=..."; user = ваш_логин;

Ошибка: сертификат не проходит проверку

Сообщения:

certificate not trusted
unable to verify certificate
certificate policy error

Решение:

Проверить параметр:

cert_policy

В /etc/pam_pkcs11/pam_pkcs11.conf.

Для теста можно временно использовать:

cert_policy = signature;

Или, если нужно полностью отключить строгую проверку на время диагностики:

cert_policy = none;

Для рабочей инфраструктуры лучше использовать корректную цепочку сертификатов и настройку:

cert_policy = ca,signature;

Ошибка: pkcs11_eventmgr не блокирует экран

Причина:



  • процесс не запущен;
  • неправильный путь к команде;
  • команде не хватает DISPLAY или DBUS_SESSION_BUS_ADDRESS;
  • используется не mate-screensaver, а другой блокировщик.

Решение:

Проверить процесс:

pgrep -af pkcs11_eventmgr

Временно использовать действие:

action = "/usr/bin/touch /tmp/rutoken_removed";

Если файл создаётся, значит события обрабатываются.

Далее заменить действие на:

action = "/usr/bin/loginctl lock-session";

или:

action = "/usr/bin/dbus-send --session --type=method_call --dest=org.mate.ScreenSaver /org/mate/ScreenSaver org.mate.ScreenSaver.Lock";

21. Полный итоговый рабочий пример для MATE + Рутокен

/etc/pam_pkcs11/pkcs11_eventmgr.conf

pkcs11_eventmgr
{
    daemon = true;
    debug = false;

    polling_time = 1;
    expire_time = 0;

    pkcs11_module = /usr/lib64/librtpkcs11ecp.so;

    event card_insert {
        on_error = ignore;
        action = "/usr/bin/true";
    }

    event card_remove {
        on_error = ignore;
        action = "/usr/bin/mate-screensaver-command --lock";
    }

    event expire_time {
        on_error = ignore;
        action = "/usr/bin/true";
    }
}

Если mate-screensaver-command не работает, заменить card_remove на:

action = "/usr/bin/loginctl lock-session";

или:

action = "/usr/bin/dbus-send --session --type=method_call --dest=org.mate.ScreenSaver /org/mate/ScreenSaver org.mate.ScreenSaver.Lock";

/etc/xdg/autostart/smartcard-screensaver.desktop

[Desktop Entry]
Type=Application
Name=Smart Card Screensaver
Comment=Lock screen on Rutoken removal
Exec=/usr/bin/pkcs11_eventmgr daemon
Terminal=false
NoDisplay=true
Hidden=false
X-GNOME-Autostart-enabled=true
OnlyShowIn=MATE;

/etc/pam.d/mate-screensaver

Вариант с возможностью разблокировки паролем:

#%PAM-1.0
auth sufficient pam_pkcs11.so
auth include password-auth

account include password-auth
password include password-auth
session include password-auth

Если система использует system-auth:

#%PAM-1.0
auth sufficient pam_pkcs11.so
auth include system-auth

account include system-auth
password include system-auth
session include system-auth

Если нужно строго только по Рутокену:

#%PAM-1.0
auth requisite pam_pkcs11.so
auth required pam_deny.so

account include password-auth
password include password-auth
session include password-auth

22. Что проверить в вашем случае в первую очередь

Судя по описанию, у вас уже работает вход в систему по PIN и терминальная аутентификация.

Значит, скорее всего, нужно сделать только одно:

Добавить pam_pkcs11.so в файл:

/etc/pam.d/mate-screensaver

до строки auth include ....

То есть минимально:

sudo cp -a /etc/pam.d/mate-screensaver /root/pam-backup/
sudo nano /etc/pam.d/mate-screensaver

Привести к виду:

#%PAM-1.0
auth sufficient pam_pkcs11.so
auth include password-auth

account include password-auth
password include password-auth
session include password-auth

Затем:

mate-screensaver-command --lock

и проверить разблокировку Рутокеном. Если в логах /var/log/secure видно, что pam_pkcs11 вызывается, но PIN не принимается, значит нужно смотреть маппинг сертификата и политику сертификатов в /etc/pam_pkcs11/pam_pkcs11.conf.


23. Краткий вывод

Ваш конфиг pkcs11_eventmgr.conf в целом подходит для автоблокировки при извлечении Рутокена. Основная проблема, вероятнее всего, не в нём. Для разблокировки заблокированного экрана нужно отдельно настроить PAM для mate-screensaver.

Главное:

  1. pkcs11_eventmgr — блокирует экран при извлечении токена.
  2. mate-screensaver — разблокирует экран через PAM.
  3. Чтобы разблокировка принимала PIN, в /etc/pam.d/mate-screensaver должен быть pam_pkcs11.so до обычной парольной аутентификации.


4. Действие блокировки лучше указывать полным путём:

   action = "/usr/bin/mate-screensaver-command --lock";

5. Если команда блокировки не срабатывает из демона, используйте:

   action = "/usr/bin/loginctl lock-session";

или:

action = "/usr/bin/dbus-send --session --type=method_call --dest=org.mate.ScreenSaver /org/mate/ScreenSaver org.mate.ScreenSaver.Lock";

Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта