Avanpost DS : 1.3.16.2. Настройка доменного клиента для работы с доверенным доменом ОС Astra

После выполнения всех действий по инструкции "1.3.16. Настройка доверенных отношений Avanpost DS с MS Active Directory" можно переходить к настройке доверенных отношений на рабочих станциях.

Для настройки рабочих станций под управлением ОС Astra в домене Avanpost DS для работы с MS AD требуется подключиться к ним по SSH и выполнить шаги:

Шаг 1. Установить необходимые пакеты.

Если установлен графический интерфейс FLY, устанавливается пакет "astra-ad-sssd-client".

Если графический интерфейс НЕ установлен, то устанавливается пакет "sssd".

Для этого необходимо выполнить команды:

Пример с пакетом astra-ad-sssd-client
sudo apt update
sudo apt install astra-ad-sssd-client
sudo apt install krb5-kinit nslcd nslcd-utils libnss-ldapd libpam-ldapd libsasl2-modules-gssapi-heimdal

Внимание:

При установке пакета "nslcd" будет предложено установить значения. На данном шаге можно нажать "Enter", оставив значения по умолчанию.

Шаг 2. Добавить репозитории яндекс, отключить стандартные репозитории и установить пакет "kstart".

Для этого необходимо:

2.1. Установить пакеты основных центров сертификации из стандартных репозиториев Astra Linux. 

sudo apt install ca-certificates

2.2. Создать новый файл "/etc/apt/sources.list.d/debian.list" и открыть его для редактирования.

sudo nano /etc/apt/sources.list.d/debian.list

2.3. Добавить в файл "/etc/apt/sources.list.d/debian.list" две записи о новых репозиториях.

/etc/apt/sources.list.d/debian.list
deb  https://mirror.yandex.ru/debian/ bullseye main contrib non-free
deb-src  https://mirror.yandex.ru/debian/ bullseye main contrib non-free

2.4. Добавить ключи репозиториев.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 605C66F00D6C9793
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6ED0E7B82643E131
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0E98404D386FA1D9

2.5. Открыть для редактирования файл "/etc/apt/sources.list".

sudo nano /etc/apt/sources.list

2.6. Закомментировать все репозитории в файле "/etc/apt/sources.list" (как минимум на время настройки).

Пример файла /etc/apt/sources.list
#deb cdrom:[OS Astra Linux 1.7.5 1.7_x86-64 DVD ]/ 1.7_x86-64 contrib main non-free
#deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-main/ 1.7_x86-64 main contrib non-free
#deb https://download.astralinux.ru/astra/stable/1.7_x86-64/repository-update/ 1.7_x86-64 main contrib non-free

2.7. Очистить сохраненные списки пакетов, содержащие информацию из ранее использовавшихся репозиториев.

sudo rm -rf /var/lib/apt/lists/*
sudo apt update

2.8. Установить пакет "kstart".

sudo apt install kstart

Шаг 3. Ввести рабочую станцию в домен Avanpost DS.

Для этого необходимо выполнить действия согласно инструкции "1.3.7. Введение в домен рабочих станций".

Рисунок 99. Пример успешного введения станции в домен

Шаг 4. Остановить службы "sssd" и "nslcd".

Для этого необходимо выполнить команду:

sudo systemctl stop sssd nslcd

Шаг 5. Настроить службу "nslcd".

Для этого необходимо:

5.1. Сделать бэкап конфигурационных файлов службы "nslcd".

mv /etc/systemd/system/nslcd.service /etc/systemd/system/nslcd.service_BAK
mv /etc/init.d/nslcd /etc/init.d/nslcd_old

5.2. Создать новый конфигурационный файл "/etc/systemd/system/nslcd.service".

nano /etc/systemd/system/nslcd.service

Примечание:

Для создания конфигурационного файла можно также воспользоваться командой:
sudo systemctl edit --full nslcd

5.3. Поместить в файл "/etc/systemd/system/nslcd.service" содержимое:

/etc/systemd/system/nslcd.service
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/nslcd
Description=LSB: LDAP connection daemon
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=mail-transport-agent.target
Before=x-display-manager.target
Before=am-utils.service
Before=apache2.service
Before=atd.service
Before=autofs.service
Before=citadel.service
Before=courier-ldap.service
Before=courier-mta.service
Before=courier-mta-ssl.service
Before=courier-pop.service
Before=courier-pop-ssl.service
Before=cron.service
Before=cyrus-imapd.service
Before=dovecot.service
Before=exim4.service
Before=gdm3.service
Before=kdm.service
Before=kolab-cyrus-common.service
Before=mail-transport-agent.service
Before=masqmail.service
Before=nullmailer.service
Before=sendmail.service
Before=slim.service
Before=wdm.service
Before=xdm.service
After=remote-fs.target
After=time-sync.target
After=nss-lookup.target
After=network-online.target
After=slapd.service
After=krb5-kdc.service
After=heimdal-kdc.service
After=heimdal-kcm.service
After=shishi-kdc.service
Wants=network-online.target

[Service]
Type=forking
Restart=always
RestartSec=3
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/nslcd start
ExecStop=/etc/init.d/nslcd stop

[Install]
WantedBy=multi-user.target

5.4. Создать новый конфигурационный файл "/etc/init.d/nslcd".

nano /etc/init.d/nslcd

5.5. Поместить в файл "/etc/init.d/nslcd" содержимое:

/etc/init.d/nslcd
#! /bin/sh

# /etc/init.d/nslcd script for starting and stopping nslcd
# Copyright (C) 2006 West Consulting
# Copyright (C) 2006, 2008, 2009, 2010, 2011, 2012, 2013 Arthur de Jong
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA

### BEGIN INIT INFO
# Provides:          nslcd
# Required-Start:    $remote_fs $syslog $time
# Required-Stop:     $remote_fs $syslog
# Should-Start:      $named $network slapd krb5-kdc heimdal-kdc heimdal-kcm shishi-kdc
# Should-Stop:       $network
# X-Start-Before:    $mail-transport-agent $x-display-manager am-utils apache2 atd autofs citadel courier-ldap courier-mta courier-mta-ssl courier-pop courier-pop-ssl cron cyrus-imapd dovecot exim4 gdm3 kdm kolab-cyrus-common mail-transport-agent masqmail nullmailer sendmail slim wdm xdm
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: LDAP connection daemon
# Description:       nslcd is a LDAP connection daemon that is used to
#                    do LDAP queries for the NSS and PAM modules.
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NSLCD_NAME=nslcd
NSLCD_BIN=/usr/sbin/$NSLCD_NAME
NSLCD_DESC="LDAP connection daemon"
NSLCD_CFG=/etc/nslcd.conf
NSLCD_STATEDIR=/run/nslcd
NSLCD_PIDFILE=$NSLCD_STATEDIR/nslcd.pid

[ -x "$NSLCD_BIN" ] || exit 0
[ -f "$NSLCD_CFG" ] || exit 0

. /lib/lsb/init-functions

# default options for k5start
K5START_BIN=/usr/bin/k5start
K5START_DESC="Keep alive Kerberos ticket"
K5START_START=""
K5START_PIDFILE=$NSLCD_STATEDIR/k5start_nslcd.pid
K5START_USER=$(sed -n 's/^uid[[:space:]]*\([^[:space:]]*\)[[:space:]]*$/\1/ip' $NSLCD_CFG)
K5START_GROUP=$(sed -n 's/^gid[[:space:]]*\([^[:space:]]*\)[[:space:]]*$/\1/ip' $NSLCD_CFG)
K5START_MODE=600
K5START_KEYTAB=/etc/krb5.keytab
K5START_CCREFRESH=60
K5START_PRINCIPAL="host/$(hostname -f)"
K5START_CCFILE=$(sed -n 's/^krb5_ccname[[:space:]]*\(FILE:\)\?\([^:[:space:]]*\)[[:space:]]*$/\2/ip' $NSLCD_CFG)

# check if we should use k5start by default (sasl_mech should be GSSAPI and
# krb5_ccname should be found)
if [ -x "$K5START_BIN" ] && \
   grep -q '^sasl_mech[[:space:]]*GSSAPI[[:space:]]*$' $NSLCD_CFG && \
   [ -n "$K5START_CCFILE" ]
then
  K5START_START="yes"
fi

# read defaults
[ -f /etc/default/$NSLCD_NAME ] && . /etc/default/$NSLCD_NAME

k5start_start()
{
  if [ "$K5START_START" = "yes" ]
  then
    log_daemon_msg "Starting $K5START_DESC" "k5start"
    start-stop-daemon --start \
                      --pidfile $K5START_PIDFILE \
                      --exec $K5START_BIN -- \
                      -b -p $K5START_PIDFILE \
                      -o $K5START_USER \
                      -g $K5START_GROUP \
                      -m $K5START_MODE \
                      -f $K5START_KEYTAB \
                      -K $K5START_CCREFRESH \
                      -u $K5START_PRINCIPAL \
                      -k $K5START_CCFILE
    log_end_msg $?
  fi
}

k5start_stop()
{
  if [ "$K5START_START" = "yes" ]
  then
    log_daemon_msg "Stopping $K5START_DESC" "k5start"
    start-stop-daemon --stop --oknodo --retry 10 --pidfile $K5START_PIDFILE
    log_end_msg $?
    # remove any left behind files
    [ -n "$K5START_PIDFILE" ] && rm -f $K5START_PIDFILE
    [ -n "$K5START_CCFILE" ] && rm -f $K5START_CCFILE
  fi
}

k5start_status()
{
  if [ "$K5START_START" = "yes" ]
  then
    status_of_proc -p "$K5START_PIDFILE" "$K5START_BIN" "k5start"
  fi
}


case "$1" in
start)
  # set up state directory
  [ -d "$NSLCD_STATEDIR" ] || ( mkdir -m 755 "$NSLCD_STATEDIR" ; \
                                chown nslcd:nslcd "$NSLCD_STATEDIR" )
  # start k5start if needed
  k5start_start
  # start nslcd
  log_daemon_msg "Starting $NSLCD_DESC" "$NSLCD_NAME"
  start-stop-daemon --start --oknodo \
                    --pidfile $NSLCD_PIDFILE \
                    --startas $NSLCD_BIN
  log_end_msg $?
  ;;
stop)
  # stop nslcd
  log_daemon_msg "Stopping $NSLCD_DESC" "$NSLCD_NAME"
  start-stop-daemon --stop --oknodo --retry 10 \
                    --pidfile $NSLCD_PIDFILE \
                    --name "$NSLCD_NAME"
  log_end_msg $?
  [ -n "$NSLCD_PIDFILE" ] && rm -f $NSLCD_PIDFILE
  # stop k5start
  k5start_stop
  ;;
restart|force-reload)
  [ -d "$NSLCD_STATEDIR" ] || ( mkdir -m 755 "$NSLCD_STATEDIR" ; \
                                chown nslcd:nslcd "$NSLCD_STATEDIR" )
  log_daemon_msg "Restarting $NSLCD_DESC" "$NSLCD_NAME"
  start-stop-daemon --stop --quiet --retry 10 \
                    --pidfile $NSLCD_PIDFILE \
                    --name "$NSLCD_NAME"
  [ -n "$NSLCD_PIDFILE" ] && rm -f $NSLCD_PIDFILE
  k5start_stop
  k5start_start
  start-stop-daemon --start \
                    --pidfile $NSLCD_PIDFILE \
                    --startas $NSLCD_BIN
  log_end_msg $?
  ;;
status)
  if [ -f "$NSLCD_PIDFILE" ]
  then
    if $NSLCD_BIN --check
    then
      log_success_msg "$NSLCD_NAME running (pid `cat $NSLCD_PIDFILE`)"
      exit 0
    else
      log_success_msg "$NSLCD_NAME stopped"
      exit 1
    fi
  else
    log_success_msg "$NSLCD_NAME stopped"
    exit 3
  fi
  k5start_status
  ;;
*)
  log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}"
  exit 1
  ;;
esac

5.6. Разрешить исполнение новых файлов.

sudo chmod +x /etc/init.d/nslcd && sudo chmod +x /etc/systemd/system/nslcd.service

5.7. Перезапустить демона.

sudo systemctl daemon-reload

5.8. Открыть для редактирования конфигурационный файл "/etc/nslcd.conf". 

nano /etc/nslcd.conf

5.9. Изменить параметры в файле "/etc/nslcd.conf" по шаблону:

Шаблон /etc/nslcd.conf
uid nslcd
gid nslcd
uri ldap://[FQDN КД Avanpost DS] # FQDN контроллера домена Avanpost DS
base dc=[Домен2ур],dc=[Домен1ур] # Base DN для поиска объектов
sasl_mech GSSAPI
sasl_realm [REALM] # REALM домена Avanpost DS
krb5_ccname /tmp/[FQDN РС].tkt # FQDN введенной в домен рабочей станции
filter group (objectclass=posixGroup)
map passwd uid krbPrincipalName

Заменить в строке 3 [FQDN КД Avanpost DS] на свой FQDN или IP контроллера домена Avanpost DS;

Заменить в строке 4 [Домен1ур] на свой домен первого уровня, а [Домен2ур] — на свой домен второго уровня;

Заменить в строке 6 [REALM] на свой REALM домена Avanpost DS;

Заменить в строке 7 [FQDN РС] на свой FQDN рабочей станции.

Пример /etc/nslcd.conf
uid nslcd
gid nslcd
uri ldap://192.168.1.11:389/
base dc=avanpost,dc=local
sasl_mech GSSAPI
sasl_realm AVANPOST.LOCAL
krb5_ccname /tmp/cl09.avanpost.local.tkt
filter group (objectclass=posixGroup)
map passwd uid krbPrincipalName

5.10. Открыть для редактирования конфигурационный файл "/etc/default/nslcd". 

nano /etc/default/nslcd

5.11. Изменить параметры в файле "/etc/default/nslcd" по шаблону:

Шаблон /etc/default/nslcd
K5START_START="yes"
K5START_KEYTAB=[ПУТЬ до keytab] # Путь до файла keytab, обычно /etc/krb5.keytab
K5START_PRINCIPAL="[FQDN РС]" # FQDN рабочей станции 

Заменить в строке 2 [ПУТЬ до keytab] на путь до файла keytab, обычно "/etc/krb5.keytab"

Заменить в строке 3 [FQDN РС] на свой FQDN рабочей станции.

Пример /etc/default/nslcd
K5START_START="yes"
K5START_KEYTAB=/etc/krb5.keytab
K5START_PRINCIPAL="host/cl09.avanpost.local"

Шаг 6. Настроить конфигурационный файл "/etc/nsswitch.conf".

Для этого необходимо:

6.1. Открыть для редактирования конфигурационный файл "/etc/nsswitch.conf". 

nano /etc/nsswitch.conf

6.2. Указать параметр "ldap" в конфигурационном файле "/etc/nsswitch.conf" по примеру:

Пример /etc/nsswitch.conf
passwd:         files sss ldap
group:          files sss ldap
shadow:         files sss ldap
gshadow:        files ldap

hosts:          files mdns4_minimal [NOTFOUND=return] dns ldap
networks:       files ldap

protocols:      db files ldap
services:       db files sss ldap
ethers:         db files ldap
rpc:            db files ldap

netgroup:       nis sss ldap
automount:  sss

Шаг 7. Настроить службу "sssd".

Для этого необходимо:

7.1. Открыть для редактирования конфигурационный файл "/etc/sssd/sssd.conf".

nano /etc/sssd/sssd.conf

7.2. Изменить значение параметра "id_provider" в блоке "domain/ВАШ.ДОМЕН" на "proxy".

id_provider = proxy

7.3. Добавить строки в блок "domain/ВАШ.ДОМЕН":

Строки для добавления
proxy_lib_name = ldap
proxy_pam_target = sssdproxyldap
enumerate = true
Пример /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
reconnection_retries = 3
services = nss, pam, sudo
domains = AVANPOST.LOCAL

[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
memcache_timeout = 5

[pam]
reconnection_retries = 3

[sudo]

[domain/AVANPOST.LOCAL]
entry_cache_timeout = 5
ldap_user_name = cn
debug_level = 9
cache_credentials = False
id_provider = proxy
auth_provider = krb5
chpass_provider = krb5
access_provider = simple

proxy_lib_name = ldap
proxy_pam_target = sssdproxyldap
enumerate = true

dns_discovery_domain = default.avanpost.local

ldap_uri = _srv_
ldap_schema = rfc2307bis
ldap_referrals = False

ldap_sudo_search_base = ou=sudoers,dc=system
ldap_sudo_full_refresh_interval=86400
ldap_sudo_smart_refresh_interval=3600

ldap_search_base = dc=avanpost,dc=local
ldap_user_search_base = dc=avanpost,dc=local
ldap_user_object_class = krbPrincipal

ldap_search_timeout = 60
ldap_network_timeout = 60
ldap_opt_timeout = 60

ldap_access_filter = (host=ALL)

ldap_force_upper_case_realm = True

ldap_id_use_start_tls = False

ldap_sasl_mech = GSSAPI
ldap_sasl_authid = host/cl09.avanpost.local@AVANPOST.LOCAL

#ldap_default_bind_dn = cn=cl09,ou=hosts,dc=avanpost,dc=local
#ldap_default_authtok_type = obfuscated_password
#ldap_default_authtok = AAAQAKTOWDWVgMb1NyDGgWcpxKui7xQ5LF96VUN/kEPewwUUKX3I9h3heGmghngF1hMXUDXjyDJa3xj7MZ/MC0rDQq4AAQID

krb5_realm = AVANPOST.LOCAL
krb5_canonicalize = False
krb5_server = _srv_
krb5_kpasswd = _srv_

Шаг 8. Очистить кэш.

Для этого необходимо выполнить команду:

sss_cache -E

Шаг 9. Запустить службы "sssd" и "nslcd", добавить службу "nslcd" в автозапуск.

Для этого необходимо выполнить команды:

sudo systemctl start sssd
sudo systemctl enable --now nslcd

Шаг 10. Проверить работу DNS серверов.

Для этого необходимо выполнить команды по шаблону:

Шаблон команд
dig srv _ldap._tcp.[REALM ADS] | grep 389
dig srv _ldap._tcp.[REALM MS AD] | grep 389

Заменить [REALM ADS] на свой REALM домена Avanpost DS;

Заменить [REALM MS AD] на свой REALM домена MS AD;

Пример команд
dig srv _ldap._tcp.avanpost.local | grep 389
dig srv _ldap._tcp.windomen.adds | grep 389

Рисунок 100. Пример вывода команд

Шаг 11. Авторизоваться на рабочей станции под доменным и под доверенным пользователем.

Для этого необходимо выполнить команды по шаблону и ввести пароли по запросу:

Шаблон команд
su - [Username ADS]@[REALM ADS]
su - [Username MS AD]@[REALM MS AD]

Заменить [Username ADS] на свой username пользователя из домена Avanpost DS;

Заменить [REALM ADS] на свой REALM домена Avanpost DS;

Заменить [Username MS AD] на свой username пользователя из домена MS AD;

Заменить [REALM MS AD] на свой REALM домена MS AD;

Пример команд
su - lipov@AVANPOST.LOCAL  #Заходим под доменным юзером Avanpost DS
su - admin@windomen.adds   #Заходим под доменным юзером MS AD

Рисунок 101. Пример успешных авторизаций

Внимание:

Логин для авторизация на рабочей станции указывается по шаблону: username@REALM

Для авторизации под пользователями, находящимися в домене Avanpost DS, требуется вводить REALM в верхнем регистре, например: "user@AVANPOST.LOCAL".

Для авторизации на рабочей станции под пользователем из доверенного домена MS AD следует указывать REALM в том регистре, который используется для домена в MS AD. 

Рассмотрим примеры:

Рисунок 102. Пример домена в MS AD в нижнем регистре

В данном случае используется нижний регистр, значит REALM для входа следует указывать в нижнем регистре: "user@co.avanpost.com".


Рисунок 103. Пример домена в MS AD в комбинированном регистре

В данном случае используется комбинированный регистр, значит REALM для входа следует указывать также: "user@TRUST01.local".

Если авторизации под доменным пользователем, созданном в Avanpost DS, и под доверенным пользователем, созданном в MS AD, успешны, настройка доверенных отношений на рабочей станции завершена.

Обсуждение