The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"dovecot acl Active Directory"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта / Linux)
Изначальное сообщение [ Отслеживать ]

"dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 30-Сен-13, 16:34 
Здравствуйте, настраиваю связку postfix+dovecot+Active Directory

уже настроено:
1. авторизация smtp via dovecot
2. авторизация dovecot via ldap (AD)
3. группы рассылки via ldap distribution group
4. доп.адреса прописанные в атрибут пользователя (otherMailbox)
5. квоты все это берется из атрибутов пользователя АD

теперь хотелось бы дать пользователю возможность делегировать мониторинг своей почты коллеге.
Видел как это реализовано в exchange, но не могу понять как это реализовать в dovecot

Подскажите пжлста.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "dovecot acl Active Directory"  +/
Сообщение от mcshel (ok) on 30-Сен-13, 19:37 
>[оверквотинг удален]
> уже настроено:
> 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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 01-Окт-13, 15:22 
>>[оверквотинг удален]
> Как в Exchange скорее всего не получиться, если правильно понял, то http://wiki2.dovecot.org/SharedMailboxes

читал, только не понимаю как это настроить что бы не заходя на сервер, не правя dovecot-acl дать доступ пользователю vpupkin в папку почты пользователя iivanov

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "dovecot acl Active Directory"  +/
Сообщение от mcshel (ok) on 01-Окт-13, 17:36 
>>>[оверквотинг удален]
>> Как в Exchange скорее всего не получиться, если правильно понял, то http://wiki2.dovecot.org/SharedMailboxes
> читал, только не понимаю как это настроить что бы не заходя на
> сервер, не правя dovecot-acl дать доступ пользователю vpupkin в папку почты
> пользователя iivanov

Я понимаю, что вы хотите. Единственное, что могу еще подсказать, попробовать реализовать что-то аналогичное через общие папки.

Например в Веб-морде Roundcube была возможность раздавать права именно на общие папки. Посмотрите вдруг что-то реализовали и с почтовыми ящиками.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 01-Окт-13, 20:54 
нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив Директори", либо и outlook и thunderbird
по этому и хочу прикрутить это к лдапу, дабы использовать стандартный "поиск в Актив Директори"
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "dovecot acl Active Directory"  +/
Сообщение от mcshel email(ok) on 02-Окт-13, 06:46 
> нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив
> Директори", либо и outlook и thunderbird
> по этому и хочу прикрутить это к лдапу, дабы использовать стандартный "поиск
> в Актив Директори"

Тогда вам придется писать свои костыли, в открытом доступе я не встречал подобное.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 02-Окт-13, 09:50 
>> нет, интерфейс управления данным функционалом должен быть либо стандартный "поиск в Актив
>> Директори", либо и 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'ами.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "dovecot acl Active Directory"  +/
Сообщение от mcshel email(ok) on 02-Окт-13, 13:49 
>[оверквотинг удален]
>> Тогда вам придется писать свои костыли, в открытом доступе я не встречал
>> подобное.
> в добавок, прошу объяснить мне как работают 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.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 03-Окт-13, 14:01 
>>[оверквотинг удален]
>>> Тогда вам придется писать свои костыли, в открытом доступе я не встречал
>>> подобное.
>> в добавок, прошу объяснить мне как работают group-acl?
>> смутила строка в вики "ACL groups support works by returning a comma-separated
>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>> может я могу как-то наделать групы в ад и дать им
>> права, а членов группы уже в АД редактировать?

ACL'ы настроил, но управление... пока только через расширение thunderbird
как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент для управления acl'ами
КАК?
web-морда или еще как?

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "dovecot acl Active Directory"  +/
Сообщение от mcshel (ok) on 03-Окт-13, 17:24 
>[оверквотинг удален]
>>> в добавок, прошу объяснить мне как работают group-acl?
>>> смутила строка в вики "ACL groups support works by returning a comma-separated
>>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>>> может я могу как-то наделать групы в ад и дать им
>>> права, а членов группы уже в АД редактировать?
> ACL'ы настроил, но управление... пока только через расширение thunderbird
> как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент
> для управления acl'ами
> КАК?
> web-морда или еще как?

roundcube пробовали? Там и элементы управления есть.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 04-Окт-13, 10:07 
>>[оверквотинг удален]
> roundcube пробовали? Там и элементы управления есть.

пока нет, но сейчас попытаюсь.
подскажите пжлста как дать права пользователям (группе пользователей) изменять права любому пользователю?

т.е. support команде дать возможность шарить папки?
ведь пока ни dovecot, ни roundcube не знает кто user, а кто support

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

12. "dovecot acl Active Directory"  +/
Сообщение от McLeod095 (??) on 04-Окт-13, 11:38 
>>>[оверквотинг удален]
>> roundcube пробовали? Там и элементы управления есть.
> пока нет, но сейчас попытаюсь.
> подскажите пжлста как дать права пользователям (группе пользователей) изменять права любому
> пользователю?
> т.е. support команде дать возможность шарить папки?
> ведь пока ни dovecot, ни roundcube не знает кто user, а кто
> support

Если Вы хотите вытащить из АД группы которым принадлежит пользователь, то наверное придется писать скрипт для этого.
Вот это http://wiki2.dovecot.org/PostLoginScripting думаю поможет понять что надо.

ну и мой скрипт


#!/bin/env perl

use 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: $!";


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

15. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 04-Окт-13, 12:20 
>>>>[оверквотинг удален]
> Если Вы хотите вытащить из АД группы которым принадлежит пользователь, то наверное
> придется писать скрипт для этого.
> Вот это http://wiki2.dovecot.org/PostLoginScripting думаю поможет понять что надо.
> ну и мой скрипт

спасибо большое за скрипт, но попрошу еще и логику объяснить, ибо в скрипте подправил входные параметры (домен, авторизация пользователя, etc)
при попытке запустить сам скрипт (вообще не силен в перле)

# perl postlogin.sh 

получаю Can't locate Net/LDAP.pm in @INC. Ладно, с этим счас разберусь, доставив подуль net ldap.
Но кому объяснять что группа domain admins и it-support - это группы которым "всё" можно? в части acl конечно.
Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

17. "dovecot acl Active Directory"  +/
Сообщение от McLeod095 (??) on 04-Окт-13, 13:08 
>[оверквотинг удален]
>> Вот это 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. Ну и уже полученную информацию возвращаем как переменные окружения.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 04-Окт-13, 13:58 
>[оверквотинг удален]
> вот в этот 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)))

выдает результат в виде пользователя

подскажите пжлста куда смотреть? может я что то не правильно делаю?

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "dovecot acl Active Directory"  +/
Сообщение от McLeod095 (??) on 04-Окт-13, 14:09 
>[оверквотинг удален]
>> окружения.
>
#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 у меня такой же логин, или скайп

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

20. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 08-Окт-13, 12:57 
>>[оверквотинг удален]


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ами для администраторов?

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

11. "dovecot acl Active Directory"  +/
Сообщение от McLeod095 (??) on 04-Окт-13, 11:30 
>[оверквотинг удален]
>>> в добавок, прошу объяснить мне как работают group-acl?
>>> смутила строка в вики "ACL groups support works by returning a comma-separated
>>> acl_groups extra field from userdb", т.к. userdb это запрос в ldap,
>>> может я могу как-то наделать групы в ад и дать им
>>> права, а членов группы уже в АД редактировать?
> ACL'ы настроил, но управление... пока только через расширение thunderbird
> как реализовать централизованное управление? т.е. хотя бы администраторам дать инструмент
> для управления acl'ами
> КАК?
> web-морда или еще как?

Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но вот нормально настроить не смог.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

13. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 04-Окт-13, 11:40 
>>[оверквотинг удален]
> Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но
> вот нормально настроить не смог.

в двух словах: добавить в namespace shared folder
включить плагин acl и imap_acl (как в вики сказано)
добавить в location настройку INDEX
включить словарь (acl_shared_dict) указав путь где сможет писать пользователь vmail (виртуальный)

вот и всё. Далее через thunderbird плагин imap_acl.. можно редактировать права

либо через roundcube плагин acl =)

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

14. "dovecot acl Active Directory"  +/
Сообщение от McLeod095 (??) on 04-Окт-13, 11:52 
>>>[оверквотинг удален]
>> Если настроили может выложите конфиг, ну или расскажете как. Я пытался, но
>> вот нормально настроить не смог.
> в двух словах: добавить в namespace shared folder
> включить плагин acl и imap_acl (как в вики сказано)
> добавить в location настройку INDEX
> включить словарь (acl_shared_dict) указав путь где сможет писать пользователь vmail (виртуальный)
> вот и всё. Далее через thunderbird плагин imap_acl.. можно редактировать права
> либо через roundcube плагин acl =)

Вот в том то и дело, что dovecot работает, и namespaces у него по умолчанию, то есть они закомментированы. И если я начинаю включать namespaces то отваливается все.

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

16. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 04-Окт-13, 12:44 
>>>>[оверквотинг удален]
> Вот в том то и дело, что 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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

21. "dovecot acl Active Directory"  +/
Сообщение от openmsk email(ok) on 10-Окт-13, 16:26 
>>[оверквотинг удален]
>> 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

и не пойму как мне на этом этапе не учитывать выключенных пользователей?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру