Пароль принят, но вход обрывается на фазе account, а в журнале появляется pam_parsec_mac: Can't obtain required data? Обычно проблема не в пароле, а в порядке PAM-стека или в мандатных атрибутах пользователя.
Что делает pam_parsec_mac
Модуль устанавливается пакетом parsec-mac. На проверенной системе Astra Linux 1.8 он находится в /usr/lib/security/pam_parsec_mac.so, но надёжнее запросить путь у пакетного менеджера:
$ dpkg -L parsec-mac | grep '/pam_parsec_mac\.so$'
Его работа — связать вход пользователя с мандатной подсистемой PARSEC: прочитать мандатные атрибуты пользователя, дать выбрать допустимую метку, где это предусмотрено, и выставить её для создаваемой сессии.
Атрибуты хранятся в базе /etc/parsec/macdb — по файлу на пользователя, имена файлов совпадают с uid. Смотреть их удобнее не в файлах, а штатной командой:
$ sudo pdpl-user admin
минимальная метка: Уровень_0:Низкий:Нет:0x0
максимальная метка: Уровень_0:Высокий:Нет:0x0
Модуль подключается в PAM-конфигурациях точек входа. На конкретном устройстве сначала посмотрите фактический порядок строк:
$ grep -n pam_parsec_mac /etc/pam.d/fly-dm
В штатной конфигурации fly-dm встречаются вызовы разных фаз, а session может вызываться больше одного раза:
auth required pam_parsec_mac.so
session required pam_parsec_mac.so unshare_root_only
account required pam_parsec_mac.so labelselect=appset
session required pam_parsec_mac.so
auth читает атрибуты и сохраняет данные внутри текущей PAM-транзакции, account проверяет допустимость выбранной метки, а session готовит окружение и выставляет метку сессии. Это разделение — ключ к пониманию главной ошибки.
Строка «session required pam_parsec_mac.so stub» — это не ошибка
В конфигурации sshd встречается штатный вызов со stub:
session required pam_parsec_mac.so stub
Точное расположение и число вызовов зависят от обновления Astra и состава PAM-конфигурации. Аргумент stub означает специальный проход без обычного выставления метки сессии. Практический вывод: это не заглушка, которую нужно удалить, а штатный режим модуля. Сравнивайте свой файл с конфигурацией той же версии ОС, а не со случайным примером из интернета.
Другие аргументы из штатных конфигураций, которые вызывают вопросы: unshare_root_only (управляет отделением пространства имён для root-сессий) и labelselect=appset (откуда берётся выбор уровня на экране входа). Оба — часть поставки, трогать их без задачи не стоит.
pam_parsec.so или pam_parsec_mac.so?
В проверенной установке Astra Linux 1.8 модуля с именем pam_parsec.so нет — если вы ищете его по чьей-то инструкции, вероятно, это описка. Состав установленных PARSEC-модулей можно посмотреть командой:
$ ls /usr/lib/security/ | grep parsec
pam_parsec_aud.so
pam_parsec_cap.so
pam_parsec_mac.so
pam_parsec_xauth.so
Разделение по подсистемам: pam_parsec_mac — мандатные атрибуты (наш герой), pam_parsec_cap — привилегии PARSEC (база /etc/parsec/capdb), pam_parsec_aud — флаги аудита (/etc/parsec/auddb), pam_parsec_xauth — передача мандатного контекста при графической авторизации. В штатных конфигурациях они работают вместе, и строку про каждый можно встретить в /etc/pam.d/.
«Can’t obtain required data» и «failed to get module data»
Обычная механика ошибки такова: фазы модуля обмениваются данными через внутреннее хранилище PAM. auth кладёт туда прочитанные атрибуты и выбранную метку, а account и session получают эти данные. Если более поздняя фаза вызвана, а данных нет, модуль сообщает, что не может получить требуемые данные, и вход завершается ошибкой.
Если установлен пакет pamtester, поведение можно воспроизвести, вызвав account-фазу напрямую, без auth:
$ sudo pamtester login admin acct_mgmt
pamtester: No module specific data is present
Откуда данные могут не появиться в реальной жизни — причины похожи по симптому, но механизм у каждой свой:
- Кастомная PAM-конфигурация, собранная выборочно. Если
account- илиsession-строкаpam_parsec_mac.soв/etc/pam.d/<сервис>выполняется, а нужных ей данных никто не положил, вход ломается. Какой набор фаз правильный — зависит от типа сервиса: у интерактивного входа (login,fly-dm) это связка auth + account + session, у sshd — своя схема session-строк соstub. Сверяйте свой конфиг со штатным сервисом того же типа, а не с универсальным шаблоном. - У пользователя нет ожидаемых мандатных атрибутов. Проверяется командой
sudo pdpl-user <имя>. Способ назначения зависит от политики устройства: используйтеpdpl-userили графическую утилиту управления политикой, не редактируйте базу вручную. Ошибкаpdpl-setup: failed to get pam_parsec_mac module dataтоже указывает на то, что инструмент не получил ожидаемые данные модуля, но конкретную причину нужно подтверждать по журналу. - Доменные пользователи. В ALD- и FreeIPA-схемах источник атрибутов задаётся через
/etc/parsec/mswitch.confи доменные PAM-модули. Недоступность домена, неверная настройка источника или отсутствие атрибутов у учётной записи могут выглядеть одинаково. Проверяйте и домен, и локальную конфигурациюmswitch.confдля своей версии интеграции.
Порядок диагностики
sudo pdpl-user <имя>— есть ли у пользователя атрибуты вообще.grep pam_parsec_mac /etc/pam.d/<сервис>— все ли фазы на месте; эталон — штатныйloginилиfly-dm.- Если доступен
pamtester:sudo pamtester <сервис> <имя> authenticate acct_mgmt— обе операции одним вызовом. Раздельные запуски бесполезны: каждый процесс создаёт новую PAM-транзакцию, и данные auth-фазы между ними не сохраняются. - Проверьте
journalctl -t <сервис>,/var/log/auth.logи журнал аудита в момент реального входа.
Частая развязка после диагностики: виноват кастомный сервис, куда строки модуля попали выборочно. Не собирайте набор фаз сами — возьмите за образец штатный сервис того же типа (интерактивный вход — login, удалённый — sshd) и перенесите его схему целиком. Добавлять auth-фазу туда, где её по замыслу нет (как в sshd), нельзя — так ломают вход. И любые правки PAM тестируйте, держа открытой запасную root-сессию.
База /etc/parsec/macdb правится только штатными инструментами — руками файлы с uid не редактируют.
Мандатные метки, которые модуль выставляет сессии, — тема соседнего разбора: что такое МКЦ и как жить с уровнями целостности.
Источники
- Особенности применения IPC и штатные вызовы pam_parsec_mac
- Локальная документация установленного пакета:
man pam_parsec_macи файлы изdpkg -L parsec-mac