При текущих настройках, по-умолчанию, вместо kerberos-пароля изменяется локальный. Команда passwd сразу запрашивает локальный пароль и, если задать локальный пароль неверно, то следом запрашивается Kerberos-пароль. Если Kerberos-пароль указать верно, что изменяется только локальный пароль. Поведение аналогично как для control system-auth krb5, так и для control system-auth krb5_ccreds. [sin@tor src]$ passwd Changing password for sin. Enter current password: Current Kerberos password: You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use an 8 character long password with characters from at least 3 of these 4 classes, or a 7 character long password containing characters from all the classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 40 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "Fasten3anchor7brisk". Enter new password: Re-type new password: passwd: all authentication tokens updated successfully. [sin@tor src]$ passwd Enter current password: Current Kerberos password: Частично проблема решается вот таким исправлением /etc/pam.d/system-auth-krb5: diff --git a/pam-config/system-auth-krb5 b/pam-config/system-auth-krb5 index f52bf8e..b883eed 100644 --- a/pam-config/system-auth-krb5 +++ b/pam-config/system-auth-krb5 @@ -10,9 +10,9 @@ account required pam_krb5.so account required pam_permit.so 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 +password [success=2 default=ignore] pam_tcb.so use_authtok shadow fork prefix=$2y$ count=8 nullok write_to=tcb session [success=2 default=ignore] pam_tcb.so session requisite pam_succeed_if.so uid >= 500 quiet При этом сначала запрашивается Kerberos-пароль, а локальный пароль можно задать любой. [sin@tor ~]$ sudo tail /var/log/secure -f ... ^Z [1]+ Stopped sudo tail /var/log/secure -f [sin@tor ~]$ bg [1]+ sudo tail /var/log/secure -f & [sin@tor ~]$ sudo tail /var/log/messages -f ... ^Z [2]+ Stopped sudo tail /var/log/messages -f [sin@tor ~]$ bg [2]+ sudo tail /var/log/messages -f & [sin@tor ~]$ passwd Current Kerberos password: Changing password for sin. Enter current password: You can now choose the new password or passphrase. A valid password should be a mix of upper and lower case letters, digits, and other characters. You can use an 8 character long password with characters from at least 3 of these 4 classes, or a 7 character long password containing characters from all the classes. An upper case letter that begins the password and a digit that ends it do not count towards the number of character classes used. A passphrase should be of at least 3 words, 11 to 40 characters long, and contain enough different characters. Alternatively, if no one else can see your terminal now, you can pick this as your password: "grand*Herd_Knee". Enter new password: Feb 22 13:53:53 tor passwd[5302]: pam_tcb(passwd:chauthtok): Authentication failed for sin from sin(uid=500), for password management Re-type new password: Feb 22 13:54:09 tor passwd[5302]: pam_krb5(passwd:chauthtok): user sin changed Kerberos password Feb 22 13:54:09 tor passwd[5302]: pam_tcb(passwd:chauthtok): Password for sin changed by sin(uid=500) Feb 22 13:54:09 tor passwd[5302]: PAM bad jump in stack passwd: Permission denied. Лог сервера, при этом чист: фев 22 13:53:33 base.darkmastersin.net krb5kdc[2803](info): AS_REQ (6 etypes {18 17 16 23 25 26}) 2a02:2698:7020:2::19: ISSUE: authtime 1487757213, etypes {rep=23 tkt=23 ses=23}, sin@DARKMASTERSIN.NET for kadmin/changepw@DARKMASTERSIN.NET фев 22 13:54:09 base.darkmastersin.net kadmind[20267](Notice): chpw request from 2a02:2698:7020:2::19%99 for sin@DARKMASTERSIN.NET: success
Внёс исправления, 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: ...