Soru Kerberos SSH ile nasıl çalışır?


Sanırım dört bilgisayarım var, Laptop, Server1, Server2, Kerberos server:

  • Kullanıcı adımı / şifremi veren L'den S1'e PuTTY veya SSH kullanarak giriş yapıyorum.
  • S1'den sonra SSH'den S2'ye. Kerberos'un beni doğruladığı için şifre gerekmez

Tüm önemli SSH ve KRB5 protokol değişimlerini tanımlayın: "L, kullanıcı adını S1'e gönderir", "K, S1'e gönderir" vb.

(Bu soru topluluğa yöneliktir, lütfen geliştirin uzman olmayan okuyucu için.)


20
2017-11-10 19:34


Menşei




Cevaplar:


İlk giriş:

  • L, S1'e kullanıcı adı ve SSH kimlik doğrulama isteği gönderir
  • S1, kullanılabilir SSH kimlik doğrulama mekanizmalarını, bunlardan biri olan "parola" ile döndürür
  • L "parola" yı alır ve S1'e düz şifreyi gönderir
  • S1 PAM yığına kullanıcı adı ve şifre verir.
  • S1'de PAM (genellikle pam_krb5 veya pam_sss) Kerberos KDC'den bir TGT (bilet veren bilet) talep eder.
    1. S1 bir TGT alır.
      • Eski stil (preauth olmadan): S1 bir AS-REQ gönderir ve TGT'yi içeren bir AS-REP alır.
      • Yeni stil (preauth ile): S1, geçerli zaman damgasını şifrelemek için parolanızı kullanır ve AS-REQ'ya ekler. Sunucu zaman damgasını çözer ve izin verilen sürenin içinde olduğunu doğrular; şifre çözme başarısız olursa, şifre hemen reddedilir. Aksi halde, AS-REP'de bir TGT iade edilir.
    2. S1, parolanızdan oluşturulan bir anahtar kullanarak TGT'nin şifresini çözmeyi dener. Şifre çözme başarılı olursa, şifre doğru olarak kabul edilir.
    3. TGT yeni oluşturulmuş bir kimlik bilgisi önbelleğine depolanır. ( $KRB5CCNAME ccache'yi bulmak için ortam değişkeni veya klist içeriğini listelemek için.)
  • S1 yetki kontrollerini (konfigürasyona bağlı) gerçekleştirmek için PAM kullanır ve oturumu açar.
    • Eğer pam_krb5 yetkilendirme aşamasında çağrılır, bu olup olmadığını kontrol eder ~/.k5login bulunmaktadır. Varsa, istemci Kerberos ilkesini listelemelidir. Aksi halde, izin verilen tek yetkili Kullanıcı adı@DEFAULT-REALM.

İkinci giriş:

  • S1, S2'ye kullanıcı adı ve SSH yetki isteği gönderir
  • S2, "gssapi-with-mic" olmak üzere mevcut auth mechs'i döndürür 1
  • S1 bir bilet talep ediyor host/s2.example.com@EXAMPLE.COMTGC ile TGC'ye bir TGS-REQ göndererek ve hizmet biletinden TGS-REP almak suretiyle.
  • S1 bir "AP-REQ" (kimlik doğrulama talebi) üretir ve S2'ye gönderir.
  • S2 isteği çözmeyi dener. Başarılı olursa, kimlik doğrulama yapılır. (Kimlik doğrulaması için PAM kullanılmaz.)
    • LDAP gibi diğer protokoller, daha fazla veri iletimini, talebe dahil edilen bir "oturum anahtarı" ile şifrelemeyi seçebilir; ancak SSH, kendi şifreleme katmanını zaten görüştü.
  • Kimlik doğrulaması başarılı olursa, S2 yetkilendirme denetimlerini gerçekleştirmek için PAM kullanır ve S1 ile aynı olan oturumu açar.
  • Kimlik bilgisi iletme etkinleştirildiyse ve TGT "zorunlu" bayrağa sahipse, S1 kullanıcının TGT'sinin bir kopyasını ("iletilen" bayrak kümesiyle) talep eder ve yeni bir ccache'ye depolandığı S2'ye gönderir. Bu, özyinelemeli Kerberos kimlikli girişlere izin verir.

TGT'leri yerel olarak da alabileceğinizi unutmayın. Linux'ta bunu kullanarak yapabilirsiniz kinitdaha sonra kullanarak bağlanın ssh -K. Windows için, Windows AD etki alanında oturum açtıysanız, Windows bunu sizin için yapar; aksi takdirde, MIT Kerberos kullanılabilir. PuTTY 0.61, Windows (SSPI) ve MIT (GSSAPI) kullanımını destekler, ancak yönlendirmeyi (yetki devri) manuel olarak etkinleştirmeniz gerekir.


1  gssapi-keyex ayrıca mümkündür, ancak resmi OpenSSH'ye kabul edilmemiştir.


25
2017-11-10 20:43



Şifre, TGT ve KDC'nin cevabı arasındaki ilişkiyi detaylandırır mısınız? Net değil Nasıl PAM, şifrenin doğru olup olmadığına karar verir. - Phil
NOT: Bu cümle yanlıştır: "S1 bir TGS-REQ gönderir ve TGT'yi içeren bir TGS-REP alır." Hatalı çünkü TGT'ler AS_REP'in bir parçası olarak geliyor. Bir Servis Bileti TGS_REPn ile geri dönecek - jouell
OpenSSH'nin son sürümlerinde anahtar değişimi var. 4.2p1'in yamalara sahip ilk versiyonu olduğunu düşünüyorum. (sxw.org.uk/computing/patches/openssh.html) - quinnr
Hayır yoklar. Onlar üçüncü parti yamalar. Ben de "resmi OpenSSH'ye kabul edilmedim" demek istedim. - grawity


Uzun hikayeyi kısaca söylemek gerekirse: ideal olarak, Kerberos biletleri terminalinizle (L) alınmalıdır. kinit komutunu veya yerel oturum açma sırasının bir parçası olarak adlandırılan "tek oturum açma" kurulumunda. Uzak sistemler (S1, S2) daha sonra şifre istemleri olmadan erişilebilir olacaktı. Zincirleme bir erişim (L → S1 → S2) "bilet iletme" olarak bilinen bir teknik kullanılarak mümkün olabilir. Böyle bir kurulum, özellikle KDC'nin doğrudan terminalden (L) erişilebilir olmasını gerektirmektedir.

Diğer cevap grawity Bu yaklaşımı detaylı olarak açıklar.


0
2018-03-28 11:10





Buradaki tek belirgin olmayan adım, S1'de kimlik doğrulamalarınızı gerçekleştirmek için kullandığınız bir PAM modülünün bulunmasıdır. kinit ve K'den bilet veren bir bilet alır (istemci kimlik doğrulaması). Ardından, Kerberos kimlik doğrulamasını kullanarak S2'ye SSH yaptığınızda, bir istemci hizmeti kimlik doğrulaması gerçekleşir. Mesajla tüm sıkıcı değiş tokuş mesajlarının gidişatını göremiyorum.

Atmak -vvv her mesajı görmek ve okumak istiyorsanız ssh komutunuzda Wikipedia açıklaması Kerberos


-2
2017-11-10 20:33



Sorduğu bir soruya cevap vermek ayrıntılar "Detaylarda detaylandırmanın yararını görmüyorum" bana oldukça kaba görünüyor. - Massimo