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

Я думаю, что Вы на ложном пути здесь, сложение байтов в интерфейсах не будет эффективным способом знать, загрузил ли пользователь конкретный файл. Даже если Вы заставите это работать, то Вам будет всегда препятствовать то, что это - хрупкий взлом.

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

9
задан 28 May 2014 в 22:22
5 ответов

Чтобы все работало из коробки, нужно учесть некоторые хитрости. 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>
14
ответ дан 2 December 2019 в 22:25

Здравствуйте,

Это небольшое обновление по использованию 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
0
ответ дан 2 December 2019 в 22:25

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

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

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

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

Мы будем благодарны за любую дополнительную информацию!

2
ответ дан 2 December 2019 в 22:25

Перекомпиляция 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

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

passwd: files winbind
group: files winbind
1
ответ дан 2 December 2019 в 22:25

Вот мое руководство по интеграции 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 . Поскольку ни одна из базовых системные файлы, кажется, находятся в пакете, вы не можете просто удалить Хеймдаль 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
      • безопасность / sssd: databases / ldb
    • Обратные зависимости различных пакетов:

      • net / openldap24-sasl-client: sysutils / msktutil
      • net / openldap24-sasl-clie nt: 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 ) в портах.
        • Выполните make in порты для его сборки
        • Перед make install выполните команду pkg remove –f openldap-client
          • Это удалит openldap-client без автоматического удаления любые другие пакеты (например, SSSD) и разрешить установку версии SASL
        • Выполните make install для openldap-sasl-client
          • . Это установит его в систему.
    • Это предоставит все необходимое для функциональный SSSD с возможностями AD.
    • Обратите внимание, что если вы компилируете SSSD из портов, он будет извлекать МНОГО зависимостей, что приведет к их сборке и потребует выбора параметров конфигурации.
      • Рекомендуется сначала установить двоичный пакет с помощью pkg install sssd, а затем удалить его с помощью pkg remove –f sssd
        • . Это приведет к появлению двоичных пакетов для большинства вещей, которые необходимо вставить SSSD, и устраните необходимость сборки всего этого в зависимости от портов, что займет некоторое время.
      • После удаления переустановите SSSD из портов с включенными вышеупомянутыми параметрами, и вам нужно будет только перестроить четыре упомянутых выше пакета, чтобы получить рабочий setup.
    • (Необязательно) После того, как все работает и проверено, вы можете использовать pkg create для создания двоичных пакетов из четырех пакетов с соответствующими включенными параметрами и использовать их вместо того, чтобы создавать их в портах на каждом система. Установка двоичного файла выполняется аналогично процессу сборки портов:

      • pkg install sssd-1.11.7_8.txz
        • Ваша версия, конечно, может отличаться.
        • Это установит двоичный пакет для SSSD и загрузит все это необходимо из репозитория FreeBSD.
      • pkg добавить другие пакеты (не устанавливать, добавлять), сохраняя пакет 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 и заставить его работать, а также работать с паролями для входа в систему, вам нужно дважды поместить 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
  • (indent)

    • Примечания:
      • 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, установленного по умолчанию.
          • Чтобы Heimdal 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 Администратор - show-details –v
              • adcli join –H adclient.mydomain.net -D mydomain.net -U Администратор --show-details -v
                • Эта форма рекомендуется, поскольку утилита не всегда правильно определяет полное доменное имя. Когда вы предоставляете полное доменное имя, которое соответствует как прямому, так и обратному DNS для узла, принципы создаются правильно. Если утилита использует неправильное имя хоста (например, не включая домен DNS), некоторые субъекты служб не будут созданы, и такие вещи, как SSH на хосте, могут выйти из строя.
        • Утилита Samba net
          • Утилита net является частью пакета Samba.
          • Эта утилита требует, чтобы сведения о домене были установлены в файле конфигурации smb.conf , что делает ее более удобной. сложен и неудобен в использовании, особенно в неинтерактивном режиме.
          • Этот инструмент также требует, чтобы вы получили билет Kerberos перед его использованием с помощью kinit . Опять же, это более неудобно и затрудняет неинтерактивное использование в сценарии, поскольку вместо одного шага используется два.
    • Рекомендации по SSHD:

      • Заставить SSHD работать с AD и SSSD обычно довольно просто
      • Следующие параметры необходимо добавить в / etc / ssh / sshd_config
        • GSSAPIAuthentication yes
          • Turn на аутентификации 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 нет
          • (необязательно) Эта опция часто требуется, если SSHD не понимает своего имени хоста, является многосетевым и т. Д. Или иным образом использует другой принципал службы для связи с KDC. Обычно SSHD будет использовать принципала службы host / @REALM для связи с KDC, но иногда ошибается (например, если имя хоста не совпадает с DNS-именем SSH-сервера) . Эта опция позволяет SSHD использовать любой принципал в файле /etc/krb5.keytab , который включает правильный host / @REALM
      • В зависимости от комбинации используемых вами опций, вам может потребоваться добавить принципалов хоста в KDC для адресов IPv4 и IPv6 вашего хоста, чтобы ssh -K работал без запроса пароля (при условии, что вы выполнили kinit 'уже, конечно).
0
ответ дан 2 December 2019 в 22:25

Теги

Похожие вопросы