Назад | Перейти на главную страницу

Проблемы интеграции FreeBSD 10.3 SSSD AD

У меня много проблем с FreeBSD 10.3

Я считаю, что бинарные пакеты бесполезны. Мне пришлось построить почти все, чтобы все «работало». Мне нравится использовать инструмент adcli для присоединения к домену (НАМНОГО приятнее, чем самба). Но двоичная версия в пакете не работает. Построение его из портов со всеми очевидными функциями заставляет его работать.

На данный момент у меня это есть до такой степени, что я могу успешно выполнить «getent», но, что бы я ни пытался, он не авторизует мою учетную запись. SSH, sudo, даже запуск входа напрямую, и он ведет себя так, как будто у меня неправильный пароль.

Мне интересно, нужно ли мне использовать пакет heimdal krb вместо MIT?

Вот мои соответствующие конфиги:

krb5.conf:

[libdefaults]
   default_realm = MYDOMAIN-SR.NET
   forwardable = true
[realms]
   MYDOMAIN-SR.NET = {
      admin_server = ad.mydomain-sr.net
      kdc = ad.mydomain-sr.net
   }
[domain_realm]
   mydomain.net = MYDOMAIN-SR.NET
   .mydomain.net = MYDOMAIN-SR.NET
   MYDOMAIN.net = MYDOMAIN-SR.NET
   .MYDOMAIN.net = MYDOMAIN-SR.NET

nsswitch.conf:

#
# nsswitch.conf(5) - name service switch configuration file
# $FreeBSD: releng/10.3/etc/nsswitch.conf 224765 2011-08-10 20:52:02Z dougb $
#
#group: compat
group: files sss
#group_compat: nis
hosts: files dns
networks: files
#passwd: compat
passwd: files sss
#passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

sssd.conf:

[sssd]
config_file_version = 2
#domains = mydomain-sr.net
domains = MYDOMAIN-SR.NET
services = nss, pam, pac
fallback_homedir = /home/%u
debug_level = 9

[pam]
pam_verbosity = 3

[domain/MYDOMAIN-SR.NET]
id_provider = ad
access_provider = ad
auth_provider = ad
chpass_provider = ad
ldap_id_mapping = False
#cache_credentials = true
cache_credentials = false
ad_server = ad.mydomain-sr.net
override_shell = /bin/tcsh
#ldap_sasl_canonicalize = false
#krb5_canonicalize = false

(Скопировано из другого вопроса. Это мои заметки / руководство о том, как все это работает на большом клиенте с существующей инфраструктурой AD)

Вот мое руководство по интеграции AD через SSSD с этими версиями FreeBSD на момент написания этой статьи (6/2017)

  • FreeBSD 10.3 и 11.0 (10.3-RELEASE-p18 и 11.0-RELEASE-p9)
  • Установка (и интересная упаковка и проблемы с зависимостями)

    • Требуемые пакеты кажутся несовместимыми с Heimdal Kerberos, поэтому все должно быть установлено и скомпилировано с включенными флагами MIT Kerberos. Скорее всего, это скорее проблема зависимости упаковки, чем фактическая проблема совместимости.
    • Heimdal устанавливается вместе с базовой системой, поэтому у вас остается два набора команд Kerberos, если вы устанавливаете MIT Kerberos, один набор в /usr/bin, а другой в /usr/local/bin. Поскольку кажется, что ни один из базовых системных файлов не находится в пакете, вы не можете просто удалить материал Heimdal KRB. Что-то, о чем нужно знать.
    • Прямые зависимости различных пакетов (интересные зависимости выделены жирным шрифтом, конфликтующие зависимости выделены жирным курсивом):

      • net-mgmt/adcli:net/openldap24-sasl-client
      • security/cyrus-sasl2-gssapi: security/cyrus-sasl2
      • net/openldap24-sasl-client: security/cyrus-sasl2
      • security/sssd: security/nss
      • security/sssd:security/krb5
      • security/sssd: security/cyrus-sasl2
      • security/sssd:net/openldap24-client
      • security/sssd: lang/python27
      • security/sssd: lang/python2
      • security/sssd: dns/c-ares
      • security/sssd: devel/tevent
      • security/sssd: devel/talloc
      • security/sssd: devel/popt
      • security/sssd: devel/pcre
      • security/sssd: devel/libunistring
      • security/sssd: devel/libinotify
      • security/sssd: devel/gettext-runtime
      • security/sssd: devel/ding-libs
      • security/sssd: devel/dbus
      • security/sssd: databases/tdb
      • security/sssd: databases/ldb
    • Обратные зависимости различных пакетов:

      • net/openldap24-sasl-client: sysutils/msktutil
      • net/openldap24-sasl-client: net/nss-pam-ldapd-sasl
      • net/openldap24-sasl-client: net-mgmt/adcli
        • Как видим sssd сам требует MIT Kerberos, хотя у нас есть Heimdal в качестве базового пакета
        • adcli хочет openldap-sasl-client, но другие пакеты (включая подзависимости sssd) втянуть openldap-client, который является мьютексом с клиентом sasl (по какой-то глупой причине). Это делает установку немного болезненной, даже с минимальным набором двоичных пакетов.
        • Эти зависимости присутствуют как для двоичных пакетов репо, так и для тех, которые построены в дереве портов. Это требует раздражающего конкретного метода установки, чтобы получить все, что нам нужно (описано ниже).
    • На момент написания этой статьи двоичный пакет для SSSD для FreeBSD не включает поддержку AD в SSSD.

      • Версия SSSD для портов должна быть собрана с соответствующими включенными параметрами (make config):
        • SMB
      • SSSD также хочет использовать openldap-client, когда ему действительно нужен openldap-sasl-client для правильной работы.
    • Бинарная версия pkg adcli существует, но на момент написания этой статьи не работает.
      • Опять же, версия портов была скомпилирована с правильными включенными опциями:
        • GSSAPI_MIT
    • cyrus-sasl-gssapi требуется, но двоичная версия pkg не работает и имеет странные проблемы с зависимостями, которые заставляют ее удалять SSSD.
      • Соберите его из портов с включенной опцией MIT-KRB5:
        • GSSAPI_MIT
    • openldap-sasl-client требуется для функциональности, но SSSD хочет использовать версию openldap, отличную от SASL.
      • Чтобы заставить эту работу
        • настроить openldap-sasl-client с GSSAPI выбран вариант (make config) в портах.
        • Сделайте порты, чтобы построить его
        • Перед установкой выполните pkg remove –f openldap-client
          • Это удалит openldap-client без автоматического удаления каких-либо других пакетов (например, SSSD) и разрешить установку версии SASL
        • Сделайте установку для openldap-sasl-client
          • Это установит его в систему
    • Это обеспечит все необходимое для функционального SSSD с возможностями AD.
    • Обратите внимание, что если вы скомпилируете SSSD из портов, он будет задействовать МНОГО зависимостей, что приведет к их созданию и потребует выбора параметров конфигурации.
      • Рекомендуется сначала установить двоичный пакет с помощью pkg install sssd, а затем удалить его с помощью pkg remove –f sssd
        • Это приведет к появлению бинарных пакетов для большинства вещей, которые необходимо использовать для SSSD, и избавит от необходимости создавать все это в зависимости от портов, что занимает довольно много времени.
      • После удаления переустановите SSSD из портов с включенными вышеупомянутыми параметрами, и вам нужно будет перестроить только четыре упомянутых выше пакета, чтобы получить рабочую настройку.
    • (Необязательно) Когда все будет работать и проверено, вы можете использовать pkg create для создания двоичных пакетов из четырех пакетов с соответствующими включенными опциями и использования их вместо того, чтобы встраивать их в порты в каждой системе. Установка двоичного файла выполняется аналогично процессу сборки портов:

      • pkg install sssd-1.11.7_8.txz
        • Ваша версия конечно может отличаться
        • Это установит двоичный пакет для SSSD и получит все необходимое из репозитория FreeBSD.
      • pkg add остальные пакеты (не устанавливать, добавлять), сохраняя пакет openldap напоследок.
      • Перед добавлением openldap-sasl-client сделать pkg remove –f openldap-client
        • Это избавляет от версии, отличной от SASL, и позволяет установить нашу версию
      • pkg add openldap-sasl-client-2.4.44.txz
        • Опять же, ваша версия может быть другой
      • Вы должны завершить установку необходимых пакетов.
      • Это может можно изменить метаданные для двоичного файла SSSD перед выполнением pkg create заменить зависимость от openldap-client с участием openldap-sasl-client для снятия надо делать это удалить / переустановить. У меня не было времени заняться этим.
        • Кроме того, есть подчиненные зависимости SSSD, которые также включают openldap-client, так что вам тоже придется это исправить.
      • Обратите внимание, что все эти примечания относятся к версиям этих пакетов, которые в настоящее время находятся в дереве портов. на момент написанияи связанные с ними зависимости. Все это может измениться, когда FreeBSD обновит дерево портов и двоичные файлы. Может быть, однажды у нас будет двоичная версия всего, что извлекает все правильные зависимости с правильными параметрами, настроенными для функциональности AD прямо из коробки.
    • Конфигурация Kerberos:

      • Пример файла /etc/krb5.conf:
[libdefaults]
   default_realm = MYDOMAIN.NET
   forwardable = true
# Normally all you need in an AD environment, since DNS SRV records
# will identify the AD/KRB servers/services.  Comment out if you
# want to manually point to your AD server
dns_lookup_kdc = true
[realms]
   MYDOMAIN.NET = {
# If you're manually pointing to a different AD server than what's in DNS
#      admin_server = adserver.mydomain.net
#      kdc = adserver.mydomain.net
   }
[domain_realm]
   mydomain.net = MYDOMAIN.NET
   .mydomain.net = MYDOMAIN.NET
  • (отступ)
    • Конфигурация SSSD:
      • В этом примере предполагается, что атрибуты POSIX в AD для пользователей и групп, как правило, требуются при замене существующей среды, в которой уже установлены UID и GID.
      • Пример файла /usr/local/etc/sssd/sssd.conf:
[sssd]
config_file_version = 2
domains = MYDOMAIN.NET
services = nss, pam, pac
fallback_homedir = /home/%u

[domain/MYDOMAIN.NET]
id_provider = ad
access_provider = ad
auth_provider = ad
chpass_provider = ad
# use AD POSIX attributes, comment out if you are using automatically generated
# UIDs and GIDs.
ldap_id_mapping = False
cache_credentials = true
ad_server = adserver.mydomain.net
# if you don't have bash, or whatever is in the AD account's loginShell
# attribute installed
override_shell = /bin/tcsh
  • (отступ)
    • Конфигурация PAM:
      • Конфигурация PAM во FreeBSD немного сложна из-за того, как работает OpenPAM. Я не буду вдаваться в подробности, но чтобы использовать pam_sss для SSSD и заставить его работать, а также работать с логинами passwd, вам нужно дважды поместить pam_unix в файл. Насколько я понимаю, это связано со вторичной проверкой, которая выполняется «за кулисами», для которой требуется пройти второй модуль pam_unix.
        • Вот список /etc/pam.d файлы, которые мне пришлось изменить, чтобы SSSD работал с FreeBSD:

/etc/pam.d/sshd:

#
# $FreeBSD: releng/11.0/etc/pam.d/sshd 197769 2009-10-05 09:28:54Z des $
#
# PAM configuration for the "sshd" service
#

# auth
auth     sufficient  pam_opie.so    no_warn no_fake_prompts
auth     requisite   pam_opieaccess.so no_warn allow_local
#auth    sufficient  pam_krb5.so    no_warn try_first_pass
#auth    sufficient  pam_ssh.so     no_warn try_first_pass
auth     sufficient  pam_unix.so    no_warn try_first_pass nullok
auth     sufficient  pam_sss.so     use_first_pass
auth     required pam_unix.so    no_warn use_first_pass

# account
account     required pam_nologin.so
#account required pam_krb5.so
account     required pam_login_access.so
account     required pam_unix.so
account     sufficient  pam_sss.so

# session
#session optional pam_ssh.so     want_agent
session     optional pam_sss.so
session         required   pam_mkhomedir.so  mode=0700
session     required pam_permit.so

# password
#password   sufficient  pam_krb5.so    no_warn try_first_pass
#password   sufficient  pam_unix.so    try_first_pass use_authtok nullok
password sufficient  pam_unix.so    try_first_pass use_authtok
password sufficient  pam_sss.so     use_authtok

/etc/pam.d/system:

#
# $FreeBSD: releng/11.0/etc/pam.d/system 197769 2009-10-05 09:28:54Z des $
#
# System-wide defaults
#

# auth
auth     sufficient  pam_opie.so    no_warn no_fake_prompts
auth     requisite   pam_opieaccess.so no_warn allow_local
#auth    sufficient  pam_krb5.so    no_warn try_first_pass
#auth    sufficient  pam_ssh.so     no_warn try_first_pass
#auth    required pam_unix.so    no_warn try_first_pass nullok
auth     sufficient  pam_unix.so    no_warn try_first_pass
auth     sufficient  pam_sss.so     use_first_pass
auth     required pam_deny.so

# account
#account required pam_krb5.so
account     required pam_login_access.so
account     required pam_unix.so
account     sufficient  pam_sss.so

# session
#session optional pam_ssh.so     want_agent
session     required pam_lastlog.so    no_fail
session     optional pam_sss.so
session         required   pam_mkhomedir.so  mode=0700

# password
#password   sufficient  pam_krb5.so    no_warn try_first_pass
#password   required pam_unix.so    no_warn try_first_pass
password sufficient  pam_unix.so    no_warn try_first_pass nullok use_authtok
password sufficient  pam_sss.so     use_authtok
#password   required pam_deny.so

/etc/pam.d/su:

#
# $FreeBSD: releng/11.0/etc/pam.d/su 219663 2011-03-15 10:13:35Z des $
#
# PAM configuration for the "su" service
#

# auth
auth     sufficient  pam_rootok.so     no_warn
auth     sufficient  pam_self.so    no_warn
auth     requisite   pam_group.so      no_warn group=wheel root_only fail_safe ruser
auth     include     system.dist

# account
account     include     system.dist

# session
session     required pam_permit.so
  • (отступ)

    • Ноты:
      • system.dist это копия акции /etc/pam.d/system файл. Он включен в /etc/pam.d/su файл выше, чтобы предотвратить проблемы с командой su.
      • Еще можно su в учетные записи AD как root, так как однажды root, su не требует аутентификации, а информация об учетной записи передается через переключатель службы имен через SSSD.
      • Если вы действительно хотите переключиться с одного пользователя (не root) на другого пользователя, следует использовать sudo только по соображениям безопасности
      • Вы также можете использовать ksu и это работает для переключения с пользователя A на пользователя B
        • Хеймдаля ksu/usr/bin) не имеет SUID по умолчанию
          • Сделать Хеймдал ksu работай, chmod u+s /usr/bin/ksu
        • MIT Kerberos (krb5 пакет установлен в /usr/local/bin) - SUID при установке
      • Поскольку Heimdal является частью базового пакета, у вас будут оба набора двоичных файлов Kerberos.
        • Вы можете изменить пути по умолчанию, чтобы /usr/local/bin раньше /usr/bin, и т.д
      • ksu запросит у пользователя пароль AD / Kerberos целевого пользователя
      • passwd не будет работать, чтобы изменить ваш пароль AD / Kerberos, даже если вы добавите pam_sss.so в PAM-файл passwd. В passwd двоичный файл поддерживает только локальное использование и использование NIS kpasswd для изменения пароля на серверах AD / Kerberos.
    • Переключатель службы имен:

      • В /etc/nsswitch.conf файл должен быть настроен для использования службы sss для passwd и групп. Пример:
        • group: files sss
        • passwd: files sss
    • Присоединение к домену:

      • В * nixs есть два основных инструмента для присоединения к вашему Linux-серверу
        • adcli
          • Это мой любимый инструмент. Он работает очень хорошо, и все можно сделать в одной командной строке. Учетные данные могут быть предоставлены не интерактивно (через стандартный ввод и т. Д.)
          • Не требует выполнения kinit перед использованием он сделает это за вас на основе предоставленных кредитов.
            • Пример:
              • adcli join -D mydomain.net -U Administrator--show-details –v
              • adcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
                • Эта форма рекомендуется, поскольку утилита не всегда правильно определяет полное доменное имя. Когда вы предоставляете полное доменное имя, которое соответствует как прямому, так и обратному DNS для узла, принципы создаются правильно. Если утилита использует неправильное имя хоста (например, не включая домен DNS), некоторые субъекты службы не будут созданы, и такие вещи, как SSH в хосте, могут выйти из строя.
        • Самба net утилита
          • В net Утилита входит в состав Samba Suite.
          • Эта утилита требует, чтобы данные домена были настроены в smb.conf файл конфигурации, что делает его более сложным и неудобным в использовании, особенно в неинтерактивном режиме.
          • Этот инструмент также требует, чтобы вы получили билет Kerberos перед его использованием с помощью kinit. Опять же, это более неудобно и затрудняет неинтерактивное использование в сценарии, поскольку вместо одного шага используется два.
    • Рекомендации по SSHD:

      • Заставить SSHD работать с AD и SSSD обычно довольно просто
      • Следующие параметры необходимо добавить в /etc/ssh/sshd_config
        • GSSAPIAuthentication yes
          • Включите аутентификацию GSS API для SSHD. Это приведет к авторизации SSHD в AD KDC.
        • PasswordAuthentication yes
          • Разрешить пользователям входить в систему с паролями. Требуется, если вы хотите, чтобы пользователь получал билет KRB5 при входе в систему. Без этого система не может расшифровать TGT, отправленный KDC.
        • ChallengeResponseAuthentication yes
          • Для FreeBSD этот метод работает лучше всего.
            • Убедитесь, что вы настроили PasswordAuthentication no при использовании этой опции.
            • Это единственный метод, который я нашел для FreeBSD, который позволяет изменить просроченный пароль при входе в систему. Если вы используете другой, он вызывает /bin/passwd, который не поддерживает ничего, кроме NIS и локального файла passwd.
        • GSSAPICleanupCredentials yes
          • (необязательно) Сделаем kdestroy при выходе
        • GSSAPIStrictAcceptorCheck no
          • (необязательно) Эта опция часто требуется, если SSHD не знает своего имени хоста, является многосетевым и т. д. или иным образом использует другой субъект службы для связи с KDC. Обычно SSHD использует принципала службы host/<FQDN>@REALM говорить с KDC, но иногда ошибается (например, если имя хоста не совпадает с DNS-именем SSH-сервера). Эта опция позволяет SSHD использовать любого участника в /etc/krb5.keytab файл, который включает соответствующий host/<FQDN>@REALM
      • В зависимости от комбинации параметров, которые вы используете, вам может потребоваться или может не потребоваться добавление принципалов хоста в KDC для адресов IPv4 и IPv6 вашего хоста для ssh -K <ip> работать без запроса пароля (конечно, при условии, что вы уже сделали "кинит").