Назад | Перейти на главную страницу

Dovecot - отказано в разрешении на ошибку авторизации

Следующий файл журнала возникает из моего текущего почтового журнала:

Apr 24 17:44:48 h2290750 dovecot: auth: Error: pgsql: Connect failed to mail: could not connect to server: Permission denied
Apr 24 17:44:48 h2290750 dovecot: auth: Error: #011Is the server running on host "localhost" (::1) and accepting
Apr 24 17:44:48 h2290750 dovecot: auth: Error: #011TCP/IP connections on port 5432?
Apr 24 17:44:48 h2290750 dovecot: auth: Error: could not connect to server: Permission denied
Apr 24 17:44:48 h2290750 dovecot: auth: Error: #011Is the server running on host "localhost" (127.0.0.1) and accepting
Apr 24 17:44:48 h2290750 dovecot: auth: Error: #011TCP/IP connections on port 5432?

Я проверил, что сервер postgresql прослушивает порт 5432. И мой pg_hba.conf выглядит так.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# Mail stuff
host    mail            mailreader      127.0.0.1/32            md5
host    mail            mailreader      ::1/128                 md5
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

Конфигурация подключения моего dovecot-sql.conf:

driver = pgsql
connect = host=localhost dbname=mail user=mailreader password=secret
default_pass_scheme = SHA512
password_query = SELECT email as user, password, 'maildir:/home/mail'||maildir as userdb_mail FROM users WHERE email = '%u'

Какие-либо предложения? Может быть, мне нужно хешировать секрет, чтобы dovecot подталкивал md5-хешированный пароль к pgsql?

Редактировать: psql -U mailreader -d mail оставляет мне приглашение SQL в базе данных mail

Не удалось подключиться к почте: не удалось подключиться к серверу: в доступе отказано. Сервер работает на хосте "localhost" (:: 1) и принимает

на самом деле намекал на проблему с SELinux. Изучив audit.log, я обнаружил, что следующая строка появляется постоянно.

type = AVC msg = audit (1398759363.514: 635): avc: denied {open} for pid = 12779 comm = "auth" name = "auth-token-secret.dat.tmp" dev = md1 ino = 11927980 scontext = unlimited_u: system_r: dovecot_auth_t: s0 tcontext = unlimited_u: object_r: dovecot_var_run_t: s0 tclass = файл

После установки основных утилит политики с помощью этой команды:

yum установить policycoreutils-python

Мне удалось создать исключение для SELinux с помощью команды audit2allow:

grep auth_t /var/log/audit/audit.log | audit2allow -M postgreylocal

После этого исключение можно загрузить в SELinux, используя:

semodule -i postgreylocal.pp

И это все. Бег как шарм.

Судя по всему, ваш пользователь postgres, mailreader, не имеет доступа к почте базы данных postgres.

Как только вы это исправите, он начнет работать на вас.

Эта часть сообщения:

Не удалось подключиться к почте: не удалось подключиться к серверу: Доступ запрещен
Сервер работает на хосте "localhost" (:: 1) и принимает

намекает на SELinux проблема с разрешением. Именно тогда SELinux запрещает инициировать TCP-соединение из вашего процесса dovecot.

Видеть SELinux не позволит dovecot подключиться к postgresql в списке fedora-selinux-list для примера политики, которая, как сообщается, работает.

Суть его в следующем:

module dovecotauthfixes 1.0;

require {
       type dovecot_auth_t;
       type postgresql_port_t;
       type postgresql_tmp_t;
       type postgresql_t;
       class sock_file write;
       class tcp_socket name_connect;
       class unix_stream_socket connectto;
}

#============= dovecot_auth_t ==============
allow dovecot_auth_t postgresql_port_t:tcp_socket name_connect;
allow dovecot_auth_t postgresql_t:unix_stream_socket connectto;
allow dovecot_auth_t postgresql_tmp_t:sock_file write;