Bir komut dosyası tarafından ssh için kullanılan şifreleri saklamanın güvenli bir yolu var mı?


16

İlk olarak, biliyorum, SSH ile anahtar yetki kullanmalıyım. Bunu açıklamaya gerek yok.

Burada sorun sunucuları (büyük) bir grup var ve ben bunların her birini bağlamak için bir komut dosyası olması gerekir.

Mümkün olduğunca anahtar kimlik doğrulaması kullanıyorum, ancak her sunucuda mümkün değil (bunun üzerinde kontrolüm yok). Yani giriş ile SSH veya bazen telnet.

Bazıları için şifreleri bir db'de sakladım ve komut dosyam gerektiğinde al. Sorun şu ki, bu şekilde yapmak gerçekten güvenli görünmüyor. Biraz daha güvenli yapmanın bir yolu var mı?

Depolamanın belirli bir yolu gibi mi?


1
Env Değişkenleri.
Travis Stoll

4
@TravisStoll Ortam değişkenleri güvenli değildir.
Jenny D

Korkarım kurulumunuz için şifreleri bir db'de saklamak, aldığı kadar güvenli. Keepass dosyası gibi şifreli bir db yapabilirsiniz (Bence keepass dbs erişmek için en az bir perl modülü var), ama sonra yine de girmek istemiyorsanız, bir yere veritabanına şifre saklamak zorunda kalacak senaryonuzu her çağırdığınızda. Belki biraz daha iyi bir IFF, senaryonuzu her çalıştırdığınızda sadece ana şifreyi girersiniz.
Isaac

1
Parola yerine SSH kimlik doğrulama anahtarları kullansanız bile, bu bir güvenlik güvencesi değildir - parola veritabanınızı çalabilen herkes özel anahtarınızı çalabilir. Özel anahtarınızı tıpkı parola veritabanınızı şifreleyebileceğiniz gibi şifreleyebilirsiniz, ancak komut dosyanızın anahtarın (veya parola veritabanının) kilidini açması gerektiğinden, yine de bir saldırgana karşı savunmasızdır. Anahtarlar yerine parola kullanılması, parolayı çalmak için daha fazla yol açtığı için güvenlik açığınızı biraz artırır, ancak parola yerine anahtar kullanmak bile mükemmel bir güvenlik değildir.
Johnny

1
"Bazen telnet" parola bazen tel üzerinden net aktarılır ima anlamına geliyor ...?
Hagen von Eitzen

Yanıtlar:


24

Komut dosyanız bu sunuculardan herhangi birine bağlanabiliyorsa, komut dosyasına erişimi olan (veya komut dosyasının çalıştığı makineye ayrıcalıklı erişimi olan) bu sunuculardan herhangi birine bağlanabilir.

Eğer komut bağımsız çalıştırmak için gereken tüm biter. Buradaki cevap hayır, şifreleri böyle bir ortamda saklamanın kesinlikle güvenli bir yolu yok . Hiçbir şey yapmanın kesinlikle güvenli ve pratik bir yolu yoktur .

Kaçınılmaz olanlardan kaçınmaya çalışmak yerine, derinlemesine savunmaya odaklanmalısınız .

Elbette, şifreleri yeterince korumalısınız . Bu genellikle bunları komut dosyanızdan ayrı bir dosyada tutmak ve kısıtlayıcı dosya sistemi izinlerini yapılandırmak anlamına gelir . Bu, güvenlik açısından bu cephede yapabileceğiniz her şeyle ilgili.

Diğer önlemler kesinlikle sürece belirsizliği artırabilir . Şifrelerin şifrelenmesi, saldırganın şifre çözme anahtarını aramasını gerektirir. Bir tür işletim sistemi korumalı depolama alanı kullanmak, genellikle anahtarınıza erişen diğer kullanıcılara karşı koruma sağlar (bu nedenle saldırı ve kullanım karmaşık olmaktan başka dosya sistemi izinlerine göre hiçbir avantaj sağlamaz). Bu önlemler bir saldırıyı geciktirir , ancak kesin olarak saldırgana karşı engellemez.


Şimdi, şifreleri bir an için herkese açık olarak ele alalım . Hasarı azaltmak için ne yapabilirsiniz?

Eski ve test edilmiş bir çözüm, bu kimlik bilgilerinin yapabileceklerini kısıtlamaktır. UNIX sisteminde bunu yapmanın iyi bir yolu , komut dosyanız için ayrı bir kullanıcı ayarlamak ve bu kullanıcının hem erişen hem de erişilen sunuculardaki yeteneklerini sınırlamaktır . SSH düzeyinde , kabuk düzeyinde veya muhtemelen SELinux gibi bir Zorunlu Erişim Kontrol mekanizması kullanarak kullanıcı yeteneklerini sınırlayabilirsiniz .

Ayrıca dikkate almak isteyebileceğiniz bir şey de komut dosyası mantığını sunuculara taşımaktır . Bu şekilde, kontrolü daha kolay olan ve özellikle ...

Monitör . Her zaman sunuculara erişimi izleyin. Tercihen, günlük kimlik doğrulaması ve yalnızca ek günlüğe yürütülen komutlar . auditdÖrneğin , komut dosyası dosya değişikliklerini izlemeyi unutmayın .


Tabii ki, bu mekanizmaların birçoğu, sorunuz üzerinde anlaşıldığı gibi sunucular üzerinde kontrolünüz yoksa yararlı değildir. Bu durumda, sunucuları yöneten kişilerle iletişime geçmenizi ve komut dosyanız ve potansiyel güvenlik tuzakları hakkında bilgi vermenizi öneririm .


14

Kısa cevap: Hayır.

Uzun cevap: Hayır, tamamen güvenli bir yol yok. (Bu, sunucudaki diğer kullanıcılar tarafından erişilebilen ortam değişkenlerini içerir.) Alabileceğiniz en yakın şey bunları şifreli bir biçimde (keepass, GPG şifreli bir dosya veya bu satırlar boyunca başka bir şey) saklamaktır. Ancak bir noktada, komut dosyanızın kullanabilmesi için şifrenin şifresini çözmeniz gerekir ve bu noktada savunmasız olursunuz.

Başka bir deyişle, hem komut dosyasının çalıştığı sunucuda, ağda hem de hedef sunucularda derinlemesine güvenliğe uzun süre bakmanız gerekir.


1
Bunun kesin bir HAYIR olduğundan emin değilim. Oturumu güvenli; dosya sistemi güvenli ve uygun izinler ayarlanmış olabilir; bu yüzden dosya sisteminden (depolanmış bir parola) bir şeyler alabilir ve bunları stdin üzerinden ssh komutuna bağlayabilirse, iyi olmalı, değil mi? Lütfen yukarıdaki başka bir yorumda verdiğim bağlantılara bakın. Ne düşünüyorsun?
pgr

Onları stdin'den geçirirse, bir güvenlik açığı vardır. Önerilerinizle daha güvenli olacak, ancak tamamen böyle olmayacak. Özellikle bazı oturumların telnet üzerinden yapılması göz önüne alındığında.
Jenny D

0

Db'nizdeki parolaları ikinci bir parola ile şifreleyebilir ve bu parolayı ayrı bir (3.) makinede saklayabilir ve db'den parolaları gereken komut dosyasının ilk önce bu 3. makineyi bağladığı ve şifre çözme parolasını almak için bir sisteme sahip olabilirsiniz. , db'deki parolanın şifresini 3. makineden aldığı parola ile çözer ve çalışır.

Tabii ki bu ekstra güvenlik sağlamaz, yeterli ayrıcalıklara sahip bir saldırgan da 3. makineden şifre isteyebilir.

Ancak mesele şu ki 3. taraf, 3. makineyi, örneğin patronunuz veya güvenlik görevlisi veya 3. taraf kontrol etmeyen sunucuları kontrol edebilir.

Bu şekilde, herhangi bir sorun yaşarlarsa, işinizden ayrılırsanız ve sizi değiştiren adama güvenmezlerse veya komut dosyalarınızın makinelerine erişmeyi durdurmasını isterse, 3'üncü komut dosyalarınız artık şifrelere erişemeyecektir.

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.