web-gelistirme-sc.com

SSH için yetkili_anahtarları ile bilinen_anahtarlar dosyası arasındaki fark nedir?

SSH protokolünün temellerini öğreniyorum. Aşağıdaki 2 dosyanın içeriği arasında kafam karıştı:

  1. ~/.ssh/authorized_keys: Sunucular için yetkili genel anahtarların bir listesini tutar. İstemci bir sunucuya bağlandığında, sunucu bu dosyada depolanan imzalı genel anahtarını kontrol ederek istemcinin kimliğini doğrular

  2. ~/.ssh/known_hosts: Kullanıcı tarafından erişilen SSH sunucularının DSA Ana Bilgisayar anahtarlarını içerir. Bu dosya, SSH istemcisinin doğru SSH sunucusunu bağladığından emin olmak için çok önemlidir.

Bunun ne anlama geldiğinden emin değilim. Lütfen yardım et.

190
Ankit

known_hosts dosyası, istemcinin sunucunun kimliğine bürünerek sunucunun kimliğine bürünmediğini denetlemesini sağlar. authorized_keys dosyası, sunucunun kullanıcının kimliğini doğrulamasını sağlar.

Sunucu kimlik doğrulaması

SSH bağlantısı kurulurken gerçekleşen ilk şeylerden biri, sunucunun ortak anahtarını istemciye göndermesi ve istemciye bildiğini ( genel anahtar şifrelemesi sayesinde) kanıtlamasıdır. ilişkili özel anahtar. Bu sunucunun kimliğini doğrular: protokolün bu kısmı başarılı olursa, istemci sunucunun iddia ettiği kişi olduğunu bilir.

İstemci, sunucunun bilinen bir sunucu olup olmadığını ve doğru sunucu olarak iletilmeye çalışan bazı sahte bir sunucu olmadığını kontrol edebilir. SSH, sunucunun meşruluğunu doğrulamak için yalnızca basit bir mekanizma sağlar: ~/.ssh/known_hosts istemci makinede dosya (sistem genelinde bir dosya da vardır /etc/ssh/known_hosts). Bir sunucuya ilk kez bağlandığınızda, sunucu tarafından sunulan ortak anahtarın gerçekten bağlanmak istediğiniz sunucunun ortak anahtarı olduğunu kontrol etmeniz gerekir. Bağlanmak üzere olduğunuz sunucunun ortak anahtarına sahipseniz, ~/.ssh/known_hosts istemcide manuel olarak.

Bu arada, known_hosts, yalnızca DSA (RSA ve ECDSA) değil, SSH uygulaması tarafından desteklenen her türlü ortak anahtarı içerebilir.

Herhangi bir gizli veri göndermeden önce sunucunun kimliğinin doğrulanması gerekir. Özellikle, kullanıcı kimlik doğrulaması bir parola içeriyorsa, parola kimliği doğrulanmamış bir sunucuya gönderilmemelidir.

Kullanıcı doğrulama

Sunucu, uzak bir kullanıcının yalnızca söz konusu kullanıcı bu hesaba erişim hakkına sahip olduğunu kanıtlayabilirse oturum açmasına izin verir. Sunucunun yapılandırmasına ve kullanıcının seçimine bağlı olarak, kullanıcı birkaç kimlik bilgisi biçiminden birini sunabilir (aşağıdaki liste ayrıntılı değildir).

  • Kullanıcı, giriş yapmaya çalıştığı hesabın şifresini sunabilir; sunucu daha sonra parolanın doğru olduğunu doğrular.
  • Kullanıcı bir ortak anahtar sunabilir ve bu ortak anahtarla ilişkilendirilmiş özel anahtara sahip olduğunu kanıtlayabilir. Bu, sunucunun kimliğini doğrulamak için kullanılan yöntemle tamamen aynıdır, ancak şimdi kullanıcı kimliğini kanıtlamaya çalışmaktadır ve sunucu bunu doğrulamaktadır. Kullanıcı özel anahtarı bildiğini ve genel anahtarın hesabın yetkilendirme listesinde olduğunu kanıtladığında oturum açma girişimi kabul edilir (~/.ssh/authorized_keys sunucuda).
  • Başka bir yöntem türü, kullanıcının kimliğini doğrulama işlemini istemci makineye devretmeyi içerir. Bu, birçok makinenin aynı hesapları paylaştığı işletmeler gibi kontrollü ortamlarda olur. Sunucu, istemci makinenin kimliğini, diğer yönde kullanılanla aynı mekanizma ile doğrular, ardından kullanıcının kimliğini doğrulamak için istemciye güvenir.

Bu iki dosyanın her ikisi de SSH tarafından kullanılır, ancak karışıklığınızı kolayca açıklayabilecek tamamen farklı amaçlar için kullanılır.

Yetkili Anahtarlar

Varsayılan olarak SSH, Ana Bilgisayar OS tarafından yönetilen kullanıcı hesaplarını ve şifreleri kullanır. (Aslında, PAM tarafından yönetiliyor, ancak bu ayrım muhtemelen burada çok kullanışlı değil.) Bunun anlamı, SSH ile bağlantı kurmaya çalıştığınızda kullanıcı adı 'bob' ve bazı şifreler SSH sunucu programı OS'ye "şifresini 'wonka' olduğunu söyleyen 'bob' adında bu adamı aldım. İçeri girebilir miyim?" Yanıt evet ise, SSH kimlik doğrulaması yapmanıza izin verir ve neşeli yolunuza devam edersiniz.

Şifrelere ek olarak SSH, sizi tanımlamak için genel anahtar şifrelemesi olarak adlandırılan şeyi kullanmanıza da izin verir. Belirli şifreleme algoritması değişebilir, ancak genellikle RSA veya DSA veya daha yakın zamanda ECDSA . Her durumda, anahtarlarınızı ayarladığınızda, ssh-keygen programında iki dosya oluşturursunuz. Biri sizin özel anahtarınız, diğeri de ortak anahtarınızdır. İsimler oldukça açıklayıcı. Tasarım yoluyla, ortak anahtar, sizi tehlikeye atmadan rüzgardaki karahindiba tohumları gibi saçabilir. Özel anahtar her zaman en sıkı güven içinde tutulmalıdır.

Yaptığınız şey genel anahtarınızı authorized_keys dosya. Sonra SSH'ye 'bob' kullanıcı adıyla ve özel anahtarınızla bağlanmaya çalıştığınızda işletim sistemine "Bu adam adını 'bob' aldım, burada olabilir mi?" Diye soracaktır. Yanıt evet ise, SSH özel anahtarınızı inceler ve genel anahtarın authorized_keys dosya çifti. Eğer her iki cevap da evet ise, içeri girebilirsiniz.

Bilinen Ana Makineler

Nasıl authorized_keys dosyası kullanıcıların kimliğini doğrulamak için kullanılır known_hosts dosyası sunucuların kimliğini doğrulamak için kullanılır. SSH yeni bir sunucuda yapılandırıldığında, her zaman sunucuda olduğu gibi, kullanıcı için yaptığınız gibi genel ve özel bir anahtar oluşturur. Bir SSH sunucusuna her bağlandığınızda, ilgili özel anahtara sahip olduğunu gösteren bir kanıtla birlikte size ortak anahtarını gösterir. Ortak anahtarınız yoksa, bilgisayarınız bunu soracak ve known_hosts dosya. Anahtarınız varsa ve eşleşirse, hemen bağlanırsınız. Anahtarlar eşleşmezse, büyük bir kötü uyarı alırsınız. Burada işler ilginçleşiyor. Bir anahtar uyumsuzluğunun genellikle gerçekleştiği 3 durum şunlardır:

  1. Anahtar sunucuda değişti. Bu OS veya bazı işletim sistemlerinde SSH güncellenirken anahtar yeniden oluşturuluyor olabilir.
  2. Bağlandığınız ana bilgisayar adı veya IP adresi, farklı bir sunucuya aitti. Bu adres ataması, DHCP veya benzer bir şey olabilir.
  3. Kötü niyetli ortadaki adam saldırısı oluyor. Bu, anahtar kontrolünün sizi korumaya çalıştığı en büyük şey.

Her iki durumda da, known_hosts ve authorized_keys, SSH programı istemciyi veya sunucuyu tanımlamak için ortak anahtar şifrelemesi kullanıyor.

37
Scott Pack

Ortak Anahtar İçeren Güvenli Dosyalar Hakkında

"Bilinen_anahtarlar" ve "yetkili_anahtarlar" ın birbirinden nasıl farklı olduğunu anlamanıza yardımcı olmak için, bu dosyaların "ssh" biçimine nasıl uyduğunu açıklayan bazı bağlamlar aşağıdadır. Bu aşırı basitleştirmedir; "ssh" için burada belirtilenden çok daha fazla yetenek ve komplikasyon vardır.

Dernekler Güvenilir Kaynaklarda

Açık anahtar değerlerin "rüzgardaki tohumlar gibi güvenli bir şekilde saçmalanabileceği" söylenirken, bahçede hangi tohumların kurulacağına karar veren tohumluk değil, gardner olduğunu unutmayın. Bir ortak anahtar gizli olmasa da, anahtarın kimlik doğrulaması yaptığı şeyle anahtarın güvenilir ilişkisini korumak için şiddetli koruma gerekir. Bu ilişkilendirmeyi yapmak için emanet edilen yerler "bilinen_anahtarlar", "yetkili_anahtarlar" ve "Sertifika Yetkilisi" listelerini içerir.

"Ssh" Tarafından Kullanılan Güvenilir Kaynaklar

Bir ortak anahtarın "ssh" ile ilgili olması için anahtarın önceden kaydedilmesi ve uygun güvenli dosyada saklanması gerekir. (Bu genel hakikatin daha sonra tartışılacak olan önemli bir istisnası vardır.) Sunucu ve istemcinin her biri kendi güvenli bir şekilde saklanan ortak anahtar listesine sahiptir; bir oturum açma işlemi yalnızca her iki tarafın diğer tarafa kayıtlı olması durumunda başarılı olur.

  • "bilinen_anahtarlar" istemcide bulunur
  • "yetkili_anahtarlar" sunucuda bulunur

İstemcinin güvenli dosyasına "bilinen_anahtarlar" ve sunucunun güvenli dosyasına "yetkili_anahtarlar" adı verilir. Bu dosyalar, her birinde satır başına bir ortak anahtar bulunan metne sahip olmalarına benzer, ancak biçim ve kullanımda küçük farklılıklar vardır.

Kimlik Doğrulaması için Anahtar Çiftleri Kullanılır

Bir kamu-özel anahtar çifti "asimetrik şifreleme" gerçekleştirmek için kullanılır. "Ssh" programı kimlik doğrulama için asimetrik kriptografiyi kullanabilir, burada bir işletme kimliğini kanıtlamak için bir soruna cevap vermek zorundadır. Zorluk, bir anahtarla kodlama ile oluşturulur ve diğer anahtarla kod çözme ile cevaplanır. (Asimetrik kriptogrofinin yalnızca giriş aşamasında kullanıldığını unutmayın; daha sonra "ssh" (TSL/SSL), veri akışını işlemek için başka bir şifreleme biçimine geçer.)

Bir Sunucu için Anahtar çifti, İstemci için Başka Anahtar çifti

"Ssh" da, her iki taraf da (istemci ve sunucu) diğerinden şüphelenir; bu, “telnet” olan “ssh” a önceliğe göre bir gelişmedir. "Telnet" ile istemcinin bir parola sağlaması gerekiyordu, ancak sunucu denetlenmedi. Vetting eksikliği, "ortadaki adam" saldırılarının gerçekleşmesine ve güvenliğin felaketle sonuçlanmasına izin verdi. Buna karşılık, "ssh" işleminde, istemci sunucu ilk soruyu yanıtlayana kadar hiçbir bilgi teslim etmez.

"Ssh" Kimlik Doğrulamasındaki Adımlar

Herhangi bir giriş bilgisini paylaşmadan önce, "ssh" istemcisi, ilk önce sunucuya "Gerçekten sizin kim olduğunuzu düşünüyorsunuz?" Diye kanıtlaması için ortadaki adam saldırısı fırsatını ortadan kaldırır. Bu sorunu çözmek için, istemcinin hedef sunucuyla ilişkili ortak anahtarı bilmesi gerekir. İstemci sunucunun adını "bilinen_anahtarlar" dosyasında bulmalıdır; ilişkili ortak anahtar sunucu adından sonra aynı satırdadır. Sunucu adı ve ortak anahtar arasındaki ilişki dokunulmaz olmalıdır; bu nedenle "bilinen_anahtarlar" dosyasındaki izinler 600 olmalıdır - başka kimse yazamaz (okuyamaz).

Sunucu kimlik doğrulaması yaptıktan sonra istemciye meydan okuma şansı elde eder. Kimlik doğrulaması "yetkili_anahtarlar" da bulunan ortak anahtarlardan birini içerecektir. (Bu anahtarlardan hiçbiri çalışmadığında, "sshd" işlemi parola stili kimlik doğrulamasına geri döner.)

Dosya Biçimleri

Yani "ssh" için, herhangi bir giriş işleminde olduğu gibi, "arkadaşlar" listesi vardır ve sadece listedeki kişilerin bir meydan okumadan geçmesine izin verilir. İstemci için, "bilinen_anahtarlar" dosyası, sunucu (ana bilgisayar) olarak işlev görebilen arkadaşların listesidir; bunlar isme göre listelenir. Sunucu için, eşdeğer arkadaş listesi "yetkili_anahtarlar" dosyasıdır; ancak bu dosyada hiçbir ad yoktur, çünkü ortak anahtarların kendileri tanımlayıcı gibi davranır. (Sunucu, oturum açma işleminin nereden geldiğini umursamıyor, ancak yalnızca nereye gideceğini umuyor. İstemci belirli bir hesaba erişmeye çalışıyor, hesap adı "ssh" çağrıldığında bir parametre olarak belirtildi. "Yetkili_anahtarlar "dosya bu hesaba özgüdür, çünkü dosya o hesabın ana dizininin altındadır.)

Bir yapılandırma girişinde ifade edilebilecek birçok özellik olmasına rağmen, temel, en yaygın kullanım aşağıdaki parametrelere sahiptir. Parametrelerin boşluk karakterleriyle ayrıldığını unutmayın.

"Bilinen_komutlar" için:

{server-id} ssh-rsa {public-key-string} {comment}

"Yetkili_anahtarlar" için:

ssh-rsa {public-key-string} {comment}

Belirteci ssh-rsa kodlama için kullanılan algoritmanın "rsa" olduğunu belirtir. Diğer geçerli algoritmalar arasında "dsa" ve "ecdsa" sayılabilir. Bu nedenle, ssh-rsa burada gösterilmiştir.

"Ssh" "bilinen_anahtarlar" Girdisini Otomatik Yapılandırsın

Her iki durumda da, ortak anahtar güvenli bir dosyada bulunamazsa, asimetrik şifreleme gerçekleşmez. Daha önce de belirtildiği gibi, bu kuralın bir istisnası vardır. Bir kullanıcının, kullanıcının "bilinen_anahtarlar" dosyasında listelenmeyen bir sunucuya giriş yaparak bilerek ortadaki adam saldırısını riske atmayı seçmesine izin verilir. "Ssh" programı kullanıcıyı uyarır, ancak kullanıcı ileri gitmeyi seçerse "ssh" istemcisi "sadece bir kez" buna izin verir. Bunun bir kez gerçekleşmesini sağlamak için, "ssh" işlemi, sunucudan ortak anahtarını isteyip "bilinen_hosts" dosyasına yazarak "bilinen_anahtarlar" dosyasını otomatik olarak gerekli bilgilerle yapılandırır. Bu istisna, rakibin bir sunucu adının bir ortak anahtarla ilişkilendirilmesine izin vererek güvenliği tamamen bozar. Bu güvenlik riskine izin verilir, çünkü birçok insan için işleri çok daha kolay hale getirir. Tabii ki, kullanıcının sunucuya giriş yapmadan önce sunucu adı ve ortak anahtar içeren bir satırı manuel olarak "bilinen_anahtarlar" dosyasına eklemesi doğru ve güvenli bir yöntem olurdu. (Ancak düşük riskli durumlar için fazladan çalışma anlamsız olabilir.)

Bire Çok İlişkiler

İstemcinin "bilinen_anahtarlar" dosyasındaki bir giriş, bir sunucu adına ve sunucu makinesi için geçerli bir ortak anahtara sahiptir. Sunucu, tüm zorlukları yanıtlamak için kullanılan tek bir özel anahtara sahiptir ve istemcinin "bilinen_anahtarlar" girdisinin eşleşen ortak anahtara sahip olması gerekir. Bu nedenle, belirli bir sunucuya erişen tüm istemciler "bilinen_anahtarlar" dosyalarında aynı ortak anahtar girişine sahip olacaktır. 1: N ilişkisi, bir sunucunun ortak anahtarının birçok istemcinin "bilinen_anahtarlar" dosyalarında görünebilmesidir.

"Authority_keys" dosyasındaki bir girdi, kolay bir istemcinin hesaba erişmesine izin verildiğini belirtir. Arkadaş, birden çok farklı sunucuya erişmek için aynı genel-özel anahtar çiftini kullanabilir. Bu, tek bir anahtar çiftinin iletişim kurulan tüm sunuculara kimlik doğrulaması yapmasını sağlar. Hedeflenen sunucu hesaplarının her biri, "yetkili_anahtarlar" dosyalarında aynı ortak anahtar girişine sahip olacaktır. 1: N ilişkisi, bir istemcinin ortak anahtarının birden çok sunucudaki birden çok hesap için "yetkili_anahtarlar" dosyalarında görünebilmesidir.

Bazen, birden çok istemci makineden çalışan kullanıcılar aynı anahtar çiftini çoğaltır; tipik olarak bu, bir kullanıcı masa üstünde ve dizüstü bilgisayarda çalışıyorsa yapılır. İstemci makineleri aynı anahtarlarla kimlik doğrulaması yaptığından, sunucunun "yetkili_anahtarları" nda aynı girdiyle eşleşirler.

Özel Anahtarların Konumu

Sunucu tarafı, bir sistem işlemi veya arka plan programı için, gelen tüm "ssh" oturum açma isteklerini işler. Arka plan programına "sshd" adı verilir. Özel anahtarın konumu SSL kurulumuna bağlıdır, örneğin Apple /System/Library/OpenSSL, ancak kendi OpenSSL sürümünüzü yükledikten sonra konum /opt/local/etc/openssl.

İstemci tarafı için, ihtiyaç duyduğunuzda "ssh" (veya "scp") öğesini çağırırsınız. Komut satırınız, biri isteğe bağlı olarak hangi özel anahtarın kullanılacağını belirtebilecek çeşitli parametreler içerecektir. Varsayılan olarak, istemci tarafı anahtar çifti genellikle $HOME/.ssh/id_rsa ve $HOME/.ssh/id_rsa.pub.

Özet

Alt satırda hem "bilinen_anahtarlar" hem de "yetkili_anahtarlar" genel anahtarlar içerir, ancak ...

  • known_hosts - istemci Host'un orijinal olup olmadığını kontrol eder
  • authority_keys - Ana Bilgisayar istemci girişine izin verilip verilmediğini kontrol eder
1
IAM_AL_X