Каковы необходимые шаги для аутентификации пользователей из 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.
Создайте файл /etc/krb5.conf
со следующим содержанием:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = yes
Установите 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
Установите необходимые пакеты:
$ 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
Отредактируйте файл /etc/nsswitch.conf
чтобы соответствовать этим настройкам:
group: files sss
passwd: files sss
Установите дополнительные пакеты для создания домашнего каталога:
$ 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
$ pkg remove -f openldap-client
$ pkg install openldap-sasl-client
$ 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
Установка (и интересная упаковка и проблемы с зависимостями)
/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.
SMB
adcli
существует, но на момент написания этой статьи не работает. GSSAPI_MIT
cyrus-sasl-gssapi
требуется, но двоичная версия pkg не работает и имеет странные проблемы с зависимостями, которые заставляют ее удалять SSSD. GSSAPI_MIT
openldap-sasl-client
требуется для функциональности, но SSSD хочет использовать версию openldap, отличную от SASL. openldap-sasl-client
с GSSAPI
выбран вариант (make config
) в портах. pkg remove –f openldap-client
openldap-client
без автоматического удаления каких-либо других пакетов (например, SSSD) и разрешить установку версии SASLopenldap-sasl-client
pkg remove –f sssd
(Необязательно) Когда все будет работать и проверено, вы можете использовать pkg create
для создания двоичных пакетов из четырех пакетов с соответствующими включенными опциями и использования их вместо того, чтобы встраивать их в порты в каждой системе. Установка двоичного файла выполняется аналогично процессу сборки портов:
pkg install sssd-1.11.7_8.txz
pkg add
остальные пакеты (не устанавливать, добавлять), сохраняя пакет openldap напоследок.openldap-sasl-client
сделать pkg remove –f openldap-client
pkg add openldap-sasl-client-2.4.44.txz
pkg create
заменить зависимость от openldap-client
с участием openldap-sasl-client
для снятия надо делать это удалить / переустановить. У меня не было времени заняться этим. openldap-client
, так что вам тоже придется это исправить.Конфигурация Kerberos:
[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] 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
/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.sudo
только по соображениям безопасностиksu
и это работает для переключения с пользователя A на пользователя B ksu
(в /usr/bin
) не имеет SUID по умолчанию ksu
работай, chmod u+s /usr/bin/ksu
krb5
пакет установлен в /usr/local/bin
) - SUID при установке/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
Присоединение к домену:
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
net
утилита net
Утилита входит в состав Samba Suite.smb.conf
файл конфигурации, что делает его более сложным и неудобным в использовании, особенно в неинтерактивном режиме.kinit
. Опять же, это более неудобно и затрудняет неинтерактивное использование в сценарии, поскольку вместо одного шага используется два. Рекомендации по SSHD:
/etc/ssh/sshd_config
GSSAPIAuthentication yes
PasswordAuthentication yes
ChallengeResponseAuthentication yes
PasswordAuthentication no
при использовании этой опции./bin/passwd
, который не поддерживает ничего, кроме NIS и локального файла passwd.GSSAPICleanupCredentials yes
kdestroy
при выходеGSSAPIStrictAcceptorCheck no
host/<FQDN>@REALM
говорить с KDC, но иногда ошибается (например, если имя хоста не совпадает с DNS-именем SSH-сервера). Эта опция позволяет SSHD использовать любого участника в /etc/krb5.keytab
файл, который включает соответствующий host/<FQDN>@REALM
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