Вопрос или проблема
Я следовал этому отличному посту, чтобы настроить 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
Применение
Для решения проблемы, описанной в вопросе, вам требуется выполнить следующие действия:
-
Отредактируйте все релевантные файлы PAM, чтобы повысить
minimum_uid
дляpam_krb5.so
:sudo sed -i 's/minimum_uid=1000\b/minimum_uid=10000/g' /etc/pam.d/common-*
Это настроит параметры так, чтобы они не пытались аутентифицировать локальные услуги и учетные записи системы через Kerberos, которые академически и практически не используются.
-
Воспользуйтесь командой
usermod
, чтобы изменить пароль напрямую:sudo usermod -p "$(echo "новый_пароль" | openssl passwd -stdin -6)" имя_пользователя
Данная команда создаст хешированный пароль, совместимый в большинстве дистрибутивов Linux, и напрямую назначит его для учетной записи.
-
Убедитесь, что конфигурация PAM корректно определяет порядок аутентификации и резервный путь (fallback):
- Убедитесь, что для внутренних учетных записей сначала пробуется UNIX аутентификация, до перехода на Kerberos.
- Элементы
nullok_secure
,try_first_pass
иuse_authtok
определяют, как pam_unix и pam_ldap используют текущую парольную тему для прохождения по цепочке аутентификации.
Заключение
Этот метод позволяет сохранить баланс между удобством централизованной аутентификации и поддержкой существующих локальных пользовательских учетных записей, которые могут не быть частью домена. Осторожная настройка параметров PAM позволяет решать такие конфликты гибким и надежным способом, что способствует надежности обслуживания и совместимости с корпоративной инфраструктурой.