ALTSOGO

Материал из wiki.nntc.nnov.ru
Версия от 00:20, 4 августа 2025; Vovan (обсуждение | вклад) (Создание конфигурационного файла для SOGO)
Перейти к навигации Перейти к поиску

План

1. Ставим ALT DC

2. Ставим PostgreSQL сервер

3. Ставим SOGO и настраиваем его на ALT DC и PostgreSQL

Делаем всё на Alt Starterkit GNOME P11, опираясь на документацию от P10 (на момент создания этой статьи для P11 официальной документации не было):

sogo--chapter

sambadc--chapter

Ставим ALT DC

После обновления системы и ядра...

Выставляем часовой пояс и синхронизируем время

timedatectl set-timezone Europe/Moscow
ntpdate pool.ntp.org

Отключаем сервисы и устанавливаем необходимые пакеты

for service in smb nmb; do systemctl disable $service; systemctl stop $service; done
apt-get install -y task-samba-dc admc

Подготовка конфигурационных файлов ситемы

Задаём имя хоста

hostnamectl set-hostname dc.domain.alt

Также проверить и при необходимости поправить имя хоста в файле

/etc/sysconfig/network

Перезагрузиться для проверки

reboot

Далее настраиваем 127.0.0.1 в качестве DNS сервера системы (далее в команде создания домена мы добавим возможность для этого DNS сервера делать запросы к внешним DNS серверам)

cat << EOF > /etc/resolv.conf
search alt
nameserver 127.0.0.1
EOF

Здесь приведена команда конфигурирования файла /etc/hosts, исходя из того, что у настраиваемого сервера локальный IP-адрес: 192.168.1.246

cat << EOF > /etc/hosts
192.168.1.246 dc.domain.alt domain.alt
127.0.0.1 localhost
EOF

Создание домена одной командой

Перед выполнением команды создания домена нужно удалить конфигурационный файл:

/bin/rm -rf /etc/samba/smb.conf /var/lib/samba /var/cache/samba

mkdir -p /var/lib/samba/sysvol

Для домена

domain.alt

с паролем

Pa$$word

и адресом внешнего DNS сервера

8.8.8.8

команда создания домена будет такой:

samba-tool domain provision --realm=domain.alt --domain domain --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL --server-role=dc --option="dns forwarder=8.8.8.8"

Включение сервиса и проверка работы домена

Включение

systemctl enable --now samba

Проверка

samba-tool domain info 127.0.0.1

В ответ должно прилететь что-то типа этого:

Forest           : domain.alt
Domain           : domain.alt
Netbios domain   : DOMAIN
DC name          : dc.domain.alt
DC netbios name  : DC
Server site      : Default-First-Site-Name
Client site      : Default-First-Site-Name

Настройка Kerberos

/bin/cp /var/lib/samba/private/krb5.conf /etc/krb5.conf

Запуск ADMC

ADMC -- графическая утилита. Поэтому желательно на сервере иметь графику.

В этой статье контроллер домена развёртывается на базе Alt Starterkit GNOME P11, поэтому с наличием графики проблем нет (да и кого волнует в 21 веке лишние пару сотен мегабайт на диске виртуальной машины).

Для корректной работы приложения ADMC необходимо получить билет Kerberos командой

kinit Administrator

В ответ необходимо ввести пароль от доменного администратора.


ВАЖНО! Иногда стоит эту команду вводить вручную, а не полагаться на написанный скрипт (про скрипт буквально ченез несколько строчек ниже будет), поскольку иногда утилита


kinit

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

Собственно, про скрипт: Чтобы это автоматизировать, можно, например, сделать скрипт автоматического запуска ADMC.

В примере создаётся скрипт в файле

/opt/admc.sh

для запуска ADMC с получением билета для пользователя

Administrator с паролем
Pa$$word

Пример heredoc-команды:

cat << 'EOF' > /opt/admc.sh
#!/bin/bash
echo 'Pa$$word' | kinit Administrator
admc
EOF
chmod +x /opt/admc.sh


Ставим PostgreSQL сервер

Установка

apt-get install -y postgresql17-server postgresql17-contrib

Первоначальный запуск

/etc/init.d/postgresql initdb

ВНИМАНИЕ!

Два последующих конфигурационных файла будут созданы без лишних комментариев внутри только для ускорения процесса демонстрации. Поэтому предварительно для них будут созданы резервные копии, в которые настоятельно рекомендуется хотя-бы один раз заглянуть, чтобы понять, что параметров значительно больше чем необходимых и достаточных для работы!

Делаем резервные копии

cp /var/lib/pgsql/data/pg_hba.conf /var/lib/pgsql/data/pg_hba.conf.backup
cp /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/postgresql.conf.backup

Далее используем heredoc-синтаксис, потому что мы ленивы и прагматичны...

cat << 'EOF' > /var/lib/pgsql/data/pg_hba.conf 
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0            md5

# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
EOF
cat << 'EOF' > /var/lib/pgsql/data/postgresql.conf 
listen_addresses = '*'		# what IP address(es) to listen on;
max_connections = 100			# (change requires restart)
shared_buffers = 128MB			# min 128kB
dynamic_shared_memory_type = posix	# the default is usually the first option
max_wal_size = 1GB
min_wal_size = 80MB
log_destination = 'stderr'		# Valid values are combinations of
logging_collector = on		# Enable capturing of stderr, jsonlog,
log_directory = 'log'			# directory where log files are written,
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'	# log file name pattern,
log_file_mode = 0600			# creation mode for log files,
log_rotation_size = 10MB		# Automatic rotation of logfiles will
log_min_messages = warning		# values in order of decreasing detail:
log_checkpoints = off
log_connections = off
log_disconnections = off
log_timezone = UTC
datestyle = 'iso, mdy'
timezone = UTC
default_text_search_config = 'pg_catalog.english'
EOF
systemctl enable --now postgresql

Создаём пользователя и базу данных для SOGO:

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

Перезапускаем сервис

systemctl restart postgresql

Проверяем

psql -U sogo sogo -c "\l"

Ставим SOGO и настраиваем его на ALT DC и PostgreSQL

Ставим SOGO

apt-get install -y task-sogo

Настройка Samba DC

Для этого места была настройка контроллера домена, описанная в разделе 1.1 этой статьи.

Итак, создаём в домене пользователя sogo с паролем

Pa$$word

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

samba-tool user create sogo
samba-tool user setexpiry --noexpiry sogo

Создание конфигурационного файла для SOGO

Здесь конфигурационный файл приведён для домена

domain.alt

Для другого домена рекомендуется в тексте содержимого файла предварительно заменить поочерёдно слова

domain

и

alt

на части необходимого доменного имени.

Также, конфигурационный файл предполагает подключение к домены, работающему на

127.0.0.1

под пользователем

sogo

с паролем

Pa$$word

Исходя из этого, можно скорректировать текст конфигурационного файла!

Создать файл одной heredoc-командой:

cat << 'EOF' > /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/?tlsVerifyMode=allowInsecureLocalhost";
  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=domain,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=domain,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=domain,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=domain,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=domain,DC=alt";
        bindDN = "CN=sogo,CN=Users,DC=domain,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 = YES;
  SOGoLanguage = Russian;
  SOGoTimeZone = Europe/Moscow;
  SOGoFirstDayOfWeek = 1;
}
EOF