SOGo: различия между версиями
(→TODO) |
(→SOGo) |
||
(не показано 69 промежуточных версий 11 участников) | |||
Строка 7: | Строка 7: | ||
* Лицензия: GPLv2 и LGPLv2 | * Лицензия: GPLv2 и LGPLv2 | ||
= Возможности = | == Возможности == | ||
* Общие почтовые папки, календари и адресные книги; | * Общие почтовые папки, календари и адресные книги; | ||
* Веб-интерфейс, аналогичный Outlook Web Access; | * Веб-интерфейс, аналогичный Outlook Web Access; | ||
Строка 17: | Строка 17: | ||
{{Attention|Не поддерживается MAPI over HTTPS}} | {{Attention|Не поддерживается MAPI over HTTPS}} | ||
{{#ev:youtube|1hcBSB4Kxww}} | |||
= Установка = | == Установка == | ||
Для установки стабильной версии SOGo (доступна в [[branches|стабильных ветках]] p9/p10/p11 и нестабильном репозитории [[Sisyphus]]) выполните: | |||
apt-get install task-sogo | apt-get install task-sogo | ||
(драйвер к PostgreSQL будет установлен автоматически) | |||
== PostgreSQL == | == Подготовка среды == | ||
=== PostgreSQL === | |||
Предварительная подготовка к запуску службы согласно [[PostgreSQL]]. | Предварительная подготовка к запуску службы согласно [[PostgreSQL]]. | ||
Строка 36: | Строка 39: | ||
service postgresql restart</source> | service postgresql restart</source> | ||
== Samba DC == | === Samba DC === | ||
Пользователи доменные — из Active Directory на контроллере Samba DC (см. [[SambaDC|предварительное создание домена]]). | |||
Пользователи | |||
Создадим в домене пользователя sogo с паролем Pa$$word (при запросе ввести его дважды): | |||
samba-tool user create sogo | |||
Отключим срок действия пароля: | |||
samba-tool user setexpiry --noexpiry sogo | |||
=== SOGo === | |||
Настраивается на домен {{path|test.alt}}. | |||
<!-- | |||
<source lang="Bash">service sogo stop | |||
<source lang="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 | ||
# /etc/ | 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='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> | |||
{{Note|Проверить целостность конфигурационного файла можно командой: <syntaxhighlight lang="text"># plparse /etc/sogo/sogo.conf | |||
Parsing '/etc/sogo/sogo.conf' - a dictionary</syntaxhighlight>}} | |||
2. Делаем необходимые службы по умолчанию и перезапускаем их: | |||
for s in samba postgresql memcached sogo httpd2;do chkconfig $s on;service $s restart;done | |||
3. Смотрим на предмет возможных ошибок файл журнала {{path|/var/log/sogo/sogo.log}} | |||
{{Note|Для SOGo версии {{pkg|5.0.0-alt1}} необходимо отключить одноранговую проверку для localhost, добавив | |||
<source lang="text">tlsVerifyMode=allowInsecureLocalhost</source> к URL-адресу службы IMAP, в файле конфигурации {{path|/etc/sogo/sogo.conf}}: | |||
<source lang="text">SOGoIMAPServer = "imaps://localhost:993/?tlsVerifyMode=allowInsecureLocalhost";</source>}} | |||
== Включение веб-интерфейса == | |||
Подробнее: [http://web.archive.org/web/20161025231509/http://openchange.org/cookbook/backends/sogo/webui.html 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 | |||
a2enmod version | |||
a2enmod setenvif | |||
a2ensite SOGo | |||
service httpd2 restart | |||
service sogo restart | |||
Войти по адресу: | |||
https://адрес_сервера/SOGo/ | |||
== Настройка электронной почты == | |||
Для использования электронной почты в SOGo необходимо настроить аутентификацию в Active Directory для Postfix и Dovecot. Подробнее это описано в разделе [[ActiveDirectory/PostfixDovecot]] | |||
== Проблемы == | |||
* Для правильной работы SOGo на устройствах должна быть обновленная текущая база часовых поясов. Особенно это касается устройств под управлением iOS и macOS. | |||
= Ссылки = | * Если при входе в веб-интерфейс возникает ошибка "Неправильный логин или пароль" (хотя учетные данные верны) и в логах {{path|/var/log/sogo/sogo.log}} есть ошибки наподобие этих: | ||
<syntaxhighlight lang="dmesg">Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> Could not bind to the LDAP server ldaps://127.0.0.1 (389) using the bind DN: CN=sogo,CN=Users,DC=test,DC=alt | |||
Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> <NSException: 0x55d2463f43b0> NAME:LDAPException REASON:operation bind failed: Can't contact LDAP server (0xFFFFFFFF) INFO:{"error_code" = "-1"; login = "CN=sogo,CN=Users,DC=test,DC=alt"; }</syntaxhighlight> | |||
Добавьте опцию "'''TLS_REQCERT allow'''" в {{path|/etc/openldap/ldap.conf}}. | |||
Перестартуйте службы: | |||
# systemctl restart samba sogo | |||
== Отладка == | |||
Для вывода более подробных сообщений отладки необходимо добавить в файл {{path|/etc/sogo/sogo.conf}} параметры: | |||
<source lang="objc"> | |||
GCSFolderDebugEnabled = YES; | |||
GCSFolderStoreDebugEnabled = YES; | |||
LDAPDebugEnabled = YES; | |||
MySQL4DebugEnabled = YES; | |||
NGImap4DisableIMAP4Pooling = YES; | |||
ImapDebugEnabled = YES; | |||
OCSFolderManagerSQLDebugEnabled = YES; | |||
PGDebugEnabled = YES; | |||
SOGoDebugRequests = YES; | |||
SOGoMailKeepDraftsAfterSend = YES; | |||
SOGoUIxDebugEnabled = YES; | |||
SoDebugObjectTraversal = YES; | |||
SoSecurityManagerDebugEnabled = YES; | |||
WODontZipResponse = YES; | |||
WODebugZipResponse = YES; | |||
SoClassRegistryDebugEnabled = YES; | |||
SoDebugKeyLookup = YES; | |||
SoDebugProductLoading = YES; | |||
SoDebugProductRegistry = YES; | |||
SoDebugRequestClassification = YES; | |||
SoDebugTraversal = YES; | |||
SoLogSecurityDeclarations = YES; | |||
SoOFSDebugAuthLookup = YES; | |||
SoOFSDebugFactory = YES; | |||
SoOFSDebugNegotiate = YES; | |||
SoOFSDebugPlistObject = YES; | |||
SoOFSDebugRestore = YES; | |||
SoOFSResourceManagerDebugEnabled = YES; | |||
SoOFSWebMethodDebugEnabled = YES; | |||
SoObjCClassDebugEnabled = YES; | |||
SoObjectDataSourceDebugEnabled = YES; | |||
SoObjectMethodDispatcherDebugEnabled = YES; | |||
SoObjectRequestHandlerDebugEnabled = YES; | |||
SoObjectSOAPDispatcherDebugEnabled = YES; | |||
SoPageInvocationDebugEnabled = YES; | |||
SoProductResourceManagerDebugEnabled = YES; | |||
SoRedirectToDefaultMethods = YES; | |||
SoRendererDebugEnabled = YES; | |||
SoSecurityManagerDebugEnabled = YES; | |||
WOIsRedirectionEnabled = YES; | |||
SOGoEASDebugEnabled = YES; | |||
</source> | |||
Отладочные сообщения будут помещены в файл {{path|/var/log/sogo/sogo.log}}. | |||
== Советы и секреты == | |||
=== Заведение адресов в 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> | |||
== Ссылки == | |||
* http://sogo.nu | * http://sogo.nu | ||
* http://www.openchange.org/cookbook/backends/sogo/dovecot.html | * https://www.sogo.nu/files/docs/SOGoInstallationGuide.pdf | ||
* https://wiki.archlinux.org/index.php/OpenChange_server | |||
* [https://web.archive.org/web/20161025184734/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]] | ||
[[Категория:Корпоративная инфраструктура]] | |||
[[Категория:HOWTO]] | [[Категория:HOWTO]] | ||
[[Категория:Миграция]] | |||
{{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 12:33, 2 сентября 2024
Сервер групповой работы, аналогичный 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.
{{#ev:youtube|1hcBSB4Kxww}}
Установка
Для установки стабильной версии SOGo (доступна в стабильных ветках p9/p10/p11 и нестабильном репозитории 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 (см. предварительное создание домена).
Создадим в домене пользователя sogo с паролем Pa$$word (при запросе ввести его дважды):
samba-tool user create sogo
Отключим срок действия пароля:
samba-tool user setexpiry --noexpiry 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;
}
# plparse /etc/sogo/sogo.conf
Parsing '/etc/sogo/sogo.conf' - a dictionary
2. Делаем необходимые службы по умолчанию и перезапускаем их:
for s in samba postgresql memcached sogo httpd2;do chkconfig $s on;service $s restart;done
3. Смотрим на предмет возможных ошибок файл журнала /var/log/sogo/sogo.log
tlsVerifyMode=allowInsecureLocalhost
SOGoIMAPServer = "imaps://localhost:993/?tlsVerifyMode=allowInsecureLocalhost";
Включение веб-интерфейса
Подробнее: 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 a2enmod version a2enmod setenvif a2ensite SOGo service httpd2 restart service sogo restart
Войти по адресу:
https://адрес_сервера/SOGo/
Настройка электронной почты
Для использования электронной почты в SOGo необходимо настроить аутентификацию в Active Directory для Postfix и Dovecot. Подробнее это описано в разделе ActiveDirectory/PostfixDovecot
Проблемы
- Для правильной работы SOGo на устройствах должна быть обновленная текущая база часовых поясов. Особенно это касается устройств под управлением iOS и macOS.
- Если при входе в веб-интерфейс возникает ошибка "Неправильный логин или пароль" (хотя учетные данные верны) и в логах /var/log/sogo/sogo.log есть ошибки наподобие этих:
Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> Could not bind to the LDAP server ldaps://127.0.0.1 (389) using the bind DN: CN=sogo,CN=Users,DC=test,DC=alt
Feb 03 14:39:18 sogod [17543]: [ERROR] <0x0x55d2461cafe0[LDAPSource]> <NSException: 0x55d2463f43b0> NAME:LDAPException REASON:operation bind failed: Can't contact LDAP server (0xFFFFFFFF) INFO:{"error_code" = "-1"; login = "CN=sogo,CN=Users,DC=test,DC=alt"; }
Добавьте опцию "TLS_REQCERT allow" в /etc/openldap/ldap.conf.
Перестартуйте службы:
# systemctl restart samba sogo
Отладка
Для вывода более подробных сообщений отладки необходимо добавить в файл /etc/sogo/sogo.conf параметры:
GCSFolderDebugEnabled = YES;
GCSFolderStoreDebugEnabled = YES;
LDAPDebugEnabled = YES;
MySQL4DebugEnabled = YES;
NGImap4DisableIMAP4Pooling = YES;
ImapDebugEnabled = YES;
OCSFolderManagerSQLDebugEnabled = YES;
PGDebugEnabled = YES;
SOGoDebugRequests = YES;
SOGoMailKeepDraftsAfterSend = YES;
SOGoUIxDebugEnabled = YES;
SoDebugObjectTraversal = YES;
SoSecurityManagerDebugEnabled = YES;
WODontZipResponse = YES;
WODebugZipResponse = YES;
SoClassRegistryDebugEnabled = YES;
SoDebugKeyLookup = YES;
SoDebugProductLoading = YES;
SoDebugProductRegistry = YES;
SoDebugRequestClassification = YES;
SoDebugTraversal = YES;
SoLogSecurityDeclarations = YES;
SoOFSDebugAuthLookup = YES;
SoOFSDebugFactory = YES;
SoOFSDebugNegotiate = YES;
SoOFSDebugPlistObject = YES;
SoOFSDebugRestore = YES;
SoOFSResourceManagerDebugEnabled = YES;
SoOFSWebMethodDebugEnabled = YES;
SoObjCClassDebugEnabled = YES;
SoObjectDataSourceDebugEnabled = YES;
SoObjectMethodDispatcherDebugEnabled = YES;
SoObjectRequestHandlerDebugEnabled = YES;
SoObjectSOAPDispatcherDebugEnabled = YES;
SoPageInvocationDebugEnabled = YES;
SoProductResourceManagerDebugEnabled = YES;
SoRedirectToDefaultMethods = YES;
SoRendererDebugEnabled = YES;
SoSecurityManagerDebugEnabled = YES;
WOIsRedirectionEnabled = YES;
SOGoEASDebugEnabled = YES;
Отладочные сообщения будут помещены в файл /var/log/sogo/sogo.log.
Советы и секреты
Заведение адресов в 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