Настройка аутентификации с доменной учетной записью на сервере контроллера домена Эллес

После развертывания контроллера домена Эллес на сервере по умолчанию отсутствует возможность аутентификации на нем с использованием доменной учетной записи (например, по протоколу SSH).

Чтобы такая возможность появилась, требуется дополнительная настройка инструментария Winbind, входящего в состав Эллес, либо установка и настройка инструментария SSSD.

Раздел содержит максимально упрощенные примеры настройки с минимальным набором параметров при развертывании Эллес на сервере с ОС Astra Linux.

Предварительные требования

Для успешного выполнения описываемых шагов обеспечьте соблюдение следующих требований:

  • на сервере развернут и настроен контроллер домена Эллес;

  • на сервере настроен доступ к репозиториям с пакетами используемого дистрибутива операционной системы;

  • все действия выполняются на сервере от имени учетной записи с локальными административными правами.

Настройка с использованием SSSD

Технология SSSD не поддерживает:

  • NTLM-аутентификацию;

  • двусторонние транзитивные отношения доверия на уровне лесов Active Directory;

  • NetBIOS-имена.

Для настройки возможности аутентификации на сервере контроллера домена Эллес с использованием инструментария SSSD:

  1. Установите на сервере пакеты, необходимые для работы SSSD:

    sudo apt install sssd sssd-tools libnss-sss libpam-sss -y
    В процессе установке пакетов будет выдано оповещение о конфликте библиотек проверки паролей: по умолчанию используется библиотека cracklib; для работы SSSD требуется библиотека pwquality. Дополнительные действия со стороны пользователя в этом случае не требуются.
  2. При установке SSSD модуль pam_sss.so автоматически добавляется в файлы конфигурации подключаемых модулей аутентификации (PAM) в каталоге /etc/pam.d.

    Для добавления необходимых модулей PAM вручную может использоваться инструмент pam-auth-update. Например:

    sudo pam-auth-update --enable sss --disable cracklib --enable pwquality --enable tally --enable systemd --enable unix --force

    Проверьте наличие в файлах строк для подключения модуля pam_sss.so:

    • убедитесь, что файл /etc/pam.d/common-auth содержит следующую строку:

      auth [success=1 default=ignore] pam_sss.so use_first_pass

      В этом случае при попытке аутентификации используется модуль pam_sss.so для проверки учетных данных пользователя в службе каталогов. Если аутентификация завершается успешно, дальнейшие проверки не выполняются. При проверке модуль pam_sss.so использует пароль, введенный пользователем при первом запросе.

      Пример содержимого файла /etc/pam.d/common-auth:

      auth [success=ignore default=2] pam_localuser.so
      auth [success=1 default=ignore] pam_succeed_if.so quiet user ingroup astra-admin
      auth [success=ignore default=die] pam_tally.so per_user deny=8
      auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
      auth [success=1 default=ignore] pam_sss.so use_first_pass
      auth requisite pam_deny.so
      auth required pam_permit.so
    • убедитесь, что файл /etc/pam.d/common-account содержит следующую строку:

      account [default=bad success=ok user_unknown=ignore] pam_sss.so

      В этом случае при попытке аутентификации проверяется, что учетная запись существует и активна в службе каталогов. Если учетная запись найдена и активна, аутентификация считается успешной. Если учетная запись не найдена, это не считается ошибкой, и аутентификация может быть продолжена другими модулями PAM.

      Пример содержимого файла /etc/pam.d/common-account:

      account required pam_tally.so
      account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
      account requisite pam_deny.so
      account required pam_permit.so
      account [success=1 default=ignore] pam_localuser.so
      account [default=bad success=ok user_unknown=ignore] pam_sss.so
    • убедитесь, что файл /etc/pam.d/common-password содержит следующую строку:

      password [success=1 default=ignore] pam_sss.so use_authtok

      В этом случае при попытке аутентификации модуль pam_sss.so проверяет, совпадает ли введенный пользователем пароль с паролем, сохраненным в службе каталогов. Если пароль найден и совпадет, аутентификация считается успешной, и другие методы проверки пароля не используются. При проверке используется уже существующий токен аутентификации (полученный при предыдущей проверке). Если проверка завершается неуспешно, система переходит к другим заданным в файле правилам.

      Пример содержимого файла /etc/pam.d/common-password:

      password requisite pam_pwquality.so retry=3
      password [success=2 default=ignore] pam_unix.so obscure use_authtok try_first_pass gost12_512
      password [success=1 default=ignore] pam_sss.so use_authtok
      password requisite pam_deny.so
      password required pam_permit.so
    • убедитесь, что файл /etc/pam.d/common-session содержит следующую строку:

      session optional pam_sss.so

      В этом случае во время сеанса пользователя выполняется попытка использовать модуль pam_sss.so для получения информации о пользователе и управления его сеансом. Если SSSD недоступен или возникает ошибка, сеанс пользователя продолжается без его использования.

      Для настройки создания домашнего каталога при входе пользователя с доменной учетной записью в систему также добавьте следующую строку:

      session optional pam_mkhomedir.so skel=/etc/skel umask=077

      В этом случае при создании домашнего каталога используется шаблон /etc/skel, а для новых файлов и подкаталогов устанавливается маска доступа 077.

      Пример содержимого файла /etc/pam.d/common-session:

      session [default=1] pam_permit.so
      session requisite pam_deny.so
      session required pam_permit.so
      session required pam_unix.so
      session optional pam_sss.so
      session optional pam_systemd.so
      session optional pam_mkhomedir.so skel=/etc/skel umask=077
  3. При установке SSSD в файл /etc/nsswitch.conf добавляется соответствующий поставщик (sss) данных для поиска доменных пользователей и групп в локальном пространстве имен хоста контроллера. Убедитесь, что в файле отсутствует winbind.

    Пример содержимого файла /etc/nsswitch.conf для работы с SSSD:

    passwd:         files sss
    group:          files sss
    shadow:         files sss
    gshadow:        files
    
    hosts:          files dns
    networks:       files
    
    protocols:      db files
    services:       db files sss
    ethers:         db files
    rpc:            db files
    
    netgroup:       nis sss
    automount:      sss
  4. Создайте конфигурационный файл sssd.conf.

    Пример конфигурационного файла /etc/sssd/sssd.conf с минимальным набором настроек:

    [sssd]
    domains = elles.inno.tech
    config_file_version = 2
    services = nss, pam
    
    [domain/elles.inno.tech]
    ad_domain = elles.inno.tech
    ad_server = dc1.elles.inno.tech
    id_provider = ad
    auth_provider = ad
    access_provider = ad
    ldap_id_mapping = True
    ad_gpo_access_control = permissive
    default_shell = /bin/bash
    fallback_homedir = /home/%d/%u
    ad_maximum_machine_account_password_age = 0
    krb5_keytab = /app/inno-samba/private/secrets.keytab
    cache_credentials = true
    
    [pam]
    offline_credentials_expiration = 3

    В примере конфигурации:

    • значение 0 в параметре ad_maximum_machine_account_password_age отключает периодическое обновление пароля машинной учетной записи сервера контроллера домена средствами SSSD;

      Для этой цели необходимо использовать скрипт update-dc-machine-password, поставляемый в составе Эллес (см. раздел «Смена пароля машинной учетной записи контроллера домена»).
    • параметр krb5_keytab указывает путь к keytab-файлу, сформированному Эллес;

    • значение true в параметре cache_credentials включает сохранение учетных данных в кэше SSSD после успешного входа;

    • параметр offline_credentials_expiration в блоке pam ограничивает период в днях, в течение которого запись с учетными данными пользователя может храниться в кэше.

    Остальные параметры настраиваются для работы SSSD с Active Directory в качестве поставщика идентифицирующей информации в соответствии с особенностями развертывания конкретного экземпляра Эллес.

    См. описание параметров и доступных значений в справочных страницах:

    man sssd-ad
    man sssd.conf
  5. Выдайте корректные права для доступа к файлу sssd.conf:

    sudo chmod 0600 /etc/sssd/sssd.conf
  6. Запустите сервис sssd:

    sudo systemctl start sssd.service
  7. Проверьте корректность подключения к домену через SSSD, используя, например, sssctl:

    • просмотр списка доменов:

      sudo sssctl domain-list
      elles.inno.tech
    • получение информации о домене:

      sudo sssctl domain-status elles.inno.tech
      Online status: Online
      
      Active servers:
      AD Global Catalog: dc1.elles.inno.tech
      AD Domain Controller: dc1.elles.inno.tech
      
      Discovered AD Global Catalog servers:
      - dc1.elles.inno.tech
      
      Discovered AD Domain Controller servers:
      - dc1.elles.inno.tech
      - dc2.elles.inno.tech
      - dc3.elles.inno.tech
  8. При необходимости настройте возможность входа в систему пользователей с доменными учетными записями по протоколу SSH.
    Пример настройки простого доступа с использованием аутентификации PAM с паролем для пользователей из группы Domain Admins локального домена и доверенного домена (ad.inno.tech):

    • добавьте следующие настройки в конфигурационный файл SSH-сервера /etc/ssh/sshd_config:

      UsePAM  yes
      PasswordAuthentication yes
      AllowGroups admin root sudo "domain admins" "domain admins@ad.inno.tech"

      В примере:

      • domain admins — имя группы в локальном домене и доверенном домене в нижнем регистре;

      • ad.inno.tech — полное имя доверенного домена.

      Данные настройки приводятся исключительно в качестве примера. В условиях реальной эксплуатации для аутентификации по SSH рекомендуется использовать сертификаты или ключи.
    • перезапустите службу sshd:

      sudo systemctl restart sshd.service
  9. При необходимости предоставьте локальные права пользователям с доменными учетными записями.
    Например, для группы пользователей Domain Admins в локальном домене и доверенном домене (ad.inno.tech):

    • создайте файл с описанием разрешений для группы в каталоге /etc/sudoers.d:

      echo -e "%Domain\ Admins ALL=(ALL) PASSWD: ALL" >> /etc/sudoers.d/domain_admins # для группы в локальном домене
      echo -e "%Domain\ Admins@AD.INNO.TECH ALL=(ALL) PASSWD: ALL" >> /etc/sudoers.d/domain_admins # для группы в доверенном домене с полным именем ad.inno.tech
    • выдайте корректные права для доступа к созданному файлу:

      chmod 0440 /etc/sudoers.d/domain_admins
    • убедитесь в корректности настройки:

      visudo -cf /etc/sudoers.d/domain_admins
  10. Для проверки корректности настройки выполните вход на сервер с использованием доменной учетной записи из группы Domain Admins, в том числе с другого хоста в домене по SSH.

Настройка с использованием Winbind

Для настройки аутентификации средствами Winbind:

  1. Убедитесь, что на хосте отсутствуют настройки для аутентификации средствами SSSD. При наличии — удалите их.

  2. Для использования библиотек libnss_winbind.so.2 и pam_winbind.so, устанавливаемых при развертывании Эллес, создайте символические ссылки на них:

    • получите пути к библиотекам после установки Эллес:

      sudo find / -xdev -type f -name libnss_winbind.so.2 -o -name pam_winbind.so
      /app/inno-samba/lib/libnss_winbind.so.2
      /app/inno-samba/lib/security/pam_winbind.so
    • создайте символические ссылки:

      sudo ln -s /app/inno-samba/lib/libnss_winbind.so.2 /lib/x86_64-linux-gnu/
      sudo ln -s /lib/x86_64-linux-gnu/libnss_winbind.so.2 /lib/x86_64-linux-gnu/libnss_winbind.so
      sudo ln -s /app/inno-samba/lib/security/pam_winbind.so /lib/security/pam_winbind.so
      ldconfig
  3. В файле настроек диспетчера службы имен /etc/nsswitch.conf укажите winbind в качестве поставщика данных для поиска доменных пользователей и групп в локальном пространстве имен хоста контроллера домена:

    ...
    passwd: files winbind
    group:  files winbind
    ...
  4. При необходимости в конфигурационном файле Эллес /app/inno-samba/etc/smb.conf укажите шаблон пути для домашнего каталога прошедшего аутентификацию доменного пользователя (по умолчанию — /home/%D/%U) и командную оболочку (по умолчанию — /bin/false). Например:

    [global]
        ...
        template shell = /bin/bash
        template homedir = /home/%U
        ...
  5. Для применения внесенных изменений перезапустите сервис inno-samba:

    sudo systemctl restart inno-samba.service
  6. Добавьте модуль pam_winbind.so в файлы конфигурации подключаемых модулей аутентификации (PAM) в каталоге /etc/pam.d:

    • добавьте в файл /etc/pam.d/common-auth следующую строку:

      auth sufficient pam_winbind.so use_first_pass

      В этом случае при попытке аутентификации пользователя система в первую очередь пытается найти его учетную запись в службе каталогов через модуль pam_winbind.so. Если учетная запись найдена и пароль совпадет, то аутентификация считается успешной, и другие методы аутентификации не используются.

      Пример содержимого файла /etc/pam.d/common-auth после добавления строки:

      auth [success=ignore default=2] pam_localuser.so
      auth [success=1 default=ignore] pam_succeed_if.so quiet user ingroup astra-admin
      auth [success=ignore default=die] pam_tally.so per_user deny=8
      auth [success=1 default=ignore] pam_unix.so nullok_secure try_first_pass
      auth requisite pam_succeed_if.so uid >= 1000 quiet_success
      auth sufficient pam_winbind.so use_first_pass
      auth requisite pam_deny.so
      auth required pam_permit.so
    • добавьте в файл /etc/pam.d/common-account следующую строку:

      account [default=bad success=ok user_unknown=ignore] pam_winbind.so

      В этом случае при попытке аутентификации проверяется, что учетная запись существует и активна в службе каталогов. Если учетная запись найдена и активна, аутентификация считается успешной. Если учетная запись не найдена, то это не считается ошибкой, и аутентификация может быть продолжена другими модулями PAM.

      Пример содержимого файла /etc/pam.d/common-account после добавления строки:

      account required pam_tally.so
      account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so
      account requisite pam_deny.so
      account [default=bad success=ok user_unknown=ignore] pam_winbind.so
      account required pam_permit.so
    • добавьте в файл /etc/pam.d/common-password следующую строку:

      password sufficient pam_winbind.so use_authtok

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

      Пример содержимого файла /etc/pam.d/common-password после добавления строки:

      password requisite pam_cracklib.so retry=3 minlen=8 difok=3
      password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass gost12_512
      password sufficient pam_winbind.so use_authtok
      password requisite pam_deny.so
      password required pam_permit.so
    • для настройки создания домашнего каталога при входе пользователя с доменной учетной записью в систему добавьте в файл /etc/pam.d/common-session следующую строку:

      session optional pam_mkhomedir.so skel=/etc/skel umask=077

      В этом случае при успешной аутентификации пользователя предпринимается попытка создать для него домашний каталог. Если по каким-либо причинам создать каталог не удается, сеанс пользователя все равно создается. При создании домашнего каталога используется шаблон /etc/skel, а для новых файлов и подкаталогов устанавливается маска доступа 077.

      Пример содержимого файла /etc/pam.d/common-session после добавления строки:

      session [default=1] pam_permit.so
      session requisite pam_deny.so
      session required pam_permit.so
      session required pam_unix.so
      session optional pam_systemd.so
      session optional pam_mkhomedir.so skel=/etc/skel umask=077
  7. При необходимости настройте возможность входа в систему пользователей с доменными учетными записями по протоколу SSH.
    Пример настройки простого доступа с использованием аутентификации PAM с паролем для пользователей из группы Domain Admins локального домена и доверенного домена (ad.inno.tech):

    • добавьте следующие настройки в конфигурационный файл SSH-сервера /etc/ssh/sshd_config:

      UsePAM  yes
      PasswordAuthentication yes
      AllowGroups admin root sudo "domain admins" "AD\domain admins"

      В примере:

      • domain admins — имя группы в локальном домене и доверенном домене в нижнем регистре;

      • AD — NetBIOS-имя доверенного домена.

      Данные настройки приводятся исключительно в качестве примера. В условиях реальной эксплуатации для аутентификации по SSH рекомендуется использовать сертификаты или ключи.
    • перезапустите службу sshd:

      sudo systemctl restart sshd.service
  8. При необходимости предоставьте локальные права пользователям с доменными учетными записями.
    Например, для группы пользователей Domain Admins в локальном домене и доверенном домене (ad.inno.tech):

    • создайте файл с описанием разрешений для группы в каталоге /etc/sudoers.d:

      echo -e "%Domain\ Admins ALL=(ALL) PASSWD: ALL" >> /etc/sudoers.d/domain_admins # для группы в локальном домене
      echo -e "%AD\\Domain\ Admins ALL=(ALL) PASSWD: ALL" >> /etc/sudoers.d/domain_admins # для группы в доверенном домене с NetBIOS-именем AD
    • выдайте корректные права для доступа к созданному файлу:

      chmod 0440 /etc/sudoers.d/domain_admins
    • убедитесь в корректности настройки:

      visudo -cf /etc/sudoers.d/domain_admins
  9. Для проверки корректности настройки выполните вход на сервер с использованием доменной учетной записи из группы Domain Admins, в том числе с другого хоста в домене по SSH.