Здравствуйте, настраиваю связку postfix+dovecot+Active Directoryуже настроено:
1. авторизация smtp via dovecot
2. авторизация dovecot via ldap (AD)
3. группы рассылки via ldap distribution group
4. доп.адреса прописанные в атрибут пользователя (otherMailbox)
5. квоты все это берется из атрибутов пользователя АDтеперь хотелось бы дать пользователю возможность делегировать мониторинг своей почты коллеге.
Видел как это реализовано в exchange, но не могу понять как это реализовать в dovecotПодскажите пжлста.
>[оверквотинг удален]
> уже настроено:
> 1. авторизация smtp via dovecot
> 2. авторизация dovecot via ldap (AD)
> 3. группы рассылки via ldap distribution group
> 4. доп.адреса прописанные в атрибут пользователя (otherMailbox)
> 5. квоты все это берется из атрибутов пользователя АD
> теперь хотелось бы дать пользователю возможность делегировать мониторинг своей почты коллеге.
> Видел как это реализовано в exchange, но не могу понять как это
> реализовать в dovecot
> Подскажите пжлста.Как в Exchange скорее всего не получиться, если правильно понял, то http://wiki2.dovecot.org/SharedMailboxes
>>[оверквотинг удален]
> Как в Exchange скорее всего не получиться, если правильно понял, то http://wiki2.dovecot.org/SharedMailboxesчитал, только не понимаю как это настроить что бы не заходя на сервер, не правя dovecot-acl дать доступ пользователю vpupkin в папку почты пользователя iivanov
>>>[оверквотинг удален]
>> Как в Exchange скорее всего не получиться, если правильно понял, то http://wiki2.dovecot.org/SharedMailboxes
> читал, только не понимаю как это настроить что бы не заходя на
> сервер, не правя dovecot-acl дать доступ пользователю vpupkin в папку почты
> пользователя iivanovЯ понимаю, что вы хотите. Единственное, что могу еще подсказать, попробовать реализовать что-то аналогичное через общие папки.
Например в Веб-морде Roundcube была возможность раздавать права именно на общие папки. Посмотрите вдруг что-то реализовали и с почтовыми ящиками.
нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив Директори", либо и outlook и thunderbird
по этому и хочу прикрутить это к лдапу, дабы использовать стандартный "поиск в Актив Директори"
> нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив
> Директори", либо и outlook и thunderbird
> по этому и хочу прикрутить это к лдапу, дабы использовать стандартный "поиск
> в Актив Директори"Тогда вам придется писать свои костыли, в открытом доступе я не встречал подобное.
>> нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив
>> Директори", либо и outlook и thunderbird
>> по этому и хочу прикрутить это к лдапу, дабы использовать стандартный "поиск
>> в Актив Директори"
> Тогда вам придется писать свои костыли, в открытом доступе я не встречал
> подобное.в добавок, прошу объяснить мне как работают group-acl?
смутила строка в вики "ACL groups support works by returning a comma-separated acl_groups extra field from userdb", т.к. userdb это запрос в ldap, может я могу как-то наделать групы в ад и дать им права, а членов группы уже в АД редактировать?правда пока не могу настроить эти acl'ы.
что имею: doveconf -n http://pastebin.com/jVnvyWZM
в общем прошу помочь разобраться с ACL'ами.
>[оверквотинг удален]
>> Тогда вам придется писать свои костыли, в открытом доступе я не встречал
>> подобное.
> в добавок, прошу объяснить мне как работают group-acl?
> смутила строка в вики "ACL groups support works by returning a comma-separated
> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
> может я могу как-то наделать групы в ад и дать им
> права, а членов группы уже в АД редактировать?
> правда пока не могу настроить эти acl'ы.
> что имею: doveconf -n http://pastebin.com/jVnvyWZM
> в общем прошу помочь разобраться с ACL'ами.В свое время, я так же раздумывал над данным вопросом, но так и не нашел удобного решения. В итоге руководство приняло решение перейти на Exchange и я забросил это дело. Хотя связка postfix+dovecot+AD работает прекрасно. Почитайте про настройку на dovecot.org, если получиться реализовать через конфиг-файл на сервере, то следующим этапом уже можно будет раздумать по поводу подвязки к AD.
>>[оверквотинг удален]
>>> Тогда вам придется писать свои костыли, в открытом доступе я не встречал
>>> подобное.
>> в добавок, прошу объяснить мне как работают group-acl?
>> смутила строка в вики "ACL groups support works by returning a comma-separated
>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>> может я могу как-то наделать групы в ад и дать им
>> права, а членов группы уже в АД редактировать?ACL'ы настроил, но управление... пока только через расширение thunderbird
как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент для управления acl'ами
КАК?
web-морда или еще как?
>[оверквотинг удален]
>>> в добавок, прошу объяснить мне как работают group-acl?
>>> смутила строка в вики "ACL groups support works by returning a comma-separated
>>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>>> может я могу как-то наделать групы в ад и дать им
>>> права, а членов группы уже в АД редактировать?
> ACL'ы настроил, но управление... пока только через расширение thunderbird
> как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент
> для управления acl'ами
> КАК?
> web-морда или еще как?roundcube пробовали? Там и элементы управления есть.
>>[оверквотинг удален]
> roundcube пробовали? Там и элементы управления есть.пока нет, но сейчас попытаюсь.
подскажите пжлста как дать права пользователям (группе пользователей) изменять права любому пользователю?т.е. support команде дать возможность шарить папки?
ведь пока ни dovecot, ни roundcube не знает кто user, а кто support
>>>[оверквотинг удален]
>> roundcube пробовали? Там и элементы управления есть.
> пока нет, но сейчас попытаюсь.
> подскажите пжлста как дать права пользователям (группе пользователей) изменять права любому
> пользователю?
> т.е. support команде дать возможность шарить папки?
> ведь пока ни dovecot, ни roundcube не знает кто user, а кто
> supportЕсли Вы хотите вытащить из АД группы которым принадлежит пользователь, то наверное придется писать скрипт для этого.
Вот это http://wiki2.dovecot.org/PostLoginScripting думаю поможет понять что надо.ну и мой скрипт
#!/bin/env perluse strict;
#use warnings;use Net::LDAP;
sub _log
{
my $msg=shift;
my $now_string=localtime;
print LOG $now_string." : ".$msg."\n";
}my @ldap_hosts=("dc.contoso.com"); # Хосты к которым подключаться
my $binddn='user@contoso.com'; # Пользователь которым будем подключаться
my $bindpw='password'; # Пароль
my $basedn='dc=contoso,dc=com'; # Поиск по каталогу
my $user=$ENV{'USER'}; # Какого пользователя будем искать
my $log_file="/tmp/dovecot.postlogin-script.log";
my ($day ,$month, $year) = (localtime)[3,4,5];
$month++;
$year += 1900;
my $date = "$year-$month-$day";open(LOG, ">>", $log_file."-".$date) or exit 1;
_log "user = $user";
if (! @ARGV){
_log "\texit with ARGV is null";
exit 1;
}if(!$user or $user eq ""){
_log "\tUser not set\n";
exit 1;
}# Фильтр для поиска
my $searchFilter='(&(objectClass=user)(mail=*)(sAMAccountName='.$user.')(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
my $searchAttrs=['memberOf', 'primaryGroupId']; # Какие атрибуты возвращать
my @groups; # Здесь будем сохранять имена групп# Подключемся и выполняем запрос
my $ldap=Net::LDAP->new(\@ldap_hosts, port=>3268, async=>1) or die("Cannot connect to ldap server: $@");
my $mesg=$ldap->bind($binddn,password=>$bindpw);
my $searchResult=$ldap->search(base=>$basedn, scope=>"sub",filter=>$searchFilter, attrs=>$searchAttrs);
my $data=$searchResult->as_struct;# Для каждого возвращенного элемента получаем атрибуты (при запросе как указан выше всегда должен быть только один результат)
foreach my $dn (keys %$data){
foreach my $attrname (keys %{$data->{$dn}}){
if($attrname eq "memberof"){
foreach my $group_dn (@{$data->{$dn}{$attrname}}){
$group_dn=~s/([^=]*)=([^,]*).*/$2/;
push @groups, $group_dn;
}
}
if($attrname eq "primarygroupid"){
my $searchGroup=$ldap->search(base=>$basedn, scope=>"sub", filter=>'(objectClass=group)', attrs=> ['primarygrouptoken']);
my $g_data=$searchGroup->as_struct;foreach my $group_dn (keys %$g_data){
next if(!defined(@{$g_data->{$group_dn}{'primarygrouptoken'}}));
if(@{$g_data->{$group_dn}{'primarygrouptoken'}}[0] eq @{$data->{$dn}{$attrname}}[0]){
$group_dn =~ s/([^=]*)=([^,]*).*/$2/;
push @groups, $group_dn;
last;
}
}
}
}
}$ldap->unbind();
foreach my $g (@groups){
_log "\t\t$g";
}
my $env_group = join ",",@groups;
$ENV{'ACL_GROUPS'} = $env_group;
if(!defined($ENV{'USERDB_KEYS'} or !$ENV{'USERDB_KEYS'})){
$ENV{'USERDB_KEYS'}="acl_groups";
}else{
$ENV{'USERDB_KEYS'}=$ENV{'USERDB_KEYS'}." acl_groups";
}_log "\t\t$ENV{'ACL_GROUPS'}";
_log "\t\t$ENV{'USERDB_KEYS'}";close LOG;
exec(@ARGV) or die "Unable to exec @ARGV: $!";
>>>>[оверквотинг удален]
> Если Вы хотите вытащить из АД группы которым принадлежит пользователь, то наверное
> придется писать скрипт для этого.
> Вот это http://wiki2.dovecot.org/PostLoginScripting думаю поможет понять что надо.
> ну и мой скриптспасибо большое за скрипт, но попрошу еще и логику объяснить, ибо в скрипте подправил входные параметры (домен, авторизация пользователя, etc)
при попытке запустить сам скрипт (вообще не силен в перле)# perl postlogin.sh
получаю Can't locate Net/LDAP.pm in @INC. Ладно, с этим счас разберусь, доставив подуль net ldap.
Но кому объяснять что группа domain admins и it-support - это группы которым "всё" можно? в части acl конечно.
>[оверквотинг удален]
>> Вот это http://wiki2.dovecot.org/PostLoginScripting думаю поможет понять что надо.
>> ну и мой скрипт
> спасибо большое за скрипт, но попрошу еще и логику объяснить, ибо в
> скрипте подправил входные параметры (домен, авторизация пользователя, etc)
> при попытке запустить сам скрипт (вообще не силен в перле)
># perl postlogin.sh
> получаю Can't locate Net/LDAP.pm in @INC. Ладно, с этим счас разберусь, доставив
> подуль net ldap.
> Но кому объяснять что группа domain admins и it-support - это группы
> которым "всё" можно? в части acl конечно.Когда занимался этим, то думал сделать так
В Dovecot есть такой параметр как global-acl
вот в этот acl прописать Нужные мне доступы для админов и пусть они распространяются на все почтовые ящики. Ну а дальше уже если есть права на установку прав, можно делать все что угодно. Вот для этого и писался скрипт, что бы вытаскивать группы в которых состоит пользователь.
Логика скрипта простая, подключаемся к АД, находим пользователя, и для всех значений атрибута memberOf заносит в массив groups, ну а дальше для атрибута primaryGroupid выполняется еще один запрос в АД из которого получаем имя группы для primaryGroupid. Ну и уже полученную информацию возвращаем как переменные окружения.
>[оверквотинг удален]
> вот в этот acl прописать Нужные мне доступы для админов и пусть
> они распространяются на все почтовые ящики. Ну а дальше уже если
> есть права на установку прав, можно делать все что угодно. Вот
> для этого и писался скрипт, что бы вытаскивать группы в которых
> состоит пользователь.
> Логика скрипта простая, подключаемся к АД, находим пользователя, и для всех значений
> атрибута memberOf заносит в массив groups, ну а дальше для атрибута
> primaryGroupid выполняется еще один запрос в АД из которого получаем имя
> группы для primaryGroupid. Ну и уже полученную информацию возвращаем как переменные
> окружения.
#su -c 'perl postlogin.sh' vpupkin
Fri Oct 4 13:52:27 2013 : user = vpupkin
Fri Oct 4 13:52:27 2013 : exit with ARGV is null
однако ж(&(objectClass=user)(mail=*)(sAMAccountName=vpupkin)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
выдает результат в виде пользователяподскажите пжлста куда смотреть? может я что то не правильно делаю?
>[оверквотинг удален]
>> окружения.
>#su -c 'perl postlogin.sh' vpupkin
> Fri Oct 4 13:52:27 2013 : user = vpupkin
> Fri Oct 4 13:52:27 2013 :
> exit with ARGV is null
>
> однако ж(&(objectClass=user)(mail=*)(sAMAccountName=vpupkin)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
>
> выдает результат в виде пользователя
> подскажите пжлста куда смотреть? может я что то не правильно делаю?Все строки связанные с _log можно вырезать, это я для себя делал логирование что бы понимать где могут быть косяки.
Потом скрипт написан именно для работы с dovecot, а dovecot, как нормальное приложение, которое следит за безопасностью, запускает его без параметров, а передает значения как переменные окружения. Для того что бы посмотреть что выведет запустите так
USER=vpupkin postlogin.sh
только сделайте postlogin.sh исполняемым и первую строку может понадобиться заменить на
#!/usr/bin/env perlну или если еще будут вопросы, то на jabber.ru у меня такой же логин, или скайп
>>[оверквотинг удален]
imap: Debug: Added userdb setting: plugin/acl_groups=IT-Support
Debug: acl: initializing backend with data: vfile:/etc/dovecot/acls
Debug: acl: acl username = vpupkin
Debug: acl: owner = 1
Debug: acl vfile: Global ACL directory: /etc/dovecot/acls
Debug: Namespace : type=shared, prefix=shared/%u/, sep=/, inbox=no, hidden=no, list=children, subscriptions=no location=maildir:%h:INDEX=~/shared/%u
auth: Debug: master userdb out: USER#0113462266881#011vpupkin#011uid=5000#011gid=5000#011home=/home/vmail/vpupkin#011quota_rule=*:bytes=200M#011acl_groups=IT-Support[root@dovecot]# cat /etc/dovecot/acls/INBOX
owner lrwstipekxa
group=IT-Support lrs
в настройках ACL вижу http://s21.postimg.org/pivvvnjbb/roundcube.jpg - это в roundcube. ThunderBird'e примерно тоже самое.
Однако если руками расшаривать папку для группы $Group-name то члены группы видят её, и напись выгрядит уже без #вопрос: откуда берется # перед именем в настройках ACL ??
и правильно ли я иду в попытках настроить управление ACLами для администраторов?
>[оверквотинг удален]
>>> в добавок, прошу объяснить мне как работают group-acl?
>>> смутила строка в вики "ACL groups support works by returning a comma-separated
>>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>>> может я могу как-то наделать групы в ад и дать им
>>> права, а членов группы уже в АД редактировать?
> ACL'ы настроил, но управление... пока только через расширение thunderbird
> как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент
> для управления acl'ами
> КАК?
> web-морда или еще как?Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но вот нормально настроить не смог.
>>[оверквотинг удален]
> Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но
> вот нормально настроить не смог.в двух словах: добавить в namespace shared folder
включить плагин acl и imap_acl (как в вики сказано)
добавить в location настройку INDEX
включить словарь (acl_shared_dict) указав путь где сможет писать пользователь vmail (виртуальный)вот и всё. Далее через thunderbird плагин imap_acl.. можно редактировать права
либо через roundcube плагин acl =)
>>>[оверквотинг удален]
>> Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но
>> вот нормально настроить не смог.
> в двух словах: добавить в namespace shared folder
> включить плагин acl и imap_acl (как в вики сказано)
> добавить в location настройку INDEX
> включить словарь (acl_shared_dict) указав путь где сможет писать пользователь vmail (виртуальный)
> вот и всё. Далее через thunderbird плагин imap_acl.. можно редактировать права
> либо через roundcube плагин acl =)Вот в том то и дело, что dovecot работает, и namespaces у него по умолчанию, то есть они закомментированы. И если я начинаю включать namespaces то отваливается все.
>>>>[оверквотинг удален]
> Вот в том то и дело, что dovecot работает, и namespaces у
> него по умолчанию, то есть они закомментированы. И если я начинаю
> включать namespaces то отваливается все.включте логирование
auth_verbose = yes
auth_verbose_passwords = no
auth_debug = yes
auth_debug_passwords = yes
mail_debug = yes
и посмотрите что пишет в лог.
Если namespace правильно настроенnamespace {
type = shared
separator = /
prefix = shared/%%u/
location = maildir:%%h:INDEX=~/shared/%%u
subscriptions = no
list = children
hidden = no
# нет автоматической подписки
subscriptions = no
}то всё должно быть агонь.
проверьте содержимое location[root@dovecot]# grep location ./conf.d/*
./conf.d/10-mail.conf:mail_location = maildir:~/:LAYOUT=fs
./conf.d/15-mailboxes.conf: location = maildir:%%h:INDEX=~/shared/%%u
>>[оверквотинг удален]
>> 3. группы рассылки via ldap distribution groupподскажите пжлста, столкнулся с проблемой:
при попытке отправить письмо на группу, где среди членов группы есть выключенный пользователь, postfix пытается доставить письмо и ему.
в итоге письмо застревает в очереди.
вот запрос:
[root@s1mx1ls postfix]# cat /etc/postfix/ldap_virtual_alias_maps.cf
server_host = dc1.domain.local dc2.domain.local
server_port = 389
bind = yes
bind_dn = CN=ldapsearch,OU=Service Accounts,DC=domain,DC=local
bind_pw = ****
search_base = OU=Group,DC=domain,DC=local
query_filter = (&(objectClass=group)(mail=%s))
leaf_result_attribute = mail
special_result_attribute = member
и не пойму как мне на этом этапе не учитывать выключенных пользователей?