У нас на сервере Ubuntu настроен opnldap, и мы получаем следующее сообщение для пользователя:
auth: pam_unix(dovecot:account): account has expired (account expired)
Sep 3 19:05:03 auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=XXXX rhost=::1 user=XXXX
Я успешно сменил пароль с помощью ldappasswd, но ошибка все еще сохраняется. Проведя некоторые исследования, выяснилось, что shadowLastChange не обновляется.
Как мы можем решить эту проблему?
/usr/share/slapd/slapd.conf
access to attrs=userPassword,shadowLastChange
by dn="@ADMIN@" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
# The admin dn has full write access, everyone else
# can read everything.
access to *
by dn="@ADMIN@" write
by * read
Хорошо, похоже, это проблема PAM.
Если я отредактирую /etc/nsswitch.conf следующим образом:
shadow: compat
Я не получаю сообщение о том, что срок действия учетной записи истек.
Если я изменю это на:
shadow: files ldap
Да. Но в любом случае я все равно получаю ошибку голубятни.
решение1
яделатьНе хотелось бы поднимать мертвый вопрос, но, учитывая, что это один из лучших результатов поиска по запросу «dovecot pam authentication failure ldap», позвольте мне добавить немного дополнительных знаний:
Единственное, что я видел в своем тестировании, что обновляет shadowAccount
атрибуты, это passwd
команда, когда вы изменяете пароль для пользователя в LDAP... Большинство других инструментов не слишком заботятся о классе и его атрибутах и не будут их трогать. Однако я обнаружил, что классы нужно добавлять shadowAccount
только к пользователямshadowAccount
если они собираются входить в хост, с тех порделаетзабота. Если вы просто делаете что-то вроде аутентификации электронной почты (Dovecot), то это не очень полезно. Ямогздесь я ошибаюсь, но я пока не видел ничего, кроме как при входе в систему хоста обращались бы к shadowAccount
атрибутам.
Теперь, если вы используете Dovecot для аутентификациичерезPAM (который, как я предполагаю, вы, вероятно, и делаете, поскольку Dovecot запрашивает его, и вы меняете nsswitch
), то, пожалуйста, имейте в виду, что хотя, да, PAM будет обращать внимание на эти дополнительные атрибуты, вам все равно нужны правильные инструменты для их изменения... то есть все, что меняет пароли пользователей, также должно проходить через PAM. Непопулярное мнение, как это может быть, если вы не требуете входов на хост, а только такие службы, как Dovecot или другие, нет необходимости вовлекать PAM, поскольку он будет проверять гораздо больше вещей, которые, скорее всего, будут неактуальны. (В лучшем случае он может обеспечить соблюдение других вещей, таких как, да, истечение срока действия пароля, но лично я бы не стал обеспечивать соблюдение таких вещей, когда служба, в которую вы входите, имеетнет возможности изменить пароль(вроде этого) В долгосрочной перспективе, вероятно, будет проще, если службы входа, не являющиеся хостами/оболочками, будут сами проверять LDAP, что позволит использовать другие функции, например фильтры поиска.специфичные для данной услуги.
Однакопредполагаявы настроили Dovecot для проверки самого LDAP, а не для использования PAM, в конце Dovecot 10-auth.conf
находится список !include
строк для различных механизмов аутентификации, таких как LDAP, SQL и т. д. По умолчанию файл auth-system.conf.ext
включендодругие механизмы, такие как LDAP. Это означает, что, поскольку в моем тестировании Dovecot проверяет этив том порядке, в котором они предоставлены, Dovecot сначала попытается аутентифицировать пользователя с помощью PAM, а затем, если это не удастся, аутентифицировать с помощью LDAP. Следовательно, вы получите ошибку PAM, сообщающую, что да, authentication failure
(а также первую, указывающуючтоЕсли бы вы изменили этот порядок так, чтобы метод, который, скорее всего, будет успешным (можно предположить, LDAP), запрашивался первым, то не было бы необходимости проверять PAM, и, следовательно, не было бы никакой ошибки, выдаваемой PAM.
Чтобы решить эту проблему, ваммогзакомментируйте !include auth-system.conf.ext
, но это может привести к тому, что системные пользователи (например, root
или postmaster
) будут считаться несуществующими, если они не настроены в LDAP.
Мое личное решение этой проблемы состояло в том, чтобы вырезать эту строку и вставить ее в конец.нижний, так:
#!include auth-deny.conf.ext
#!include auth-master.conf.ext
!include auth-ldap.conf.ext
#!include auth-sql.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
!include auth-system.conf.ext
Это означает, что Dovecot будетпервыйпроконсультируйтесь с LDAP,затемЕсли, как показало мое тестирование, LDAP не дал результатов, обратитесь к PAM.
решение2
Никогда раньше не отвечал на свой собственный вопрос, но я хотел поделиться, если кто-то еще с этим столкнется. Это было связано с тем, что saslauthd не был установлен, настроен и запущен. Как только я это сделал, ошибка исчезла.