Авторизация через локальных пользователей в Dovecot

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
korbnik
сержант
Сообщения: 267
Зарегистрирован: 2008-03-25 14:29:08
Откуда: Москва
Контактная информация:

Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение korbnik » 2014-12-08 12:28:16

Добрый день!

Как настроить Dovecot, чтобы авторизация проходила через локальных пользователей?

Пытаюсь с хоста (10.1.10.54) зайти на хост (10.1.10.53), где установлен Dovecot (настроен на 1110 порт):

Код: Выделить всё

[root@mxnvs korenevb]# telnet 10.1.10.53 1110
Trying 10.1.10.53...
Connected to 10.1.10.53.
Escape character is '^]'.
+OK Dovecot ready.
user korenevb
+OK
pass qwerty123
-ERR Authentication failed.
quit
+OK Logging out
Connection closed by foreign host.
[root@mxnvs korenevb]# 
Смотрю в журнал:

Код: Выделить всё

Dec 08 11:47:24 master: Warning: Killed with signal 15 (by pid=11693 uid=0 code=kill)
Dec 08 11:47:25 master: Info: Dovecot v2.0.9 starting up (core dumps disabled)
Dec 08 11:47:36 auth: Debug: Loading modules from directory: /usr/lib64/dovecot/auth
Dec 08 11:47:36 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libauthdb_ldap.so
Dec 08 11:47:36 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
Dec 08 11:47:36 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libmech_gssapi.so
Dec 08 11:47:36 auth: Debug: auth client connected (pid=11717)
Dec 08 11:48:16 auth: Debug: client in: AUTH    1       PLAIN   service=pop3    lip=10.1.10.53  rip=10.1.10.54  lport=1110      rport=44278 resp=AGtvcmVuZXZiAG5ia2tibjEyMw==
Dec 08 11:48:16 auth: Debug: Loading modules from directory: /usr/lib64/dovecot/auth
Dec 08 11:48:16 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libauthdb_ldap.so
Dec 08 11:48:16 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
Dec 08 11:48:16 auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libmech_gssapi.so
Dec 08 11:48:16 auth: Debug: passwd(korenevb@krasnodar.vbrr.ru,10.1.10.54): lookup
Dec 08 11:48:16 auth: Info: passwd(korenevb@krasnodar.vbrr.ru,10.1.10.54): unknown user
Dec 08 11:48:18 auth: Debug: client out: FAIL   1       user=korenevb@krasnodar.vbrr.ru
Dec 08 11:48:34 pop3-login: Info: Aborted login (auth failed, 1 attempts): user=<korenevb@krasnodar.vbrr.ru>, method=PLAIN, rip=10.1.10.54, lip=10.1.10.53
Говорит, что пользователя такого нет, но пользователь есть, вот:

Код: Выделить всё

[root@mxkras ~]# id korenevb
uid=500(korenevb) gid=500(korenevb) groups=500(korenevb)
[root@mxkras ~]# cat /etc/passwd | grep korenevb
korenevb:x:500:500:Boris:/home/korenevb:/bin/bash
[root@mxkras ~]# 
Настройки Dovecot:

Код: Выделить всё

[root@mxkras ~]# doveconf
# 2.0.9: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-279.el6.x86_64 x86_64 Red Hat Enterprise Linux Server release 6.3 (Santiago) 
auth_anonymous_username = anonymous
auth_cache_negative_ttl = 1 hours
auth_cache_size = 0
auth_cache_ttl = 1 hours
auth_debug = yes
auth_debug_passwords = yes
auth_default_realm = krasnodar.vbrr.ru
auth_failure_delay = 2 secs
auth_first_valid_uid = 500
auth_gssapi_hostname = 
auth_krb5_keytab = 
auth_last_valid_uid = 0
auth_master_user_separator = 
auth_mechanisms = plain login
auth_realms = 
auth_socket_path = auth-userdb
auth_ssl_require_client_cert = no
auth_ssl_username_from_cert = no
auth_use_winbind = no
auth_username_chars = abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@
auth_username_format = 
auth_username_translation = 
auth_verbose = yes
auth_verbose_passwords = no
auth_winbind_helper_path = /usr/bin/ntlm_auth
auth_worker_max_count = 30
base_dir = /var/run/dovecot/
config_cache_size = 1 M
debug_log_path = 
default_client_limit = 1000
default_idle_kill = 60
default_internal_user = dovecot
default_login_user = dovenull
default_process_limit = 100
default_vsz_limit = 256 M
deliver_log_format = msgid=%m: %$
dict_db_config = 
director_doveadm_port = 0
director_mail_servers = 
director_servers = 
director_user_expire = 15 mins
disable_plaintext_auth = no
dotlock_use_excl = yes
doveadm_socket_path = doveadm-server
doveadm_worker_count = 0
first_valid_gid = 1
first_valid_uid = 500
hostname = 
imap_capability = 
imap_client_workarounds = 
imap_id_log = 
imap_id_send = 
imap_idle_notify_interval = 2 mins
imap_logout_format = bytes=%i/%o
imap_max_line_length = 64 k
info_log_path = 
last_valid_gid = 0
last_valid_uid = 0
lda_mailbox_autocreate = no
lda_mailbox_autosubscribe = no
lda_original_recipient_header = 
libexec_dir = /usr/libexec/dovecot
listen = *
lmtp_proxy = no
lmtp_save_to_detail_mailbox = no
lock_method = fcntl
log_path = /var/log/dovecot/dovecot.log
log_timestamp = "%b %d %H:%M:%S "
login_access_sockets = 
login_greeting = Dovecot ready.
login_log_format = %$: %s
login_log_format_elements = user=<%u> method=%m rip=%r lip=%l mpid=%e %c
login_trusted_networks = 
mail_access_groups = 
mail_attachment_dir = 
mail_attachment_fs = sis posix
mail_attachment_hash = %{sha1}
mail_attachment_min_size = 128 k
mail_cache_fields = flags
mail_cache_min_mail_count = 0
mail_chroot = 
mail_debug = no
mail_fsync = optimized
mail_full_filesystem_access = no
mail_gid = 
mail_home = 
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_log_prefix = "%s(%u): "
mail_max_keyword_length = 50
mail_max_lock_timeout = 0
mail_max_userip_connections = 10
mail_never_cache_fields = imap.envelope
mail_nfs_index = no
mail_nfs_storage = no
mail_plugin_dir = /usr/lib64/dovecot
mail_plugins = 
mail_privileged_group = mail
mail_save_crlf = no
mail_temp_dir = /tmp
mail_uid = 
mailbox_idle_check_interval = 30 secs
mailbox_list_index_disable = no
maildir_copy_with_hardlinks = yes
maildir_stat_dirs = no
maildir_very_dirty_syncs = no
master_user_separator = 
mbox_dirty_syncs = yes
mbox_dotlock_change_timeout = 2 mins
mbox_lazy_writes = yes
mbox_lock_timeout = 5 mins
mbox_min_index_size = 0
mbox_read_locks = fcntl
mbox_very_dirty_syncs = no
mbox_write_locks = fcntl
mdbox_preallocate_space = no
mdbox_rotate_interval = 0
mdbox_rotate_size = 2 M
mmap_disable = no
passdb {
  args = 
  deny = no
  driver = passwd
  master = no
  pass = no
}
pop3_client_workarounds = 
pop3_enable_last = no
pop3_fast_size_lookups = no
pop3_lock_session = no
pop3_logout_format = top=%t/%p, retr=%r/%b, del=%d/%m, size=%s
pop3_no_flag_updates = no
pop3_reuse_xuidl = no
pop3_save_uidl = no
pop3_uidl_format = %08Xu%08Xv
postmaster_address = 
protocols = imap pop3
quota_full_tempfail = no
recipient_delimiter = +
rejection_reason = Your message to <%t> was automatically rejected:%n%r
rejection_subject = Rejected: %s
sendmail_path = /usr/sbin/sendmail
service anvil {
  chroot = empty
  client_limit = 0
  drop_priv_before_exec = no
  executable = anvil
  extra_groups = 
  group = 
  idle_kill = 4294967295 secs
  privileged_group = 
  process_limit = 1
  process_min_avail = 1
  protocol = 
  service_count = 0
  type = anvil
  unix_listener anvil-auth-penalty {
    group = 
    mode = 0600
    user = 
  }
  unix_listener anvil {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service auth-worker {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = auth -w
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener auth-worker {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service auth {
  chroot = 
  client_limit = 4096
  drop_priv_before_exec = no
  executable = auth
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-client {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-login {
    group = 
    mode = 0600
    user = $default_internal_user
  }
  unix_listener auth-master {
    group = 
    mode = 0600
    user = 
  }
  unix_listener auth-userdb {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/login {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service config {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = config
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = config
  unix_listener config {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service dict {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dict
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dict {
    group = 
    mode = 0600
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service director {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = director
  extra_groups = 
  fifo_listener login/proxy-notify {
    group = 
    mode = 00
    user = 
  }
  group = 
  idle_kill = 4294967295 secs
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener director-admin {
    group = 
    mode = 0600
    user = 
  }
  unix_listener login/director {
    group = 
    mode = 00
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service dns_client {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = dns-client
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = 
  unix_listener dns-client {
    group = 
    mode = 0666
    user = 
  }
  unix_listener login/dns-client {
    group = 
    mode = 0666
    user = 
  }
  user = $default_internal_user
  vsz_limit = 18446744073709551615 B
}
service doveadm {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = doveadm-server
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 1
  type = 
  unix_listener doveadm-server {
    group = 
    mode = 0600
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service imap-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = imap-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener imap {
    address = 
    port = 1143
    ssl = no
  }
  inet_listener imaps {
    address = 
    port = 993
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 64 M
}
service imap {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = imap
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = imap
  service_count = 1
  type = 
  unix_listener login/imap {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service lmtp {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = lmtp
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = lmtp
  service_count = 0
  type = 
  unix_listener lmtp {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 0
}
service log {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = log
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = log
  user = 
  vsz_limit = 18446744073709551615 B
}
service pop3-login {
  chroot = login
  client_limit = 0
  drop_priv_before_exec = no
  executable = pop3-login
  extra_groups = 
  group = 
  idle_kill = 0
  inet_listener pop3 {
    address = 
    port = 1110
    ssl = no
  }
  inet_listener pop3s {
    address = 
    port = 995
    ssl = yes
  }
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = login
  user = $default_login_user
  vsz_limit = 64 M
}
service pop3 {
  chroot = 
  client_limit = 1
  drop_priv_before_exec = no
  executable = pop3
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 1024
  process_min_avail = 0
  protocol = pop3
  service_count = 1
  type = 
  unix_listener login/pop3 {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
service ssl-params {
  chroot = 
  client_limit = 0
  drop_priv_before_exec = no
  executable = ssl-params
  extra_groups = 
  group = 
  idle_kill = 0
  privileged_group = 
  process_limit = 0
  process_min_avail = 0
  protocol = 
  service_count = 0
  type = startup
  unix_listener login/ssl-params {
    group = 
    mode = 0666
    user = 
  }
  user = 
  vsz_limit = 18446744073709551615 B
}
shutdown_clients = yes
ssl = no
ssl_ca = 
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_cert_username_field = commonName
ssl_cipher_list = ALL:!LOW:!SSLv2:!EXP:!aNULL
ssl_key = </etc/pki/dovecot/private/dovecot.pem
ssl_key_password = 
ssl_parameters_file = ssl-parameters.dat
ssl_parameters_regenerate = 168
ssl_verify_client_cert = no
syslog_facility = mail
userdb {
  args = blocking=no
  driver = passwd
}
valid_chroot_dirs = 
verbose_auth = no
verbose_proctitle = yes
verbose_ssl = no
version_ignore = no
[root@mxkras ~]# 

В чём тогда проблема, может настройки неправильны?

P.S. Настраивается в операционной системе - Red Hat Enterprise Linux Server release 6.3 (Santiago)


Заранее благодарен, Борис.
-= ФриБииСДи! И не БиСДи! =- Copyright (Korenev Boris)

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение skeletor » 2014-12-08 17:39:05

Вы в одном конфиге всунили и pam и passwd, но видимо не до конца настроили. Советую начать с http://wiki2.dovecot.org/SystemUsers

FiL
ст. лейтенант
Сообщения: 1374
Зарегистрирован: 2010-02-05 0:21:40

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение FiL » 2014-12-08 18:01:03

skeletor,
а где вы нашли у человека ссылку на pam?

korbnik,
a почему у вас ищется юзер korenevb@krasnodar.vbrr.ru, а не korenevb ?
Вот этот

Код: Выделить всё

auth_default_realm = krasnodar.vbrr.ru 
мне кажется категорически лишним.
И таки в Passdb надо поставить driver=pam. Хотя-бы потому, что в шапке пароли не лежат в /etc/passwd.
Можно, конечно ставить driver=shadow. Но это неправильно.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение skeletor » 2014-12-08 18:06:42

Код passdb используется только в pam, хотя самой строки driver=pam нет. А для passwd используется только userdb. А автор смешал и то и то. Это справедливо только для локальных юзеров. Ибо тот же mysql использует оба блока.

FiL
ст. лейтенант
Сообщения: 1374
Зарегистрирован: 2010-02-05 0:21:40

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение FiL » 2014-12-08 18:11:14

skeletor писал(а):Код passdb используется только в pam, хотя самой строки driver=pam нет. А для passwd используется только userdb. А автор смешал и то и то. Это справедливо только для локальных юзеров. Ибо тот же mysql использует оба блока.
Кхм.. странное утверждение. Причем опровергается прямо вашей-же ссылкой.
If you wish to use system passwords, you'll want to use one of these passdbs:

PAM: Most commonly used in Linux and BSDs nowadays.
BSDAuth: BSD authentication is used by OpenBSD.
Passwd: System users (NSS, /etc/passwd, or similiar). This may work instead of PAM (mostly in some BSDs).
Shadow: Shadow passwords for system users (NSS, /etc/shadow or similiar). Deprecated by PAM nowadays, but it should work with Linux and Solaris.

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение skeletor » 2014-12-08 18:14:49

Правильно. Пройдите по ссылкам и посмотрите примеры настроек. Может конечно и я неправ.

FiL
ст. лейтенант
Сообщения: 1374
Зарегистрирован: 2010-02-05 0:21:40

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение FiL » 2014-12-08 18:26:59

Ну естественно, что в примерах не будет driver=passwd для passdb. Потому, что последних лет 20 (может 18) никто не держит пароли в /etc/passwd. Но в целом это вполне себе валидная конфигурация.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение Alex Keda » 2014-12-09 0:33:03

Убей их всех! Бог потом рассортирует...

Аватара пользователя
korbnik
сержант
Сообщения: 267
Зарегистрирован: 2008-03-25 14:29:08
Откуда: Москва
Контактная информация:

Re: Авторизация через локальных пользователей в Dovecot

Непрочитанное сообщение korbnik » 2014-12-09 9:35:45

Добрый день!

Вообщем я сделал вот так:

Код: Выделить всё

passdb {
driver = pam
args = dovecot
}
и эту строку добавил:

Код: Выделить всё

auth_username_format = %n
это чтобы перед поиском пользователя брал только имя а домен убирал.

И всё пошло. Спасибо большое за подсказки.
-= ФриБииСДи! И не БиСДи! =- Copyright (Korenev Boris)