Выручайте, народ. Целый день бьюсь сегодня и ещё на прошлой неделе немного - безрезультатно.
Имеется: Dovecot 1.2.5 на OpenSUSE 11.1 с одной стороны и Active Directory на Windows 2003 server SP2 с другой стороны. Хочется, чтобы Dovecot пускал пользователей, проверяя их наличие и пароли в домене Active Directory. На данный момент не так важно как именно - через PAM/Kerberos или через LDAP, но ни то, ни то не работает. При авторизации через LDAP ошибка "ldap_bind() failed: Other (e.g., implementation specific) error", а при авторизации через pam -- "pam_authenticate() failed: Permission denied". При этом тестирование kinit-ом вполне проходит, имя пользователя и пароль проверяются, если неправильный пароль -- ругается. Перерыл пол-интернета, видел вопросы с похожими проблемами, но без ответов по сути, к сожалению. LDAP работает как userdb (например, можно указать userdb ldap и passdb sql), но не как passdb. При попытке подключить его как passdb (т.е. если в конфигах ниже раскомментировать секцию passdb ldap и закомментировать остальные passdb) пользователя не пускает и в log/mail пишет следующее:
Oct 5 11:24:42 suse11 dovecot: auth(default): new auth connection: pid=24011
Oct 5 11:24:43 suse11 dovecot: auth(default): client out: FAIL 1 user=user1
Oct 5 11:24:53 suse11 dovecot: auth(default): client in: AUTH 2 PLAIN service=imap lip=10.0.0.180 rip=10.0.0.7 lport=143 rport=3125 resp =AGRlbWlkAMzz6uj05fj8
Oct 5 11:24:53 suse11 dovecot: auth(default): ldap(user1,10.0.0.7): ldap_bind() failed: Other (e.g., implementation specific) error
Oct 5 11:24:55 suse11 dovecot: auth(default): client out: FAIL 2 user=user1 temp
Oct 5 11:25:08 suse11 dovecot: imap-login: Disconnected (auth failed, 2 attempts): user=<user1>, method=PLAIN, rip=10.0.0.7, lip=10.0.0.180
Если же использовать passdb pam (и userdb static к примеру), то имеем это:
Oct 5 15:07:59 suse11 dovecot: auth-worker(default): pam(user1,10.0.0.7): lookup service=dovecot
Oct 5 15:07:59 suse11 dovecot: auth-worker(default): pam(user1,10.0.0.7): #1/1 style=1 msg=Password:
Oct 5 15:07:59 suse11 dovecot: auth-worker(default): pam(user1,10.0.0.7): pam_authenticate() failed: Permission denied
Oct 5 15:08:00 suse11 dovecot: auth(default): new auth connection: pid=27686
Oct 5 15:08:01 suse11 dovecot: auth(default): client out: FAIL 1 user=user1
Oct 5 15:08:06 suse11 dovecot: imap-login: Disconnected (auth failed, 1 attempts): user=<user1>, method=PLAIN, rip=10.0.0.7, lip=10.0.0.180
Имеется:
dovecot.conf:
base_dir = /var/run/dovecot/
protocols = imap imaps managesieve
disable_plaintext_auth = no
ssl = no
login_dir = /var/run/dovecot/login
mail_location = maildir:/home/mail/%u:INDEX=/home/mailindexes/%u
maildir_copy_with_hardlinks = yes
protocol imap {
mail_plugin_dir = /usr/lib/dovecot/modules/imap
}
protocol pop3 {
mail_plugin_dir = /usr/lib/dovecot/modules/pop3
}
protocol lda {
postmaster_address = postmaster@example.com
mail_plugins = sieve
mail_plugin_dir = /usr/local/lib/dovecot/lda
auth_socket_path = /var/run/dovecot/auth-master
}
auth_executable = /usr/local/libexec/dovecot/dovecot-auth
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
mechanisms = login plain
# Это PAM, который не работает
# passdb pam {
# args = dovecot
# }
# Это LDAP, который работает
# passdb ldap {
# Path for LDAP configuration file, see doc/dovecot-ldap-example.conf
# args = /usr/local/etc/dovecot-ldap-pass.conf
# }
# Это Statiс, который тоже работает, если работает passdb, конечно
#userdb static {
# args = uid=1005 gid=1010 home=/home/mail/%u
#}
# Это LDAP, который НЕ работает
# userdb ldap {
# Path for LDAP configuration file, see doc/dovecot-ldap-example.conf
# args = /usr/local/etc/dovecot-ldap.conf
# }
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0666
}
client {
path = /var/run/dovecot/auth-client
mode = 0666
}
}
}
dict { }
plugin {
sieve = /home/mail/sieve/main/%u.sieve
sieve_dir = /home/mail/sieve/personal/%u
sieve_global_path = /home/mail/sieve/default.sieve
sieve_global_dir = /home/mail/sieve/global
}
protocol managesieve {
managesieve_implementation_string = dovecot
}
---- end of dovecot.conf
dovecot-ldap.conf:
hosts = windows-server
dn = CN=dovecot,CN=Users,DC=domain,DC=local
dnpass = *****
auth_bind = yes
auth_bind_userdn = CN=%u,CN=Users,DC=domain,DC=local
ldap_version = 3
base = CN=Users,DC=domain,DC=local
user_attrs = =mail=/home/mail/%u,=uid=1005,=gid=1010
user_filter = (&(objectCategory=user)(sAMAccountName=%u))
pass_attrs = sAMAccountName=user
pass_filter = (&(objectCategory=user)(sAMAccountName=%u))
---- end of dovecot-ldap.conf
/etc/pam.d/dovecot:
#%PAM-1.0
auth sufficient pam_krb5.so
account sufficient pam_permit.so
---- end of /etc/pam.d/dovecot
--- krb5.conf
[libdefaults]
default_realm = DOMAIN.LOCAL
clockskew = 300
[realms]
DOMAIN.LOCAL = {
default_domain = domain.local
kdc = 10.0.0.3 <-- IP-адрес, потому что с <name>.local какие-то проблемы здесь
admin_server = windowsserver.domain.local
}
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
[domain_realm]
.domain.local = DOMAIN.LOCAL
[appdefaults]
pam = {
ticket_lifetime = 1d
renew_lifetime = 1d
forwardable = true
proxiable = false
minimum_uid = 1
external = sshd
use_shmem = sshd
clockskew = 300
}
--- end of krb5.conf