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

Как интегрировать Active Directory с FreeBSD 10.0 с помощью security / sssd?

Каковы необходимые шаги для аутентификации пользователей из Active Directory под управлением Windows Server 2012 R2 в FreeBSD 10.0 с использованием sssd с бэкэндом AD с Kerberos TGT работает?

Есть несколько хитрых моментов, чтобы все работало из коробки. FreeBSD поддерживает только sssd версия 1.9.6 на данный момент. Таким образом, имена участников предприятия не поддерживаются.

Если у вас есть домен с несовпадающими именами UPN, он не сможет войти в систему, поскольку проверка подлинности Kerberos завершится неудачно, даже если FreeBSD поддерживает имена участников предприятия с помощью Kerberos, sssd не могу справиться с этим делом.

Итак, в актуальной версии sssd у вас есть ограничение на использование основного имени пользователя в одном и том же доменном имени, например:

Domain Name = example.com
NetBIOS Name = EXAMPLE
User Principal Name:
username@example.com sAMAccountName: username

Зная это, мы можем описать шаги для успешной аутентификации пользователей из AD во FreeBSD.

1. Настройте Kerberos.

Создайте файл /etc/krb5.conf со следующим содержанием:

[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = true
    dns_lookup_kdc = true
    ticket_lifetime = 24h
    renew_lifetime = 7d
    forwardable = yes

2. Установите Samba 4.1 и настройте ее для присоединения к домену.

Установите Samba 4.1:

$ pkg install samba41

Создайте файл /usr/local/etc/smb4.conf со следующим содержанием:

[global]
    security = ads
    realm = EXAMPLE.COM
    workgroup = EXAMPLE

    kerberos method = secrets and keytab

    client signing = yes
    client use spnego = yes
    log file = /var/log/samba/%m.log

Запросите билет администратора Kerberos:

$ kinit Administrator

Затем присоединитесь к домену и создайте keytab

$ net ads join createupn=host/server-hostname.example.com@EXAMPLE.COM -k
$ net ads keytab create -k

3. Установите пакет sssd и Cyrus SASL с поддержкой Kerberos.

Установите необходимые пакеты:

$ pkg install sssd cyrus-sasl-gssapi

Отредактируйте файл /usr/local/etc/sssd/sssd.conf чтобы соответствовать этим настройкам:

[sssd]
    config_file_version = 2
    services = nss, pam
    domains = example.com

[nss]

[pam]

[domain/example.com]
    # Uncomment if you need offline logins
    #cache_credentials = true

    id_provider = ad
    auth_provider = ad
    access_provider = ad
    chpass_provider = ad

    # Comment out if the users have the shell and home dir set on the AD side
    default_shell = /bin/tcsh
    fallback_homedir = /home/%u

    # Uncomment and adjust if the default principal SHORTNAME$@REALM is not available
    #ldap_sasl_mech = GSSAPI
    #ldap_sasl_authid = SERVER-HOSTNAME$@EXAMPLE.COM

4. Добавьте поддержку sssd в nsswitch.conf

Отредактируйте файл /etc/nsswitch.conf чтобы соответствовать этим настройкам:

group: files sss
passwd: files sss

5. Настройте PAM, чтобы разрешить аутентификацию sssd и обрабатывать создание домашнего каталога.

Установите дополнительные пакеты для создания домашнего каталога:

$ pkg install pam_mkhomedir

Измените необходимые PAM области, соответствующие этим настройкам:

auth            sufficient      /usr/local/lib/pam_sss.so
account         required        /usr/local/lib/pam_sss.so        ignore_unknown_user
session         required        /usr/local/lib/pam_mkhomedir.so  mode=0700
session         optional        /usr/local/lib/pam_sss.so
password        sufficient      /usr/local/lib/pam_sss.so        use_authtok

6. Переключитесь на клиент OpenLDAP с поддержкой SASL.

$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client

7. Наконец, убедитесь, что все работает.

$ getent passwd <username>

Какой Kerberos вы здесь используете? Встроенный или security / krb5 от MIT?

При установке sssd требуется установить security / krb5, что на данный момент все еще считается экспериментальным во FreeBSD. Таким образом этот вопрос.

Мне не повезло с получением пользователей / групп AD при выполнении команд getent. это может быть связано с тем, что имя NETBIOS отличается от имени домена, т.е. в моем случае доменное имя - dawnsign.com, а имя NETBIOS - DSP.

Настроил только модуль входа в систему pam.d. Какие еще модули pam нужно отредактировать для успешной аутентификации?

Любая дополнительная информация будет принята с благодарностью!

Перекомпиляция samba4 из портов возможна с использованием аутентификации winbind, например linux, даже без sssd. Просто перекомпилируйте samba4 из портов после включения sasl ldap

    pkg remove samba41 
    pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb 
    pkg remove -f openldap-client 
    pkg install openldap-sasl-client 
    cd /usr/ports/security/sssd && make install

Это перекомпилирует самбу со всей необходимой поддержкой (gssapi, ldap, kerberos), а затем отредактируйте nsswitch.conf следующим образом

passwd: files winbind
group: files winbind

Вот мое руководство по интеграции 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> работать без запроса пароля (конечно, при условии, что вы уже выполнили «кинит»).

Привет

Это небольшое обновление по использованию sssd v1.11.7

Если вы используете id_provider = ad и видите следующую ошибку в файле журнала sssd:

/var/log/sssd/sssd_example.com.log
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0020): ldap_sasl_bind failed (-12)[Not Supported]
(Sun Oct  5 18:41:37 2014) [sssd[be[alidaho.com]]] [sasl_bind_send] (0x0080): Extended failure message: [unknown error]

Вы можете использовать следующую процедуру, чтобы решить эту проблему и обеспечить правильную работу интеграции AD. Теперь соберите sssd v1.11.7 с поддержкой Samba, требуется сборка src sssd, поэтому он связан с libsasl2

​pkg remove samba41
pkg install cyrus-sasl-gssapi samba36-libsmbclient pam_mkhomedir ldb
pkg remove -f openldap-client
pkg install openldap-sasl-client
cd /usr/ports/security/sssd && make install