Summary: | Смена Kerberos-пароля для pam_krb5 | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Evgeny Sinelnikov <sin> |
Component: | pam-config | Assignee: | Evgeny Sinelnikov <sin> |
Status: | ASSIGNED --- | QA Contact: | qa-sisyphus |
Severity: | normal | ||
Priority: | P3 | CC: | aen, cas, ekorneechev, iv, ldv, nbr, placeholder, vaa |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Evgeny Sinelnikov
2017-02-22 13:34:26 MSK
Внёс исправления, Kerberos-пароль меняется. Поправил UI-утилиты userpasswd. $ ssh girar task ls #178548 BUILDING #1 [locked] sisyphus pam-config.git=1.7.1-alt1 userpasswd.git=0.3.0-alt1%ubt (In reply to comment #1) > Внёс исправления, Kerberos-пароль меняется. > Поправил UI-утилиты userpasswd. > > $ ssh girar task ls > #178548 BUILDING #1 [locked] sisyphus pam-config.git=1.7.1-alt1 Это изменение неправильное. Вы поставили password requisite pam_succeed_if.so uid >= 500 quiet перед pam_krb5.so и pam_tcb.so, следовательно, для uid < 0 будет FAIL. Вы перенесли password [success=2 default=ignore] в конец стека, это как вообще? (In reply to comment #1) > userpasswd.git=0.3.0-alt1%ubt А зачем fdatasync? Неужели вы пишете в блочное устройство? Странно, что userpasswd вообще потребовались такие значительные изменения. Понятно, что у каждого модуля аутентификации свой prompt, но почему возникла необходимость менять конечный автомат, непонятно. > Вы поставили > password requisite pam_succeed_if.so uid >= 500 quiet > перед pam_krb5.so и pam_tcb.so, следовательно, для uid < 0 будет FAIL. > > Вы перенесли > password [success=2 default=ignore] > в конец стека, это как вообще? Да, тут нужно разобраться и поправить. [success=2 default=ignore] в конце - что-то странное. Вообще, зачем применять такую связку? password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=2 default=ignore] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_krb5.so use_authtok Весь её смысл в том, что если Kerberos-пароль изменён успешно, то заменить, заодно, и локальный пароль... Но нужно ли так делать??? Я бы, вообще, убрал такое поведение и добавил утилиты passwd.local в таком виде: # ln -s passwd /usr/bin/passwd.local # cp /etc/pam.d/passwd /etc/pam.d/passwd.local # cat /etc/pam.d/passwd.local #%PAM-1.0 auth include system-auth-local account include system-auth-local password include system-auth-local session required pam_deny.so $ ls -l /usr/bin/passwd.local lrwxrwxrwx 1 root root 6 фев 24 15:20 /usr/bin/passwd.local -> passwd А в userpasswd добавил опцию -l/--local. Как вам такая идея? > А зачем fdatasync? Неужели вы пишете в блочное устройство? Были рейсы на уровне вычитывания, создалось впечатление, что это их исправило. > Странно, что userpasswd вообще потребовались такие значительные изменения. Ну, если всё виснет из-за того, что вместо одного запроса на пароль, приходит два, то как быть иначе? Второй запрос на текущий пароль в автомате не предусмотрен. (In reply to comment #4) > > Вы поставили > > password requisite pam_succeed_if.so uid >= 500 quiet > > перед pam_krb5.so и pam_tcb.so, следовательно, для uid < 0 будет FAIL. > > > > Вы перенесли > > password [success=2 default=ignore] > > в конец стека, это как вообще? > > Да, тут нужно разобраться и поправить. [success=2 default=ignore] в конце - > что-то странное. > > Вообще, зачем применять такую связку? > password required pam_passwdqc.so config=/etc/passwdqc.conf > password [success=2 default=ignore] pam_tcb.so use_authtok shadow > fork prefix=$2y$ count=8 nullok write_to=tcb > password requisite pam_succeed_if.so uid >= 500 quiet > password required pam_krb5.so use_authtok > > Весь её смысл в том, что если Kerberos-пароль изменён успешно, то заменить, > заодно, и локальный пароль... Но нужно ли так делать??? Тут написано другое: сперва поменять локальный пароль с помощью pam_tcb, а если это не получилось и uid >= 500, то поменять нелокальный пароль с помощью pam_krb5. Странно если это не работает. > > Странно, что userpasswd вообще потребовались такие значительные изменения. > > Ну, если всё виснет из-за того, что вместо одного запроса на пароль, приходит > два, то как быть иначе? Второй запрос на текущий пароль в автомате не > предусмотрен. По идее, не должно приходить два разных запроса на пароль, зачем? Где-то что-то не так, если это происходит. > > Весь её смысл в том, что если Kerberos-пароль изменён успешно, то заменить, > > заодно, и локальный пароль... Но нужно ли так делать??? > > Тут написано другое: сперва поменять локальный пароль с помощью pam_tcb, а > если это не получилось и uid >= 500, то поменять нелокальный пароль с помощью > pam_krb5. Странно если это не работает. Ну, так не пойдёт. А если я, вообще, не хочу менять локальный пароль? И, при этом, пароли совпадают? Это какое-то странное непредсказуемое поведение. К тому же... "если это не получилось и uid >= 500", то проверяется глобальный пароль, а изменяется, всё равно локальный. Я думаю так получается, потому что модуль pam_tcb стоит первым в связке на последующую операцию, после проверки пароля. Это, конечно, пока догадка, но она согласуется с практикой. Поэтому ничего странного в этом нет - каждый этап операции смены пароля (проверка текущего и ввод нового паролей) проходит всю цепочку модулей заново. > > > Странно, что userpasswd вообще потребовались такие значительные изменения. > > > > Ну, если всё виснет из-за того, что вместо одного запроса на пароль, > > приходит два, то как быть иначе? Второй запрос на текущий пароль в > > автомате не предусмотрен. > > По идее, не должно приходить два разных запроса на пароль, зачем? > Где-то что-то не так, если это происходит. Ну, оно так, при текущих настройках для всех модулей - pam_krb5, pam_sss, pam_winbind. Так что проблема именно в настройках. Давайте, в деталях разбирём текующую настройку смены глобального пароля для модуля pam_krb5. password required pam_passwdqc.so config=/etc/passwdqc.conf password [success=2 default=ignore] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password requisite pam_succeed_if.so uid >= 500 quiet password required pam_krb5.so use_authtok Шаг первый - модуль required pam_passwdqc.so - локальная проверка на качество пароля. Применяется, как локальная политика на данном узле, но для глобального пароля. Сомнительный вариант, если на других узлах политика ослаблена (можно сменить на другом узле). Кроме того, политика перекрывает политику глобального сервиса (у KDC есть свои настройки на качество пароля). Например, похожесть нового пароля на предыдущие. Шаг второй - в нём основная странность. Попытка проверки локального пароля и последующая смена локального же пароля, если проверка прошла удачно (два последующих модуля, при этом, вообще, пропускаются). Для чего это, вообще, надо, если задача сменить глобальный пароль? Шаг третий - проверка uid'a. Если текущий локальный пароль не подошёл, то выполняется попытка проверки текущего пароля осуществляется только для пользователей с uid'ов больше или равных 500. Шаг четвертый - выполняется проверка глобального пароля. При этом дальнейшая смена пароля, все равно, выполняется локально. Насколько я понял важен порядок следования модулей (плюс флаг use_authtok, конечно). Если модуль pam_krb5 поставить перед модулем pam_tcb, то глобальный пароль меняется. При этом, сначала запрашивается Kerberos-пароль, а потом локальный. Я попытался поменять порядок. Сначала попробовал так: password [success=ok default=2] pam_succeed_if.so uid >= 500 quiet password sufficient pam_krb5.so use_authtok password required pam_passwdqc.so config=/etc/passwdqc.conf password sufficient pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password required pam_deny.so [sin@tor pam-config]$ passwd Current Kerberos password: .... Enter new password: Re-type new password: passwd: all authentication tokens updated successfully. [sin@tor pam-config]$ kinit Password for sin@DARKMASTERSIN.NET: kinit: Password incorrect while getting initial credentials Kerberos-пароль не поменялся. Потом попробовал так (убрал use_authtok для pam_krb5.so): password [success=ok default=2] pam_succeed_if.so uid >= 500 quiet password sufficient pam_krb5.so password required pam_passwdqc.so config=/etc/passwdqc.conf password sufficient pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb password required pam_deny.so [sin@tor pam-config]$ passwd Current Kerberos password: Enter new Kerberos password: Retype new Kerberos password: passwd: all authentication tokens updated successfully. [sin@tor pam-config]$ kinit Password for sin@DARKMASTERSIN.NET: Kerberos-Пароль поменялся. При этом (без use_authok) Kerberos-пароль запрашивается снова, когда отрабатывает локальный: [sin@tor pam-config]$ passwd Current Kerberos password: Changing password for sin. Enter current password: Current Kerberos password: ... |