Каковы необходимые шаги для аутентификации пользователей из Active Directory, работающей на Windows Server 2012 R2 во FreeBSD 10.0, sssdс использованием серверной части AD с работающим Kerberos TGT?
Каковы необходимые шаги для аутентификации пользователей из Active Directory, работающей на Windows Server 2012 R2 во FreeBSD 10.0, sssdс использованием серверной части AD с работающим Kerberos TGT?
Ответы:
Есть несколько хитрых соображений, чтобы все работало «из коробки». В sssdданный момент FreeBSD поддерживает только версию 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
Затем присоединитесь к домену и создайте таблицу ключей.
$ 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 отличается от имени домена -ie в моем случае, имя домена - 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
Это перекомпилирует samba со всей необходимой поддержкой (gssapi, ldap, kerberos), а затем отредактируйте nsswitch.conf следующим образом
passwd: files winbind
group: files winbind
Привет,
Это небольшое обновление по использованию 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
Установка (и забавные вопросы упаковки и зависимости)
/usr/bin, а другой - /usr/local/bin. Поскольку кажется, что ни один из базовых системных файлов не находится в пакете, вы не можете просто удалить содержимое Heimdal KRB. Что-то, о чем нужно знать.Прямые зависимости различных пакетов (интересные deps жирным шрифтом, конфликтующие deps жирным курсивом):
net-mgmt/adcli:net/openldap24-sasl-clientsecurity/cyrus-sasl2-gssapi: security/cyrus-sasl2net/openldap24-sasl-client: security/cyrus-sasl2security/sssd: security/nsssecurity/sssd:security/krb5security/sssd: security/cyrus-sasl2security/sssd:net/openldap24-clientsecurity/sssd: lang/python27security/sssd: lang/python2security/sssd: dns/c-aressecurity/sssd: devel/teventsecurity/sssd: devel/tallocsecurity/sssd: devel/poptsecurity/sssd: devel/pcresecurity/sssd: devel/libunistringsecurity/sssd: devel/libinotifysecurity/sssd: devel/gettext-runtimesecurity/sssd: devel/ding-libssecurity/sssd: devel/dbussecurity/sssd: databases/tdbsecurity/sssd: databases/ldbОбратные зависимости различных пакетов:
net/openldap24-sasl-client: sysutils/msktutilnet/openldap24-sasl-client: net/nss-pam-ldapd-saslnet/openldap24-sasl-client: net-mgmt/adcli
sssd, MIT требует Kerberos, хотя в качестве базового пакета у нас есть Heimdaladcliхочет openldap-sasl-client, но другие пакеты (включая подчиненные зависимости sssd) openldap-clientизвлекаются, что является мьютексом с клиентом sasl (по какой-то глупой причине). Это затрудняет установку даже при минимальном наборе бинарных пакетов.На момент написания статьи бинарный пакет pkg для SSSD для FreeBSD не включал поддержку AD в SSSD.
SMBadcliсуществует, но на момент написания статьи не работает.
GSSAPI_MITcyrus-sasl-gssapi требуется, но двоичная версия pkg не работает и имеет странные проблемы с зависимостями, которые приводят к удалению SSSD.
GSSAPI_MITopenldap-sasl-client требуется для функциональности, но SSSD хочет использовать версию openldap, отличную от SASL.
openldap-sasl-clientс GSSAPIпараметром selected ( 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
# Обычно все, что вам нужно в среде AD, так как записи DNS SRV
# идентифицирует серверы / сервисы AD / KRB. Прокомментируйте, если вы
# хотите вручную указать на свой сервер AD
dns_lookup_kdc = true
[] сферы
MYDOMAIN.NET = {
# Если вы вручную указываете на другой сервер AD, чем в 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 домены = MYDOMAIN.NET services = nss, pam, pac fallback_homedir = / home /% u [Домен / MYDOMAIN.NET] id_provider = ad access_provider = объявление auth_provider = ad chpass_provider = ad # использовать атрибуты AD POSIX, комментировать, если вы используете автоматически сгенерированный # UID и GID. ldap_id_mapping = False cache_credentials = true ad_server = adserver.mydomain.net # если у вас нет bash или чего-либо еще в loginShell учетной записи AD # атрибут установлен 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 для службы "sshd" # # auth достаточно аутентичный pam_opie.so no_warn no_fake_prompts требуется авторизация pam_opieaccess.so no_warn allow_local #auth достаточно pam_krb5.so no_warn try_first_pass #auth достаточно pam_ssh.so no_warn try_first_pass достаточно аутентичный pam_unix.so no_warn try_first_pass nullok достаточно аутентичный pam_sss.so use_first_pass требуется авторизация pam_unix.so no_warn use_first_pass # Счет требуется учетная запись pam_nologin.so #account required pam_krb5.so требуется учетная запись pam_login_access.so требуется учетная запись pam_unix.so достаточно аккаунта pam_sss.so # сессия #session необязательный pam_ssh.so want_agent сеанс необязательный pam_sss.so требуется сеанс pam_mkhomedir.so mode = 0700 требуется сеанс pam_permit.so # пароль #password достаточный pam_krb5.so no_warn try_first_pass #password достаточный pam_unix.so try_first_pass use_authtok nullok достаточно пароля pam_unix.so try_first_pass use_authtok достаточно пароля 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 $ # # Общесистемные значения по умолчанию # # auth достаточно аутентичный pam_opie.so no_warn no_fake_prompts требуется авторизация pam_opieaccess.so no_warn allow_local #auth достаточно pam_krb5.so no_warn try_first_pass #auth достаточно pam_ssh.so no_warn try_first_pass #auth требуется pam_unix.so no_warn try_first_pass nullok достаточно аутентичный pam_unix.so no_warn try_first_pass достаточно аутентичный pam_sss.so use_first_pass требуется авторизация pam_deny.so # Счет #account required pam_krb5.so требуется учетная запись pam_login_access.so требуется учетная запись pam_unix.so достаточно аккаунта pam_sss.so # сессия #session необязательный pam_ssh.so want_agent требуется сеанс pam_lastlog.so no_fail сеанс необязательный pam_sss.so требуется сеанс pam_mkhomedir.so mode = 0700 # пароль #password достаточный pam_krb5.so no_warn try_first_pass #password требуется pam_unix.so no_warn try_first_pass достаточно пароля pam_unix.so no_warn try_first_pass nullok use_authtok достаточно пароля pam_sss.so use_authtok #password требуется pam_deny.so
/etc/pam.d/su:
# # $ FreeBSD: releng / 11.0 / etc / pam.d / su 219663 2011-03-15 10: 13: 35Z des $ # # Настройка PAM для службы su # # auth достаточно аутентичный pam_rootok.so no_warn достаточно аутентичный pam_self.so no_warn требуется авторизация pam_group.so no_warn group = колесо root_only fail_safe ruser auth include system.dist # Счет Аккаунт включает system.dist # сессия требуется сеанс 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/ksukrb5пакет установлен в /usr/local/bin) является SUID при установке/usr/local/binкак раньше /usr/bin, и т. Д.ksu запросит у пользователя пароль AD / Kerberos целевого пользователяpasswdне удастся изменить пароль AD / Kerberos, даже если вы добавите pam_sss.soPAM-файл passwd. passwdДвоичная поддерживает только локальную и NIS Использование kpasswdизменить пароль на AD / сервер Kerberos (s).Переключатель службы имен:
/etc/nsswitch.confФайл должен быть настроен на использование SSS сервиса для паролей и групп. Пример:
group: files ssspasswd: files sssПрисоединение к домену:
adcli
kinitперед использованием, он делает это для вас на основе предоставленных кредитов.
adcli join -D mydomain.net -U Administrator--show-details –vadcli join –H adclient.mydomain.net -D mydomain.net -U Administrator --show-details -v
netутилита
netУтилита является частью пакета Samba.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>@REALMssh -K <ip>работали без запроса пароля (при условии, что вы уже выполнили «kinit», конечно).