SOGo

Материал из ALT Linux Wiki

(Различия между версиями)
Перейти к: навигация, поиск
м (Установка: в репах теперь одна версия, а sope-gdl1-postgresql добавлен в зависимости.)
 
(45 промежуточных версий не показаны.)
Строка 17: Строка 17:
{{Attention|Не поддерживается MAPI over HTTPS}}
{{Attention|Не поддерживается MAPI over HTTPS}}
 +
{{#ev:youtube|1hcBSB4Kxww}}
= Установка =
= Установка =
-
{{Todo|Пока сборка доступна из задания 153515: <source lang="Bash">apt-repo add task 153515</source>}}
+
Для установки стабильной версии SOGo (доступна в ветке обновлений p8 и нестабильном репозитории Sisyphus) выполните
-
apt-get install task-sogo
+
apt-get install task-sogo
 +
 
 +
(драйвер к PostgreSQL будет установлен автоматически)
 +
 
 +
= Подготовка среды =
 +
 
 +
== PostgreSQL ==
 +
 
 +
Предварительная подготовка к запуску службы согласно [[PostgreSQL]].
 +
 
 +
Создаём пользователя {{term|sogo}} и базу данных {{term|sogo}} ([[root|под правами root]]):
 +
 +
<source lang="Bash">su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole sogo'
 +
su - postgres -s /bin/sh -c 'createdb -O sogo sogo'
 +
service postgresql restart</source>
 +
 
 +
== Samba DC ==
 +
 
 +
Пользователи расположены в домене Active Directory, расположенном на контроллере с [[SambaDC|Samba DC]].
 +
 
 +
Предварительное создание домена согласно [[SambaDC]].
 +
 
 +
Создаём в домене пользователя sogo с паролем Pa$$word:
 +
 
 +
samba-tool user add sogo
 +
 
 +
(при запросе дважды ввести пароль).
 +
 
 +
== SOGo ==
 +
 
 +
Настраивается на домен {{path|test.alt}}.
 +
 
 +
<!--
 +
<source lang="Bash">service sogo stop
 +
su - _sogo -s /bin/bash
 +
defaults write sogod SOGoProfileURL "postgresql://sogo@/sogo/sogo_user_profile"
 +
defaults write sogod OCSFolderInfoURL "postgresql://sogo@/sogo/sogo_folder_info"
 +
defaults write sogod OCSSessionsFolderURL "postgresql://sogo@/sogo/sogo_sessions_folder"
 +
defaults write sogod SOGoEnableEMailAlarms YES
 +
defaults write sogod OCSEMailAlarmsFolderURL "postgresql://sogo@/sogo/sogo_alarms_folder"
 +
defaults write sogod SOGoDraftsFolderName Drafts
 +
defaults write sogod SOGoDraftsFolderName Trash
 +
defaults write sogod SOGoSentFolderName Sent
 +
defaults write sogod SOGoTrashFolderName Trash
 +
defaults write sogod SOGoIMAPServer imaps://localhost:993
 +
#defaults write sogod SOGoSMTPServer 127.0.0.1
 +
#defaults write sogod SOGoMailDomain test.alt
 +
defaults write sogod SOGoMailingMechanism sendmail
 +
defaults write sogod SOGoForceExternalLoginWithEmail NO
 +
defaults write sogod SOGoMailSpoolPath /var/spool/sogo
 +
defaults write sogod NGImap4ConnectionStringSeparator "/"
 +
defaults write sogod SOGoSieveScriptsEnabled YES
 +
defaults write sogod SOGoTimeZone "$(date +%Z)"
 +
defaults write sogod SOGoFirstDayOfWeek 1
 +
defaults write sogod SOGoSuperUsernames sogo
 +
defaults write sogod SOGoLanguage Russian
 +
defaults write sogod SOGoUserSources '({type = ldap; CNFieldName = cn; IDFieldName = cn;
 +
UIDFieldName = sAMAccountName; baseDN = "cn=Users,dc=test,dc=alt";
 +
bindDN = "cn=sogo,cn=Users,DC=test,DC=alt";
 +
bindFields = (sAMAccountName); bindPassword = "Pa$$word";
 +
canAuthenticate = YES; displayName = "Public"; hostname = ldaps://127.0.0.1:389;
 +
id = public; isAddressBook = YES;})'
 +
mv -f /var/lib/sogo/GNUstep/Defaults/sogod.plist /var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults
 +
exit
 +
service sogo start</source>
 +
 
 +
{{Attention|Служба {{cmd|sogo}} во время настройки должна быть выключена}}
 +
 
 +
'''Файл {{path|/var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults}}'''
 +
<source lang="xml"><?xml version="1.0" encoding="UTF-8"?>
 +
<!DOCTYPE plist PUBLIC "-//GNUstep//DTD plist 0.9//EN" "http://www.gnustep.org/plist-0_9.xml">
 +
<plist version="0.9">
 +
<dict>
 +
    <key>OCSFolderInfoURL</key>
 +
    <string>postgresql://sogo@/sogo/sogo_folder_info</string>
 +
    <key>OCSSessionsFolderURL</key>
 +
    <string>postgresql://sogo@/sogo/sogo_sessions_folder</string>
 +
    <key>SOGoFirstDayOfWeek</key>
 +
    <string>1</string>
 +
    <key>SOGoProfileURL</key>
 +
    <string>postgresql://sogo@/sogo/sogo_user_profile</string>
 +
    <key>SOGoSieveScriptsEnabled</key>
 +
    <string>YES</string>
 +
    <key>SOGoTimeZone</key>
 +
    <string>MSK</string>
 +
    <key>OCSEMailAlarmsFolderURL</key>
 +
    <string>postgresql://sogo@/sogo/sogo_alarms_folder</string>
 +
    <key>SOGoEnableEMailAlarms</key>
 +
    <string>YES</string>
 +
    <key>SOGoUserSources</key>
 +
    <array>
 +
        <dict>
 +
            <key>CNFieldName</key>
 +
            <string>cn</string>
 +
            <key>IDFieldName</key>
 +
            <string>cn</string>
 +
            <key>UIDFieldName</key>
 +
            <string>sAMAccountName</string>
 +
            <key>baseDN</key>
 +
            <string>CN=Users,DC=test,DC=alt</string>
 +
            <key>bindDN</key>
 +
            <string>CN=sogo,CN=Users,DC=test,DC=alt</string>
 +
            <key>bindFields</key>
 +
            <array>
 +
                <string>sAMAccountName</string>
 +
            </array>
 +
            <key>bindPassword</key>
 +
            <string>Pa$$word</string>
 +
            <key>canAuthenticate</key>
 +
            <string>YES</string>
 +
            <key>displayName</key>
 +
            <string>SambaLogin</string>
 +
            <key>hostname</key>
 +
            <string>ldaps://127.0.0.1</string>
 +
            <key>id</key>
 +
            <string>sambaLogin</string>
 +
            <key>type</key>
 +
            <string>ldap</string>
 +
        </dict>
 +
        <dict>
 +
            <key>CNFieldName</key>
 +
            <string>cn</string>
 +
            <key>IDFieldName</key>
 +
            <string>mail</string>
 +
            <key>UIDFieldName</key>
 +
            <string>mail</string>
 +
            <key>baseDN</key>
 +
            <string>DC=test,DC=alt</string>
 +
            <key>bindDN</key>
 +
            <string>CN=sogo,CN=Users,DC=test,DC=alt</string>
 +
            <key>bindPassword</key>
 +
            <string>Pa$$word</string>
 +
            <key>canAuthenticate</key>
 +
            <string>NO</string>
 +
            <key>displayName</key>
 +
            <string>Shared Addressbook</string>
 +
            <key>filter</key>
 +
            <string>((NOT isCriticalSystemObject=&apos;TRUE&apos;) AND (mail=&apos;*&apos;) AND (NOT objectClass=contact))</string>
 +
            <key>hostname</key>
 +
            <string>ldaps://127.0.0.1</string>
 +
            <key>id</key>
 +
            <string>sambaShared</string>
 +
            <key>isAddressBook</key>
 +
            <string>YES</string>
 +
            <key>type</key>
 +
            <string>ldap</string>
 +
        </dict>
 +
        <dict>
 +
            <key>CNFieldName</key>
 +
            <string>cn</string>
 +
            <key>IDFieldName</key>
 +
            <string>mail</string>
 +
            <key>UIDFieldName</key>
 +
            <string>mail</string>
 +
            <key>baseDN</key>
 +
            <string>DC=test,DC=alt</string>
 +
            <key>bindDN</key>
 +
            <string>CN=sogo,CN=Users,DC=test,DC=alt</string>
 +
            <key>bindPassword</key>
 +
            <string>Pa$$word</string>
 +
            <key>canAuthenticate</key>
 +
            <string>NO</string>
 +
            <key>displayName</key>
 +
            <string>Shared Contacts</string>
 +
            <key>filter</key>
 +
            <string>((((objectClass=person) AND (objectClass=contact) AND ((uidNumber&gt;=2000) OR (mail=&apos;*&apos;)))
 +
                AND (NOT isCriticalSystemObject=&apos;TRUE&apos;) AND (NOT showInAdvancedViewOnly=&apos;TRUE&apos;) AND (NOT uid=Guest))
 +
                OR (((objectClass=group) AND (gidNumber&gt;=2000)) AND (NOT isCriticalSystemObject=&apos;TRUE&apos;) AND (NOT showInAdvancedViewOnly=&apos;TRUE&apos;)))</string>
 +
            <key>hostname</key>
 +
            <string>ldaps://127.0.0.1</string>
 +
            <key>id</key>
 +
            <string>sambaContacts</string>
 +
            <key>isAddressBook</key>
 +
            <string>YES</string>
 +
            <key>mapping</key>
 +
            <dict>
 +
                <key>displayname</key>
 +
                <array>
 +
                    <string>cn</string>
 +
                </array>
 +
            </dict>
 +
            <key>type</key>
 +
            <string>ldap</string>
 +
        </dict>
 +
    </array>
 +
</dict>
 +
</plist></source>
 +
-->
 +
 
 +
1. Заполняем файл конфигурации {{path|/etc/sogo/sogo.conf}}:
 +
<source lang="C">{
 +
  SOGoProfileURL = "postgresql://sogo@/sogo/sogo_user_profile";
 +
  OCSFolderInfoURL = "postgresql://sogo@/sogo/sogo_folder_info";
 +
  OCSSessionsFolderURL = "postgresql://sogo@/sogo/sogo_sessions_folder";
 +
  OCSEMailAlarmsFolderURL = "postgresql://sogo@/sogo/sogo_alarms_folder";
 +
  SOGoEnableEMailAlarms = YES;
 +
  SOGoDraftsFolderName = Drafts;
 +
  SOGoSentFolderName = Sent;
 +
  SOGoTrashFolderName = Trash;
 +
  SOGoIMAPServer = "imaps://localhost:993";
 +
  SOGoMailingMechanism = sendmail;
 +
  SOGoForceExternalLoginWithEmail = NO;
 +
  NGImap4ConnectionStringSeparator = "/";
 +
  SOGoUserSources =  (
 +
    {
 +
        id = sambaLogin;
 +
        displayName = "SambaLogin";
 +
        canAuthenticate = YES;
 +
        type = ldap;
 +
        CNFieldName = cn;
 +
        IDFieldName = cn;
 +
        UIDFieldName = sAMAccountName;
 +
        hostname = "ldaps://127.0.0.1";
 +
        baseDN = "CN=Users,DC=test,DC=alt";
 +
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
 +
        bindPassword = "Pa$$word";
 +
        bindFields = (sAMAccountName);
 +
    },
 +
    {
 +
        id = sambaShared;
 +
        displayName = "Shared Addressbook";
 +
        canAuthenticate = NO;
 +
        isAddressBook = YES;
 +
        type = ldap;
 +
        CNFieldName = cn;
 +
        IDFieldName = mail;
 +
        UIDFieldName = mail;
 +
        hostname = "ldaps://127.0.0.1";
 +
        baseDN = "CN=Users,DC=test,DC=alt";
 +
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
 +
        bindPassword = "Pa$$word";
 +
        filter = "((NOT isCriticalSystemObject='TRUE') AND (mail='*') AND (NOT objectClass=contact))";
 +
    },
 +
    {
 +
        id = sambaContacts;
 +
        displayName = "Shared Contacts";
 +
        canAuthenticate = NO;
 +
        isAddressBook = YES;
 +
        type = ldap;
 +
        CNFieldName = cn;
 +
        IDFieldName = mail;
 +
        UIDFieldName = mail;
 +
        hostname = "ldaps://127.0.0.1";
 +
        baseDN = "CN=Users,DC=test,DC=alt";
 +
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
 +
        bindPassword = "Pa$$word";
 +
        filter = "((((objectClass=person) AND (objectClass=contact) AND ((uidNumber>=2000) OR (mail='*')))
 +
                AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE') AND (NOT uid=Guest))
 +
                OR (((objectClass=group) AND (gidNumber>=2000)) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE')))";
 +
        mapping = {
 +
            displayname = ("cn");
 +
        };
 +
    }
 +
  );
 +
  SOGoSieveScriptsEnabled = NO;
 +
  SOGoLanguage = Russian;
 +
  SOGoTimeZone = Europe/Moscow;
 +
  SOGoFirstDayOfWeek = 1;
 +
}</source>
 +
 
 +
2. Делаем необходимые службы по умолчанию и перезапускаем их:
 +
for s in samba postgresql memcached sogo httpd2;do chkconfig $s on;service $s restart;done
 +
 
 +
3. Смотрим на предмет возможных ошибок файл журнала {{path|/var/log/sogo/sogo.log}}
 +
 
 +
= Включение веб-интерфейса =
 +
 
 +
Подробнее: http://www.openchange.org/cookbook/backends/sogo/webui.html
 +
 
 +
a2enmod proxy
 +
a2enmod proxy_http
 +
a2enmod authn_core
 +
a2enmod authn_file
 +
a2enmod auth_basic
 +
a2enmod authz_user
 +
a2enmod env
 +
a2enmod dav
 +
a2enmod headers
 +
a2enmod rewrite
 +
a2ensite SOGo
 +
service httpd2 restart
 +
service sogo restart
 +
 
 +
Войти по адресу:<br />
 +
<big><pre>http://адрес_сервера/SOGo/</pre></big>
 +
 
 +
= TODO =
 +
 
 +
{{Todo|
 +
* Интеграция с sssd
 +
* Интеграция с Postfix
 +
* Интеграция с Dovecot
 +
* Проверка интеграции с Acitive Directory
 +
* Упрощение настройки
 +
* Модуль Alterator для управления
 +
* Видеоурок}}
 +
 
 +
= Проблемы =
 +
 
 +
== Заведение адресов в AD ==
 +
<source lang="bash">$ ldapmodify -D 'CN=Administrator,CN=Users,DC=test,DC=alt' -H 'ldap://127.0.0.1' -w 'Pa$$word'
 +
dn: CN=petrov,CN=Users,DC=test,DC=alt
 +
changetype: modify
 +
add: proxyAddresses
 +
proxyAddresses: petrov@test.alt</source>
 +
 
 +
 
 +
Для правильной работы SOGo на устройствах должна быть обновленная текущая база таймзон.
 +
Особенно это касается устройств под управлением iOS и OSX.
 +
 
 +
= Ссылки =
 +
* http://sogo.nu
 +
* http://www.sogo.nu/files/docs/SOGo%20Installation%20Guide.pdf
 +
* https://wiki.archlinux.org/index.php/OpenChange_server
 +
* http://www.openchange.org/cookbook/backends/sogo/dovecot.html
 +
* http://habrahabr.ru/post/227893/
 +
* [https://lists.inverse.ca/sogo/arc/users/2015-07/msg00132.html Почему используют SOGo] (англ.)
[[Категория:Groupware]]
[[Категория:Groupware]]
 +
[[Категория:Корпоративная инфраструктура]]
[[Категория:HOWTO]]
[[Категория:HOWTO]]
 +
[[Категория:Миграция]]
 +
{{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}}

Текущая версия на 10:23, 5 мая 2017

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Sogo.logo.png

Сервер групповой работы, аналогичный Microsoft Exchange, с веб-интерфейсом и доступом по MAPI для Microsoft Outlook

Содержание

Возможности

  • Общие почтовые папки, календари и адресные книги;
  • Веб-интерфейс, аналогичный Outlook Web Access;
  • Поддержка протоколов CalDAV, CardDAV, GroupDAV, Microsoft ActiveSync, IMAP и SMTP;
  • Доступ по MAPI для Microsoft Outlook, не требующий внешних модулей;
  • Делегирование, уведомления, резервирование, поддержка категорий и почтовых фильтров;
  • Поддержка нескольких почтовых ящиков в веб-интерфейсе;
  • Single sign-on с помощью CAS, WebAuth или Kerberos.
Внимание! Не поддерживается MAPI over HTTPS


Установка

Для установки стабильной версии SOGo (доступна в ветке обновлений p8 и нестабильном репозитории Sisyphus) выполните

apt-get install task-sogo

(драйвер к PostgreSQL будет установлен автоматически)

Подготовка среды

PostgreSQL

Предварительная подготовка к запуску службы согласно PostgreSQL.

Создаём пользователя sogo и базу данных sogo (под правами root):

su - postgres -s /bin/sh -c 'createuser --no-superuser --no-createdb --no-createrole sogo'
su - postgres -s /bin/sh -c 'createdb -O sogo sogo'
service postgresql restart

Samba DC

Пользователи расположены в домене Active Directory, расположенном на контроллере с Samba DC.

Предварительное создание домена согласно SambaDC.

Создаём в домене пользователя sogo с паролем Pa$$word:

samba-tool user add sogo

(при запросе дважды ввести пароль).

SOGo

Настраивается на домен test.alt.


1. Заполняем файл конфигурации /etc/sogo/sogo.conf:

{
  SOGoProfileURL = "postgresql://sogo@/sogo/sogo_user_profile";
  OCSFolderInfoURL = "postgresql://sogo@/sogo/sogo_folder_info";
  OCSSessionsFolderURL = "postgresql://sogo@/sogo/sogo_sessions_folder";
  OCSEMailAlarmsFolderURL = "postgresql://sogo@/sogo/sogo_alarms_folder";
  SOGoEnableEMailAlarms = YES;
  SOGoDraftsFolderName = Drafts;
  SOGoSentFolderName = Sent;
  SOGoTrashFolderName = Trash;
  SOGoIMAPServer = "imaps://localhost:993";
  SOGoMailingMechanism = sendmail;
  SOGoForceExternalLoginWithEmail = NO;
  NGImap4ConnectionStringSeparator = "/";
  SOGoUserSources =  (
    {
        id = sambaLogin;
        displayName = "SambaLogin";
        canAuthenticate = YES;
        type = ldap;
        CNFieldName = cn;
        IDFieldName = cn;
        UIDFieldName = sAMAccountName;
        hostname = "ldaps://127.0.0.1";
        baseDN = "CN=Users,DC=test,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
        bindPassword = "Pa$$word";
        bindFields = (sAMAccountName);
    },
    {
        id = sambaShared;
        displayName = "Shared Addressbook";
        canAuthenticate = NO;
        isAddressBook = YES;
        type = ldap;
        CNFieldName = cn;
        IDFieldName = mail;
        UIDFieldName = mail;
        hostname = "ldaps://127.0.0.1";
        baseDN = "CN=Users,DC=test,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
        bindPassword = "Pa$$word";
        filter = "((NOT isCriticalSystemObject='TRUE') AND (mail='*') AND (NOT objectClass=contact))";
    },
    {
        id = sambaContacts;
        displayName = "Shared Contacts";
        canAuthenticate = NO;
        isAddressBook = YES;
        type = ldap;
        CNFieldName = cn;
        IDFieldName = mail;
        UIDFieldName = mail;
        hostname = "ldaps://127.0.0.1";
        baseDN = "CN=Users,DC=test,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=test,DC=alt";
        bindPassword = "Pa$$word";
        filter = "((((objectClass=person) AND (objectClass=contact) AND ((uidNumber>=2000) OR (mail='*')))
                 AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE') AND (NOT uid=Guest))
                 OR (((objectClass=group) AND (gidNumber>=2000)) AND (NOT isCriticalSystemObject='TRUE') AND (NOT showInAdvancedViewOnly='TRUE')))";
        mapping = {
            displayname = ("cn");
        };
    }
  );
  SOGoSieveScriptsEnabled = NO;
  SOGoLanguage = Russian;
  SOGoTimeZone = Europe/Moscow;
  SOGoFirstDayOfWeek = 1;
}

2. Делаем необходимые службы по умолчанию и перезапускаем их:

for s in samba postgresql memcached sogo httpd2;do chkconfig $s on;service $s restart;done

3. Смотрим на предмет возможных ошибок файл журнала /var/log/sogo/sogo.log

Включение веб-интерфейса

Подробнее: http://www.openchange.org/cookbook/backends/sogo/webui.html

a2enmod proxy
a2enmod proxy_http
a2enmod authn_core
a2enmod authn_file
a2enmod auth_basic
a2enmod authz_user
a2enmod env
a2enmod dav
a2enmod headers
a2enmod rewrite
a2ensite SOGo
service httpd2 restart
service sogo restart

Войти по адресу:

http://адрес_сервера/SOGo/

TODO

TODO:
  • Интеграция с sssd
  • Интеграция с Postfix
  • Интеграция с Dovecot
  • Проверка интеграции с Acitive Directory
  • Упрощение настройки
  • Модуль Alterator для управления
  • Видеоурок


Проблемы

Заведение адресов в AD

$ ldapmodify -D 'CN=Administrator,CN=Users,DC=test,DC=alt' -H 'ldap://127.0.0.1' -w 'Pa$$word'
dn: CN=petrov,CN=Users,DC=test,DC=alt
changetype: modify
add: proxyAddresses
proxyAddresses: petrov@test.alt


Для правильной работы SOGo на устройствах должна быть обновленная текущая база таймзон. Особенно это касается устройств под управлением iOS и OSX.

Ссылки

 
Личные инструменты