SOGo
Материал из ALT Linux Wiki
(→Установка) |
м (→Установка: в репах теперь одна версия, а sope-gdl1-postgresql добавлен в зависимости.) |
||
(32 промежуточные версии не показаны) | |||
Строка 21: | Строка 21: | ||
= Установка = | = Установка = | ||
- | + | Для установки стабильной версии SOGo (доступна в ветке обновлений p8 и нестабильном репозитории Sisyphus) выполните | |
- | apt-get install sogo | + | apt-get install task-sogo |
+ | |||
+ | (драйвер к PostgreSQL будет установлен автоматически) | ||
= Подготовка среды = | = Подготовка среды = | ||
Строка 53: | Строка 55: | ||
Настраивается на домен {{path|test.alt}}. | Настраивается на домен {{path|test.alt}}. | ||
- | <source lang="Bash"> | + | <!-- |
+ | <source lang="Bash">service sogo stop | ||
su - _sogo -s /bin/bash | su - _sogo -s /bin/bash | ||
defaults write sogod SOGoProfileURL "postgresql://sogo@/sogo/sogo_user_profile" | defaults write sogod SOGoProfileURL "postgresql://sogo@/sogo/sogo_user_profile" | ||
defaults write sogod OCSFolderInfoURL "postgresql://sogo@/sogo/sogo_folder_info" | defaults write sogod OCSFolderInfoURL "postgresql://sogo@/sogo/sogo_folder_info" | ||
defaults write sogod OCSSessionsFolderURL "postgresql://sogo@/sogo/sogo_sessions_folder" | 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 SOGoSieveScriptsEnabled YES | ||
defaults write sogod SOGoTimeZone "$(date +%Z)" | defaults write sogod SOGoTimeZone "$(date +%Z)" | ||
defaults write sogod SOGoFirstDayOfWeek 1 | defaults write sogod SOGoFirstDayOfWeek 1 | ||
- | defaults write sogod SOGoUserSources '({type = ldap; CNFieldName = cn; UIDFieldName = sAMAccountName; baseDN = " | + | 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 | mv -f /var/lib/sogo/GNUstep/Defaults/sogod.plist /var/lib/sogo/GNUstep/Defaults/.GNUstepDefaults | ||
exit | exit | ||
- | + | service sogo start</source> | |
- | {{Attention|Служба {{cmd| | + | {{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='TRUE') AND (mail='*') 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>=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')))</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 = | ||
{{Todo| | {{Todo| | ||
- | + | * Интеграция с sssd | |
- | + | ||
- | * Интеграция с | + | |
* Интеграция с Postfix | * Интеграция с Postfix | ||
* Интеграция с Dovecot | * Интеграция с Dovecot | ||
Строка 83: | Строка 322: | ||
= Проблемы = | = Проблемы = | ||
- | < | + | == Заведение адресов в 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://sogo.nu | ||
+ | * http://www.sogo.nu/files/docs/SOGo%20Installation%20Guide.pdf | ||
* https://wiki.archlinux.org/index.php/OpenChange_server | * https://wiki.archlinux.org/index.php/OpenChange_server | ||
* http://www.openchange.org/cookbook/backends/sogo/dovecot.html | * http://www.openchange.org/cookbook/backends/sogo/dovecot.html | ||
* http://habrahabr.ru/post/227893/ | * http://habrahabr.ru/post/227893/ | ||
+ | * [https://lists.inverse.ca/sogo/arc/users/2015-07/msg00132.html Почему используют SOGo] (англ.) | ||
+ | |||
[[Категория:Groupware]] | [[Категория:Groupware]] | ||
- | {{Category navigation|title= | + | [[Категория:Корпоративная инфраструктура]] |
+ | [[Категория:HOWTO]] | ||
+ | [[Категория:Миграция]] | ||
+ | {{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}} |
Текущая версия на 10:23, 5 мая 2017
Сервер групповой работы, аналогичный Microsoft Exchange, с веб-интерфейсом и доступом по MAPI для Microsoft Outlook
- Сайт: http://www.sogo.nu
- Лицензия: GPLv2 и LGPLv2
Содержание |
Возможности
- Общие почтовые папки, календари и адресные книги;
- Веб-интерфейс, аналогичный Outlook Web Access;
- Поддержка протоколов CalDAV, CardDAV, GroupDAV, Microsoft ActiveSync, IMAP и SMTP;
- Доступ по MAPI для Microsoft Outlook, не требующий внешних модулей;
- Делегирование, уведомления, резервирование, поддержка категорий и почтовых фильтров;
- Поддержка нескольких почтовых ящиков в веб-интерфейсе;
- Single sign-on с помощью CAS, WebAuth или Kerberos.
Установка
Для установки стабильной версии 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
- Интеграция с 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.