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

Active Directory против доверия Active Directory

У нас есть 2 леса / домена: ad.local (не управляемый нами) и ad2.local (управляемый нами)

Мы устанавливаем между ними двустороннее доверие.

Теперь предположим, что у меня есть приложение на сервере, подключенном к ad2.local: app.ad2.local

Это приложение принимает LDAP или Kerberos (с apache)

Из того, что я прочитал, невозможно запросить доверенных пользователей через LDAP (поправьте меня, если я ошибаюсь), поэтому мы выбрали Kerberos.

Пока мне удалось войти в систему с пользователями из ad2.local, но не из ad.local.

Когда я пытаюсь войти в систему с пользователями из ad.local, я получаю следующие ошибки:

[Thu Mar 19 11:07:48.155074 2020] [authz_core:debug] [pid 20267] mod_authz_core.c(809): [client IP:33274] AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[Thu Mar 19 11:07:48.155213 2020] [authz_core:debug] [pid 20267] mod_authz_core.c(809): [client IP:33274] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[Thu Mar 19 11:07:48.155248 2020] [auth_kerb:debug] [pid 20267] src/mod_auth_kerb.c(1954): [client IP:33274] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Mar 19 11:07:55.188879 2020] [authz_core:debug] [pid 3421] mod_authz_core.c(809): [client IP:33346] AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[Thu Mar 19 11:07:55.188985 2020] [authz_core:debug] [pid 3421] mod_authz_core.c(809): [client IP:33346] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[Thu Mar 19 11:07:55.189019 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1954): [client IP:33346] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Mar 19 11:07:56.083017 2020] [authz_core:debug] [pid 3421] mod_authz_core.c(809): [client IP:33346] AH01626: authorization result of Require valid-user : denied (no authenticated user yet)
[Thu Mar 19 11:07:56.083102 2020] [authz_core:debug] [pid 3421] mod_authz_core.c(809): [client IP:33346] AH01626: authorization result of <RequireAny>: denied (no authenticated user yet)
[Thu Mar 19 11:07:56.083137 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1954): [client IP:33346] kerb_authenticate_user entered with user (NULL) and auth_type Kerberos
[Thu Mar 19 11:07:56.083286 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1295): [client IP:33346] Acquiring creds for HTTP@APP_FQDN
[Thu Mar 19 11:07:56.087966 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1708): [client IP:33346] Verifying client data using KRB5 GSS-API
[Thu Mar 19 11:07:56.088023 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1724): [client IP:33346] Client didn't delegate us their credential
[Thu Mar 19 11:07:56.088038 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1752): [client IP:33346] Warning: received token seems to be NTLM, which isn't supported by the Kerberos module. Check your IE configuration.
[Thu Mar 19 11:07:56.088053 2020] [auth_kerb:debug] [pid 3421] src/mod_auth_kerb.c(1155): [client IP:33346] GSS-API major_status:00010000, minor_status:00000000
[Thu Mar 19 11:07:56.088182 2020] [auth_kerb:error] [pid 3421] [client IP:33346] gss_accept_sec_context() failed: An unsupported mechanism was requested (, Unknown error)

Вот моя конфигурация apache:

<Location /application>
  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbMethodNegotiate On
  KrbMethodK5Passwd  On
  KrbSaveCredentials Off
  KrbAuthRealms AD.LOCAL AD2.LOCAL
  Krb5KeyTab /etc/kerberos.keytab
  KrbLocalUserMapping On
  require valid-user
</Location>

И etc / krb5.conf:

# Configuration snippets may be placed in this directory as well
includedir /etc/krb5.conf.d/

includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
 ticket_lifetime = 24h
 renew_lifetime = 7d
 forwardable = true
 rdns = false
 pkinit_anchors = /etc/pki/tls/certs/ca-bundle.crt
# default_realm = EXAMPLE.COM
 default_ccache_name = KEYRING:persistent:%{uid}

 default_realm = AD2.LOCAL
[realms]
# EXAMPLE.COM = {
#  kdc = kerberos.example.com
#  admin_server = kerberos.example.com
# }

 AD2.LOCAL = {
  kdc = dc.AD2.LOCAL
#  auth_to_local = RULE:[1:$1@$0](^.*@AD.LOCAL$)s/@AD.LOCAL/@ad.local/
#  auth_to_local = DEFAULT
 }

 AD.LOCAL = {
  kdc = master.ad.local
}

[domain_realm]
# .example.com = EXAMPLE.COM
# example.com = EXAMPLE.COM
 ad2.local = AD2.LOCAL
 .ad2.local = AD2.LOCAL
 ad.local  = AD.LOCAL
 .ad.local = AD.LOCAL

Кто-нибудь знает, в чем может быть проблема?

Проблема в одном из двух. Либо клиент лаборатории не смог разрешить DC в ad.local с введенными вами кредитами, поэтому он вернулся к NTLM. Он смог разрешить DC в ad2.local так что он смог сделать Kerberos. Или просьба к ad.local не располагал достаточной информацией, чтобы направить вас в другой домен.

На неподключенном клиенте Windows Windows попытается разрешить домены, просмотрев введенные вами учетные данные и используя часть области в качестве подсказки. Если вы введете user@ad.local он попытается найти контроллер домена с использованием DNS SRV _kerberos._tcp.ad.local. Если вы введете ad\user, у клиента (вероятно) недостаточно информации для создания успешного DNS-запроса, поэтому он возвращается к NTLM.

Предполагая, что это удалось, и вы смогли решить ad.local правильно, этот DC теперь должен знать, для какого приложения он должен выпустить билет. Windows будет использовать запрошенное имя хоста и отправит его на ad.local. Если введенное имя хоста app, контроллер домена не найдет никаких записей и не вернет ошибку «служба не найдена» (что заставляет клиента возвращаться к NTLM). Если введенное имя app.ad2.local тогда DC должен распознать .ad2.local суффикс (потому что он настроен на доверии) и начать переход к ad2.local который затем выдаст вам билет на app.ad2.local.

Использование полностью определенных имен должно помочь. Если это не сработает, включите forest search order на ad.local домен также может помочь.

В противном случае я рекомендую выполнить трассировку сети (Wireshark) на клиентском компьютере и наблюдать за трафиком, когда он пытается связаться с контроллерами домена.