Автор Тема: ACL для dovecot  (Прочитано 4919 раз)

marawu

  • Пользователь
  • **
  • Сообщений: 76
  • !
    • Просмотр профиля
ACL для dovecot
« : 26 Октябрь 2017, 15:12:16 »
Добрый день, пытаюсь настроить dovecot. Накидал такой файл конфига:



uris = ldap://ldap01.domain.ru
debug_level = -1
auth_bind = yes
auth_bind_userdn = uid=%n,ou=People,dc=domain,dc=ru
ldap_version = 3
base = ou=People,dc=domain,dc=ru
deref = never
scope = base
user_filter = (&(objectClass=posixAccount)(mail=%u))
pass_attrs = mail=user,userPassword=password
pass_filter = (&(objectClass=posixAccount)(mail=%u))
default_pass_scheme = CRYPT


Так же накидал такой ACL:



olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * break
olcAccess: to attrs=userPassword
  by self write
  by anonymous auth
olcAccess: to dn.subtree="ou=People,dc=domain,dc=ru"
  by * search
  by self read
olcAccess: to *
  by dn.one="ou=sUsers,dc=domain,dc=ru" read


Но при запросе ничего не возвращается. Ни через dovecot, ни запросом ldapsearch, хотя ошибок в логах нет:



Oct 26 19:11:32 ldap01 slapd[28115]: conn=1049 fd=11 ACCEPT from IP=192.168.XXX.XXX:34334 (IP=0.0.0.0:389)
Oct 26 19:11:32 ldap01 slapd[28115]: conn=1049 op=0 BIND dn="" method=128
Oct 26 19:11:32 ldap01 slapd[28115]: conn=1049 op=0 RESULT tag=97 err=0 text=
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=1 BIND dn="uid=user.name,ou=People,dc=domain" method=128
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=1 BIND dn="uid=user.name,ou=People,dc=domain" mech=SIMPLE ssf=0
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=1 RESULT tag=97 err=0 text=
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=2 BIND anonymous mech=implicit ssf=0
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=2 BIND dn="" method=128
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=2 RESULT tag=97 err=0 text=
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=3 SRCH base="ou=People,dc=domain,dc=ru" scope=0 deref=0 filter="(&(objectClass=posixAccount)(mail=user.name@domain.ru))"
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=3 SRCH attr=homeDirectory uidNumber gidNumber
Oct 26 19:11:40 ldap01 slapd[28115]: conn=1049 op=3 SEARCH RESULT tag=101 err=0 nentries=0 text=


Не могу сообразить как правильно ACL написать:(

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: ACL для dovecot
« Ответ #1 : 27 Октябрь 2017, 02:02:42 »
Здравствуйте!
В 3-м ACL поменяйте
olcAccess: to dn.subtree="ou=People,dc=domain,dc=ru"
  by * search
  by self read
на
olcAccess: to dn.subtree="ou=People,dc=domain,dc=ru"
  by self read
  by * search

Но меня смущает bind от anonymous (в логе) -- от анонима при таких ACL, сами понимаете, поиск работать не будет.

Егор

marawu

  • Пользователь
  • **
  • Сообщений: 76
  • !
    • Просмотр профиля
Re: ACL для dovecot
« Ответ #2 : 27 Октябрь 2017, 08:02:34 »

Но меня смущает bind от anonymous (в логе) -- от анонима при таких ACL, сами понимаете, поиск работать не будет.

Егор

Да, я тоже обратил внимание. Локально поиск сделать получилось, а вот с dovecot не работает. А если выдать права на поиск entry для анонимных пользователей?

marawu

  • Пользователь
  • **
  • Сообщений: 76
  • !
    • Просмотр профиля
Re: ACL для dovecot
« Ответ #3 : 27 Октябрь 2017, 08:16:13 »
Хм, недоглядел



# Distinguished Name - the username used to login to the LDAP server.
# Leave it commented out to bind anonymously (useful with auth_bind=yes).


Сделал учётку для dovecot на ldap добавил его в acl:



olcAccess: to *
  by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
  by * break
olcAccess: to attrs=userPassword
  by self write
  by anonymous auth

olcAccess: to dn.subtree="ou=People,dc=domain,dc=ru"
  by self read
  by dn.one="ou=sUsers,dc= domain,dc=ru" read
  by * search


Сейчас работает. А на другие OU мне ACL так же ниже можно писать? И можно ещё пояснить когда добавлять by * none?

egor

  • Администратор
  • Старожил
  • *****
  • Сообщений: 486
    • Просмотр профиля
Re: ACL для dovecot
« Ответ #4 : 27 Октябрь 2017, 11:47:12 »
А на другие OU мне ACL так же ниже можно писать? И можно ещё пояснить когда добавлять by * none?

ALC рассматриваются последовательно один за другим до первого совпадения условия to, оставшиеся ACL не рассматриваются. Поэтому сначала задаются более конкретные ACL, а затем более общие. Если после прохода по всем ACL совпадения с условием to не найдено, то выполняется неявное ACL
access to * by * noneи доступ к каталогу запрещается.

Аналогично с условиями by: после нахождения совпадения с условием to, условия by совпавшего ACL рассматриваются последовательно один за другим до первого совпадения. Если после прохода по всем условиям by совпадения не найдено, то выполняется неявное условие
by * noneи доступ к каталогу запрещается. Остальные ACL не рассматриваются.

Надеюсь, я понятно изложил. В принципе, явно добавлять условия by * none не обязательно.

Егор