Linux’te Windows Tarzı SSO — Domain’e Katılmaya Gerek Yok

Kerberos · SSO · Linux

Linux’te Windows Tarzı SSO — Domain’e Katılmaya Gerek Yok

Domain’e katılmak makineye bir bilgisayar hesabı kazandırır. Meğer bir kullanıcı bileti buna hiç ihtiyaç duymuyormuş.

Domain’e katılmış Windows makinen iç web uygulamalarına sessizce giriş yapar. Kerberos bileti, SPNEGO el sıkışması, bitti — hiçbir zaman bir giriş formu görmezsin. Soru şuydu: AD’nin hiç duymadığı bir Linux makinesi aynı numarayı yapabilir mi?

Yapabiliyor. Domain’e katılmak makine hesapları içindir. Bir kullanıcı biletinin ihtiyacı olan üç şey: bir Kerberos istemcisi, beş satır yapılandırma ve şifren. İşte tüm yolculuk — yüzüstü düştüğüm iki yer dahil.

Kurulum

shell
sudo apt install krb5-user

Sonra /etc/krb5.conf:

/etc/krb5.conf
[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_kdc = true
    dns_lookup_realm = true
    rdns = false

Bu kadar. Hiçbir KDC adresi sabit kodlanmadı — AD, domain denetleyicilerini DNS’te yayınlar ve istemci onları kendi başına bulur:

shell
dig +short SRV _kerberos._tcp.example.com
# 0 100 88 dc01.example.com.
# 0 100 88 dc02.example.com.

(Yalnızca dahili DNS. Genel çözümleyiciler hiçbir şey bilmez. VPN’deyken, Kerberos’u suçlamadan önce resolvectl status’a bak.)

Bonus AD gerçeği: her DC aynı anda hem KDC, hem parola sunucusu, hem de admin/LDAP uç noktasıdır. MIT-Kerberos’un kdc ile admin_server arasında yaptığı ayrım mı? Ortadan kalkıyor. Her DC her şeyi yapar.

Bir bilet almak — ve yüzüstü düşüş #1

İlk deneme:

shell
kinit myuser@example.com

Sonuç: boş bir satır. Ne istem, ne hata, hiçbir şey. Bana bakan bir imleç, o kadar. Enter’a basmak başka bir boş satır üretti. Harika yazılım.

Sorun: @’dan sonraki her şey bir Kerberos realm’idir, ve realm’ler BÜYÜK HARFLE yazılır. example.com domain gibi görünüyor — hatta e-postam gibi bile — ama Kerberos için bu bilinmeyen bir realm, ve bunu söylemek yerine sadece… somurttu.

Çözüm neredeyse hakaret derecesinde basit:

shell
kinit myuser
Password:

Realm’i tamamen atla, krb5.conf’taki default_realm devreye girsin. Aniden gerçek, görünür bir Password: istemi belirir — doğru realm’le konuştuğunu böyle anlarsın. Şifreyi yaz (girdi gizli, sudo tarzı), Enter’a bas, ve:

shell
klist
# Default principal: myuser@EXAMPLE.COM
# krbtgt/EXAMPLE.COM@EXAMPLE.COM   valid ~10h

Bir krbtgt girdisi, bir TGT’ye sahip olduğun anlamına gelir. Artık, kriptografik olarak konuşursak, domain’e giriş yapmış durumdasın.

kinit tekrar yaramazlık ederse, işte tam olarak ne yaptığını gösteren şey — DNS aramaları, hangi DC’ye bağlandığı, nerede öldüğü:

shell
KRB5_TRACE=/dev/stdout kinit myuser

Yüzüstü düşüş #2: “Unable to locate package nc”

88 portunun erişilebilir olup olmadığını kontrol etmek istedim. apt install nc — böyle bir paket yok. Debian/Ubuntu’da adı netcat-openbsd. Ya da kurulumu tamamen atla, bash’in ağ desteği zaten dahili:

shell
timeout 3 bash -c 'cat < /dev/null > /dev/tcp/dc01.example.com/88' && echo OPEN || echo CLOSED

Tarayıcıya öğretmek

Windows tarayıcıları otomatik olarak müzakere eder çünkü intranet bölgesine güvenirler. Linux tarayıcıları, aksi söylenmedikçe kimseye güvenmez:

Firefoxabout:confignetwork.negotiate-auth.trusted-uris.example.com

Chrome/Chromium/etc/opt/chrome/policies/managed/kerberos.json:

/etc/opt/chrome/policies/managed/kerberos.json
{ "AuthServerAllowlist": "*.example.com" }

curl — çünkü tabii ki curl da yapabilir:

shell
curl --negotiate -u : https://internal-app.example.com/

Dahili bir siteyi aç. Seni içeri alıyor. Sessizce. Domain’de olmayan bir makinede.

Son derece tatmin edici.

Küçük puntolar

  • Saatler: Kerberos ~5 dakikalık sapmaya izin verir. NTP’yi çalışır tut, yoksa hiçbir şey işlemez ve hatalar sana nedenini söylemez.
  • FQDN kullan: sunucu adı, servisin SPN’siyle eşleşmeli. IP’ler ve rastgele takma adlar NTLM’e düşer ya da başarısız olur.
  • Biletler süresi dolar (~10sa). Her gün yeniden kinit yap, ya da k5start, bir keytab, ya da sssd + KCM ile otomatikleştir.
ÖZET

BÜYÜK HARFLİ bir realm içeren krb5.confkinit myuser → tarayıcı izin listesi. Üç adım, sıfır domain katılımı, ve Windows’un arkandan bütün bu süre boyunca yaptığı aynı sessiz bilet dansı.

Ve eğer kinit sana Password: yerine boş bir satırla merhaba derse — realm’ini kontrol et. Ya BÜYÜK HARF ya da hiç.

Yorumlar (0)

Henüz yorum yok. İlk yorumu sen yap!

Yorum Yaz