Измените локальный пароль как root после настройки для MS-AD Kerberos+LDAP.

Вопрос или проблема

Я следовал этому отличному посту, чтобы настроить Kerberos + LDAP:
http://koo.fi/blog/2013/01/06/ubuntu-12-04-active-directory-authentication/

Однако есть некоторые локальные пользователи, используемые для служб.
Когда я пытаюсь изменить пароль для одного из них, как root, он запрашивает текущий пароль Kerberos, а затем выходит:

passwd service1
Текущий пароль Kerberos:  (нажимаю enter)
Текущий пароль Kerberos:  (нажимаю enter)
passwd: ошибка манипуляции с токеном аутентификации
passwd: пароль не изменен

Если я переключаюсь на локального пользователя и выполняю passwd, он один раз запрашивает пароль Kerberos, а затем возвращается к локальному:
$ passwd
Текущий пароль Kerberos:
Изменение пароля для service1.
(текущий) пароль UNIX:

Моя конфигурация схожа с сайтом, который я опубликовал выше, и все работает хорошо, просто я не могу изменить пароли локальных пользователей как root.

Заранее спасибо за любую помощь.

3.8.0-29-generic #42~precise1-Ubuntu

Обновление 1 2013-01-31:

# cat /etc/pam.d/common-auth
auth    [success=3 default=ignore]      pam_krb5.so minimum_uid=1000
auth    [success=2 default=ignore]      pam_unix.so nullok_secure try_first_pass
auth    [success=1 default=ignore]      pam_ldap.so use_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional                        pam_cap.so


# cat /etc/pam.d/common-password
password        [success=3 default=ignore]      pam_krb5.so minimum_uid=1000
password        [success=2 default=ignore]      pam_unix.so obscure use_authtok try_first_pass sha512
password        [success=1 user_unknown=ignore default=die]     pam_ldap.so use_authtok try_first_pass
password        requisite                       pam_deny.so
password        required                        pam_permit.so
password        optional        pam_gnome_keyring.so

В вашем /etc/pam.d/common-password измените minimum_uid в первой строке на значение больше 1000, например:

password        [success=3 default=ignore]      pam_krb5.so minimum_uid=10000

Это мне помогло. Вот что вы должны увидеть в /var/log/auth.log после изменения пароля для этого пользователя как root:

Dec 26 12:34:36 3.8.0-29-generic passwd[22667]: pam_unix(passwd:chauthtok): пароль изменен для service1

Ответ @Амира о редактировании common-password правильный. Но: когда вы редактируете лимиты uid PAM в общем, не забудьте отредактировать все затронутые файлы PAM! Если вы ищете krb5 в /etc/pam.d, вы должны найти все релевантные файлы:

root@server:/etc/pam.d# grep -R krb5 .
./common-auth:auth  [success=2 default=ignore]  pam_krb5.so minimum_uid=10000
./common-session-noninteractive:session optional            pam_krb5.so minimum_uid=10000
./common-session:session    optional            pam_krb5.so minimum_uid=10000
./common-account:account    required            pam_krb5.so minimum_uid=10000
./common-password:password  [success=2 default=ignore]  pam_krb5.so minimum_uid=10000

Если, например, вы отредактировали только common-auth, но не common-password, аутентификация работает с локальными учетными записями, но passwd все равно запрашивает текущий пароль Kerberos! (Именно эта ошибка привела меня сюда.)

Косвенный способ это сделать. Используйте mkpasswd для генерации зашифрованного пароля:

mkpasswd --method=sha-512

Затем используйте usermod, чтобы изменить пароль пользователя:

usermod -p '<зашифрованный_пароль_из_mkpasswd>' <имя_пользователя>

Если ваши пользователи используют пароль kerberos, вы можете удалить управление паролями kerberos из pam, потому что пароль kerberos можно изменить с помощью команды kpasswd

Нет необходимости устанавливать что-либо дополнительно или изменять настройки pam, чтобы изменить локальный пароль.

sudo usermod -p "$(echo "password" | openssl passwd -stdin -6)" user

-6 означает шифрование SHA512, для некоторых старых систем Linux вам, возможно, потребуется заменить его на -1 или -5.

Ссылка: https://www.mkssoftware.com/docs/man1/openssl_passwd.1.asp

Чтобы добавить немного контекста: NSS конфигурирует PAM для обращения к учетным записям LDAP и локальных аккаунтов, когда Kerberos настроен. Поэтому изменение минимального uid KRB5 в настройках аутентификации PAM решит эту проблему

sudo sed -i 's/minimum_uid=1000\b/minimum_uid=10000/g' /etc/pam.d/common-*

.

Ответ или решение

Эта задача связана с изменением паролей для локальных пользователей на системах Linux, после настройки аутентификации на основе Kerberos и LDAP, интегрированной с Microsoft Active Directory (MS-AD). В этом контексте, Kerberos предоставляет билетный механизм для единой аутентификации, а LDAP служит для хранения и поиска данных о пользователях. Проблема возникает, когда системный администратор (root) пытается изменить пароль для локального пользователя, не входящего в домен Active Directory.

Теория

В Linux-аутентификации присутствует слой PAM (Pluggable Authentication Module) — конфигурируемый интерфейс, который позволяет интегрировать различного рода системы аутентификации для пользователей. При интеграции Kerberos и LDAP, конфигурационные файлы PAM (/etc/pam.d/common-*) играют ключевую роль. Они определяют, как обрабатываются запросы на аутентификацию.

Когда вы пытаетесь изменить пароль локального пользователя с помощью команды passwd, PAM сначала пытается использовать Kerberos, так как Kerberos конфигурирован как предпочтительный метод аутентификации. Если локальный пользователь не имеет учетной записи в Kerberos (что часто бывает), то необходимо настроить fallback (резерв) на использование локальной UNIX-аутентификации.

В конфигурации PAM используется параметр minimum_uid, который указывает минимальный идентификатор пользователя (UID), для которого должен использоваться компонент Kerberos. Это позволяет исключать из обработки Kerberos пользователей с uid ниже определенного значения, обычно связанных с локальными сервисами и системными демонами.

Пример

Предположим, что пользователь настраивал систему по описанному в задаче сценарию и установил minimum_uid=1000 для pam_krb5.so. Это означает, что для всех пользователей с UID от 1000 и выше будут использоваться механизмы Kerberos, что в большинстве случаев покрывает зарегистрированных пользователей домена. Однако это затрудняет управление локальными учетными записями с низким UID, когда аутентификация завязывается на Kerberos.

Если системный администратор (root) пытается изменить пароль из командной строки, он столкнется с ошибками манипуляции над токеном аутентификации, поскольку требует текущий пароль Kerberos. Однако, если он изменит значение minimum_uid, например, на 10000, это исключит многие локальные учетные записи из аутентификации через Kerberos, позволяя изменять их пароли без вмешательства Kerberos.

Конфигурация следовала бы следующим образом:

password [success=3 default=ignore] pam_krb5.so minimum_uid=10000
auth [success=3 default=ignore] pam_krb5.so minimum_uid=10000

Применение

Для решения проблемы, описанной в вопросе, вам требуется выполнить следующие действия:

  1. Отредактируйте все релевантные файлы PAM, чтобы повысить minimum_uid для pam_krb5.so:

    sudo sed -i 's/minimum_uid=1000\b/minimum_uid=10000/g' /etc/pam.d/common-*

    Это настроит параметры так, чтобы они не пытались аутентифицировать локальные услуги и учетные записи системы через Kerberos, которые академически и практически не используются.

  2. Воспользуйтесь командой usermod, чтобы изменить пароль напрямую:

    sudo usermod -p "$(echo "новый_пароль" | openssl passwd -stdin -6)" имя_пользователя

    Данная команда создаст хешированный пароль, совместимый в большинстве дистрибутивов Linux, и напрямую назначит его для учетной записи.

  3. Убедитесь, что конфигурация PAM корректно определяет порядок аутентификации и резервный путь (fallback):

    • Убедитесь, что для внутренних учетных записей сначала пробуется UNIX аутентификация, до перехода на Kerberos.
    • Элементы nullok_secure, try_first_pass и use_authtok определяют, как pam_unix и pam_ldap используют текущую парольную тему для прохождения по цепочке аутентификации.

Заключение

Этот метод позволяет сохранить баланс между удобством централизованной аутентификации и поддержкой существующих локальных пользовательских учетных записей, которые могут не быть частью домена. Осторожная настройка параметров PAM позволяет решать такие конфликты гибким и надежным способом, что способствует надежности обслуживания и совместимости с корпоративной инфраструктурой.

Оцените материал
Добавить комментарий

Капча загружается...