Вопрос или проблема
У меня работает аутентификация Kerberos, проверенная с использованием kinit
на Debian Buster. Теперь я пытаюсь использовать ее с PAM для входа с Kerberos, установил libpam-krb5
и настроил его с помощью pam-auth-update
. Но в документации в /usr/share/doc/libpam-krb5/README.Debian.gz
говорится:
Эта конфигурация по-прежнему будет требовать, чтобы пользователи были перечислены в /etc/shadow, так как в противном случае модуль pam_unix account не сработает. Обычно учетные записи, которые должны использовать только аутентификацию Kerberos, создаются с помощью adduser –disabled-password. Если вы не хотите, чтобы учетные записи вообще были указаны в /etc/shadow (если, например, вы используете другой источник, а не файлы, для вашей настройки nsswitch), вы можете пометить модуль pam_krb5 account как достаточный, а не обязательный, чтобы pam_unix не выполнялся. Это будет означать, что вы не сможете отключать учетные записи локально.
Я не хочу, чтобы учетные записи снова были перечислены локально в /etc/shadow
в дополнение к базе данных Kerberos, потому что это излишняя работа для меня. Я попробовал войти в систему с настройками по умолчанию и получил эту ошибку:
Debian GNU/Linux 10 deb10-base ttyS0
deb10-base login: ingo
Password:
Authentication failure
В journalctl
я нашел следующее:
Oct 06 15:33:08 deb10-base login[374]: pam_krb5(login:auth): user ingo authenticated as [email protected]
Oct 06 15:33:08 deb10-base login[374]: pam_unix(login:account): could not identify user (from getpwnam(ingo))
Oct 06 15:33:08 deb10-base login[374]: Authentication failure
Это именно то, что ожидалось из приведенной выше цитаты из документации. Но я не понимаю комментарий, где и что нужно изменить в конфигурационных файлах PAM. Текущие конфигурационные файлы не соответствуют документации.
Какую запись в каком конфигурационном файле PAM я должен изменить с required на sufficient? Может быть, есть еще что-то, что нужно сделать? Если возможно, я бы хотел сохранить секции конфигурации pam-auth-update.
Обновление:
Забыл упомянуть, что я запустил pam-auth-update
и проверил параметры:
[*] Kerberos authentication
[*] Unix authentication
[*] Create home directory on login
Я попробовал снять отметку с “Unix authentication“, но это сделало вход в систему невозможным. Я не смог войти снова, даже как root. Мне пришлось восстанавливаться из снепшота.
Я вижу здесь два несовершенных варианта:
- изменить сгенерированный блок
/etc/pam.d/common-account
и принять, чтоpam-auth-update
больше его не коснется, или dpkg-divert
и изменить/usr/share/pam-configs/krb5
, регенерировать/etc/pam.d/common-account
и принять, что обновления libpam-krb5 больше не повлияют на/usr/share/pam-configs/krb5
.
В первом случае измените required
на sufficient
в строке
account required pam_krb5.so minimum_uid=1000
Во втором случае сделайте то же самое в разделе Account:
, что должно привести к указанному выше изменению в /etc/pam.d/common-account
после его регенерации.
После некоторых дополнительных исследований я обнаружил, что это, похоже, общая проблема при использовании только аутентификации Kerberos. Вы получаете только аутентификацию, но не авторизацию. В этом случае авторизация предоставляется локальными учетными записями с отключенным паролем. Таким образом, вам придется управлять дополнительными локальными учетными записями, если вы не предоставляете учетные записи из другого источника.
С помощью NSS вы можете получать учетные записи из удаленного источника, в частности с сервера LDAP. Таким образом, вход в систему всегда будет находить учетную запись для авторизации, либо с сервера LDAP, либо из локального файла /etc/passwd
, в основном для системных учетных записей, таких как root. Мне нужно будет управлять учетными записями в одном месте на сервере LDAP.
Я собираюсь настроить сервер LDAP для учета.
.
Ответ или решение
Конфигурация PAM с использованием Kerberos-аутентификации, но без необходимости использования локальных учетных записей на Debian Buster, представляет собой интересную задачу, требующую понимания взаимодействия различных модулей PAM и реализации Authentication (аутентификация) и Authorization (авторизация) процесса. Цель — добиться аутентификации пользователей через Kerberos без дублирования информации в локальных файловых системах, таких как /etc/shadow
или /etc/passwd
. Здесь мы рассмотрим, как можно осуществить данное требование, избегая необходимости локального дублирования учетных записей.
Теория
Основная проблема заключается в следующем: PAM (Pluggable Authentication Modules) является гибкой системой модулей, используемой для выполнения различных задач, таких как аутентификация, авторизация, управление паролями и учет. В случае с Kerberos-аутентификацией, pam_krb5
может проверять подлинность пользователей, предоставляя им доступ на основании предоставленных учетных данных. Однако сам по себе pam_krb5
не отвечает за авторизацию, то есть возможность пользователя совершать действия (например, логиниться) после успешной аутентификации. Это обычно обрабатывается pam_unix
, который требует локальных учетных записей.
Пример
Изначально, как вы уже упомянули, вы используете libpam-krb5
, которая добавляется через pam-auth-update
с соответствующей конфигурацией. Проблема возникает из-за того, что после успешной аутентификации с Kerberos модуль pam_unix
не может найти соответствующего пользователя в /etc/passwd
, что вызывает ошибку авторизации.
Проблема решается путем изменения файла конфигурации PAM, например, /etc/pam.d/common-account
, где вы можете изменить модуль pam_krb5
с required
на sufficient
.
Применение
-
Изменение файла
/etc/pam.d/common-account
:Откройте файл
/etc/pam.d/common-account
и найдите строку с конфигурациейpam_krb5
. Измените:account required pam_krb5.so minimum_uid=1000
на:
account sufficient pam_krb5.so minimum_uid=1000
Это позволит PAM считать авторизацию достаточной, если
pam_krb5
успешно аутентифицировал пользователя, и проигнорировать ошибкиpam_unix
, связанные с отсутствием локальной записи. -
Настройка NSS для использования LDAP:
Система NSS (Name Service Switch) может быть адаптирована для получения информации о пользователях из удаленного источника, такого как LDAP. Это важный шаг, который позволяет избежать необходимости поддержания локальных учетных записей. Интеграция с LDAP с помощью NSS позволяет:
- Единственное место для управления учетными записями.
- Централизованное управление пользователями и политиками.
- Снижение ошибок и сложностей, связанных с дублированием информации.
Для этого вы можете настроить
/etc/nsswitch.conf
для указания на LDAP-сервер в качестве источника данных для учетных записей:passwd: files ldap group: files ldap shadow: files ldap
-
Установка и настройка LDAP-сервера:
Если у вас нет существующего LDAP-сервера, вам потребуется его развернуть. Это может включать установку и настройку OpenLDAP или любого другого LDAP-сервера. Процесс включает:
- Установку необходимых пакетов через пакетный менеджер apt, например
apt install slapd ldap-utils
. - Конфигурация DIT (Directory Information Tree) для организации пользователей и групп.
- Обеспечение правильной конфигурации безопасности, используя SSL/TLS для защиты передаваемых данных.
- Настройка правил доступа и политик для управления аутентификацией и авторизаций пользователей.
- Установку необходимых пакетов через пакетный менеджер apt, например
После выполнения этих шагов, ваша система будет способна аутентифицировать пользователей через Kerberos и получать информацию о них через LDAP, устраняя необходимость в локальных учетных записях, и значительно упрощая управление пользователями.
Этот подход не только устранит дублирование учетных записей, но и повысит безопасность и управляемость вашей инфраструктуры, позволяя централизованно управлять пользователями и авторизацией.