Наконец-то дошли руки до Вашей проблемы. С правами пользователей как раз всё очевидно. Электронная почта -- это не только правильная маршрутизация сообщений между серверами, но и вполне конкретные директории и файлы в файловой системе сервера. И если у postfix или dovecot нет прав на чтение/запись этих директорий и файлов, то никакой почты рассылаться/доставляться не будет просто потому, что программа не сможет поместить сообщение в файл в почтовой директории. postfix и dovecot -- очень гибкие в плане настроек программы и, в принципе, можно добиться, чтобы каждая из них по отдельности корректно соблюдала права каждого почтового пользователя, но зачем? Обычно поступают одним из двух путей: либо всю работу с файловой системой (доставкой почты в почтовые ящики и последующую работу с этими ящиками) перекладывают на плечи dovecot, а точнее, его сервиса lmtp (о чём я пытался сказать в своём
самом первом посте в этой теме), либо всю работу с файловой системой осуществляют от имени одного и того же пользователя, мне в этом отношении нравится системный пользователь mail (uid -- 8, gid -- 8 ), но подойдёт и совершенно любой пользователь с правами на запись в корневую почтовую директорию. Второй путь -- стандартный для публичных почтовых сервисов, типа mail.ru: не будут же, честное слово, для каждого из миллионов почтовых ящиков заводить учётку с отдельными правами.
Ладно, перейдём к делу. Я собрал связку postfix и dovecot на своём ноутбуке с минимальными настройками (без tls и аутентификации SMTP), и с привязкой к каталогу по Вашему образцу:
dn: dc=ldaptest,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: ldaptest.com
dc: ldaptest
# People, ldaptest.com
dn: ou=People,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: People
# group, ldaptest.com
dn: ou=group,dc=ldaptest,dc=com
objectClass: organizationalUnit
ou: group
# users, group, ldaptest.com
dn: cn=users,ou=group,dc=ldaptest,dc=com
objectClass: posixGroup
gidNumber: 10000
cn: users
# new, People, ldaptest.com
dn: cn=new,ou=People,dc=ldaptest,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
uid: new
cn: new
uidNumber: 10003
gidNumber: 10000
sn: new
userPassword: newPassword
homeDirectory: /home/mail/new
mail: new@post.com
dn: cn=test3,ou=People,dc=ldaptest,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
loginShell: /bin/bash
uid: test3
cn: test3
uidNumber: 10002
gidNumber: 10000
sn: test3
userPassword: test3Password
homeDirectory: /home/mail/test3
mail: test3@post.com
Для работы с почтовыми директориями и файлами я специально завёл фиктивного пользователя virtual-mail (uid -- 999, gid -- 999). Директория /home/mail принадлежит этому пользователю.
Настройки postfix: минимальный файл /etc/postfix/main.cf:
mynetworks = 127.0.0.0/8
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
virtual_mailbox_domains = post.com
virtual_transport = virtual
virtual_mailbox_base = /home/mail/
virtual_mailbox_maps = ldap:/etc/postfix/ldap_virtual_mailbox_maps.cf
virtual_uid_maps = static:999
virtual_gid_maps = static:999
virtual_minimum_uid = 999
Файл /etc/postfix/ldap_virtual_mailbox_maps.cf:
server_host = ldap://127.0.0.1:389
search_base = ou=People,dc=ldaptest,dc=com
version = 3
query_filter = (&(objectClass=inetOrgPerson)(mail=%s))
result_attribute = uid
result_format = %s/
Настройки dovecot: чуть более развёрнутый (для дебага) файл /etc/dovecot/dovecot.conf:
log_path = /var/log/dovecot.log
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_debug = yes
auth_debug = yes
auth_verbose = yes
ssl = no
protocols = imap
namespace inbox {
inbox = yes
location =
mailbox Drafts {
auto = subscribe
special_use = \Drafts
}
mailbox Junk {
auto = no
special_use = \Junk
}
mailbox Sent {
auto = subscribe
special_use = \Sent
}
mailbox "Sent Messages" {
auto = no
special_use = \Sent
}
mailbox Trash {
auto = subscribe
special_use = \Trash
}
prefix =
}
mail_uid = 999
first_valid_uid = 999
last_valid_uid = 999
mail_gid = 999
first_valid_gid = 999
last_valid_gid = 999
passdb {
driver = ldap
args = /etc/dovecot/dovecot-ldap-bind-auth.conf
}
userdb {
driver = static
args = uid=999 gid=999 home=/home/mail/%n mail=maildir:/home/mail/%n
}
Файл с настройками аутентификации через каталог LDAP /etc/dovecot/dovecot-ldap-bind-auth.conf:
hosts = 127.0.0.1:389
ldap_version = 3
base = ou=People,dc=ldaptest,dc=com
auth_bind = yes
pass_attrs = uid=user
pass_filter = (&(objectClass=inetOrgPerson)(uid=%n))
С такими настройками thunderbird принимает и отправляет почту для пользователей new@post.com и test3@post.com, проходит аутентификацию по протоколу IMAP с паролем из каталога и без проблем работает с файловой системой. Правда, капризничает при первоначальной настройке, если не созданы каталоги /home/mail/new и /home/mail/test3, но это решается путём отправки первого тестового письма этим пользователям.
На этот минимальный костяк уже можно наращивать дополнительные навороты по своему вкусу.
Егор