Veritabanından ortak anahtarlar içeren OpenSSH


14

Public_keys dosyası yerine bir veritabanından ortak anahtarlar getirilebilir mi?

Ortak anahtar her değiştiğinde veya eklendiğinde, birden fazla kullanıcı için git depoları gibi şeylere ssh erişimini yönetmek için böyle bir kurulum kullanmak isterim.


1
Bunun için kukla kullanıyorum
Matt Simmons

Userify bu hesapları merkezi yönetim ancak yerel kimlik doğrulama ile yönetebilir .. bu şekilde merkezi DB'niz bozulursa, yine de girebilirsiniz, ancak merkezi yönetimin tüm avantajlarından yararlanabilirsiniz.
Jamieson Becker

Yanıtlar:


16

Bu soruyu kendim cevaplamaya çalışırken buldum. Bazı arama ve denemelerden sonra, bunun için birkaç seçenek buldum. Matt Simmons bunu kapsadığı için anahtarları alternatif olarak dağıtma konusunu atlayacağım. Yani Ayrıca, ne zaman zamanlar vardır biliyorum değil yeterince iyi. Örneğin, GitHub iseniz ve tek bir kullanıcıya karşı milyonlarca ortak anahtar depolamanız gerekiyorsa, SSH yetkili_anahtarları dosyalarını sürekli olarak güncellemek ve potansiyel olarak düzinelerce ila yüzlerce kenar kutusu arasında senkronize etmek mümkün değildir veya arzu edilmez.

Yani,

  1. Her şeyden önce, RedHat (ve varyantları) OpenSSH için AuthorizedKeysCommandve AuthorizedKeysCommandRunAsseçeneklerini ekleyen desteklenen bir yamaya sahiptir . Yama, opensh 6.2'de yukarı doğru birleştirildi. Man sayfasından alıntı yapmak için :

    AuthorizedKeysCommand

    Kullanıcının ortak anahtarlarını aramak için kullanılacak bir programı belirtir. Program ilk argümanı ile yetkilendirilen kullanıcının adı ile çağrılır ve standart çıktı AuthorizedKeys satırlarında üretmelidir (bkz. Sshd'de AUTHORIZED_KEYS (8)). Varsayılan olarak (veya boş dizeye ayarlandığında) AuthorizedKeysCommand çalıştırması yoktur. AuthorizedKeysCommand kullanıcıyı başarıyla yetkilendirmezse, yetkilendirme AuthorizedKeysFile dosyasına düşer. Bu seçeneğin yalnızca PubkeyAuthentication açıkken etkili olduğunu unutmayın.

    AuthorizedKeysCommandRunAs

    AuthorizedKeysCommand hesabının altında çalıştığı kullanıcıyı belirtir. Boş dize (varsayılan değer), yetkilendirilen kullanıcının kullanıldığı anlamına gelir.

    Bu gece yaptığım deneylerde, kutunun dışında, varsayılan SELinux politikaları nedeniyle bunun işe yaramadığını buldum. SELinux zorlamasını kapatarak bu sorunu çözebilirsiniz setenforce 0. SELinux'u çevirmek muhtemelen kötü bir fikir olduğundan, bunun yerine doğru politikayı oluşturabilirsiniz. Benim durumumda, bu ayarlanmış ve sonra seçeneği ile giriş yapmaya çalışmak kadar basitti . Bu temel olarak denetim günlüklerini inceler ve önlenen şeyleri bulur ve bunlar için istisnalar oluşturur. Orada beyaz listeye eklenebilecek başka şeyler varsa, muhtemelen yeni politikaları doğru şekilde aldığınızdan emin olmak için daha fazla bilgi edinmelisiniz .AuthorizedKeysCommand/etc/ssh/sshd_configaudit2allow -a -M local && semodule -i local.ppaudit2allow

  2. Benzer işlevsellik eklemek için başka çeşitli (muhtemelen daha az test edilmiş ve güvenilir) yamalar vardır. Örneğin, openssh-script-auth var . Ayrıca RedHat'ın kullandığı yamayı doğrudan bulabilir ve uygulayabilirsiniz. Googling hızlı bir müddet ortaya çıkarır https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch ve https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch olan RH sürümlerine dayanmaktadır ancak OpenSSH'nin daha yeni sürümleri için güncellenmiştir.

  3. Doğrudan bazı mağazalardan (örneğin GitHub ve CodeBaseHQ ve diğerleri gibi) anahtar aramaları gerçekleştirmek için OpenSSH'yi yamalayın. GitHub, bu yamayı benim açımdan en iyi şekilde açmadı, ancak geçmişte MySQL ve PostgreSQL anahtar araması için sürümlerle karşılaştığımı biliyorum. Onları şimdi bulmaya çalıştım ama çok şansım olmadı.

  4. Bazı FUSE tabanlı seçenekler de vardır. Örneğin , konumu LPKFuse dosya sisteminde biriyle değiştirerek LDAP'den ortak anahtarlar sunmanıza izin veren AuthorizedKeysFileLPKFuse vardır. LPKFuse FS, içeriği bir dizin sunucusundaki alanlarla desteklenen sanal dosyalar oluşturur.


Sonuçta, seçenek # 1'in resmi olarak RedHat tarafından desteklendiği için en iyi seçenek olduğunu düşünüyorum. Ayrıca, bu komut dosyasında istediğiniz herhangi bir mantığı (bir veritabanıyla konuşmak da dahil) istediğiniz herhangi bir dilde koymanızı sağlar.


Re: # 1 güzel bulmak !! Umarım bu yukarı doğru gider, ESXi'de kullanışlı olur.
Jason Tan

@JasonTan: AuthorizedKeysCommand opensh 6.2'de yukarı doğru ilerledi. Cevabı da yansıtacak şekilde güncelledim.
Bluewind

Harika yanıt, seçenek 1 tam olarak aradığım şeydi.
Shane Kilkelly


1

Yeni openssh sürümlerinde anahtarları bir kullanıcının LDAP girişinde saklayabileceğinize inanıyorum. Hesap yönetimi için zaten LDAP veya AD kullanıyorsanız, anahtar yönetimi için de yararlanabilmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.