Linux ssh: kullanıcıya özel anahtara okuma hakları vermeden ortak anahtar kimlik doğrulamasına izin ver


14

Linux sunucumda oturum açan kullanıcılar, varsayılan bir hesapla belirli bir uzak makineye ssh yapabilmelidir. Uzak makinedeki kimlik doğrulama genel anahtarı kullanır, bu nedenle sunucuda ilgili özel anahtar kullanılabilir.

Sunucu kullanıcılarının özel anahtarı okuyabilmesini istemiyorum. Temel olarak, sunucuya erişebilmeleri, ssh'ın doğru olmasına izin verir ve sunucudan kaldırılmaları da uzak makineyle bağlantıya izin vermemelidir.

Kullanıcıların özel anahtara okuma erişimi vermeden ssh bağlantısı açmasına nasıl izin verebilirim?

Şimdiye kadar düşüncelerim: Açıkçası ssh yürütülebilir özel anahtarı okuyabilmelidir, bu yüzden bu hakkı olan sunucu üzerinde başka bir kullanıcı altında çalışması gerekir. Ssh bağlantısı kurulduktan sonra, komutları girip uzak makineyle etkileşime girebilmesi için kullanıcıya "iletebilirim".

  • Bu iyi bir yaklaşım mı?
  • İleriyi nasıl uygulamalıyım?
  • Kullanıcı bağlantıyı nasıl başlatabilir (yani ssh'nin anahtar üzerinde okuma hakları olan kullanıcı tarafından yürütülmesi)?
  • Güvenlik boşluğu var mı? - kullanıcılar ssh'ı başka bir kullanıcı olarak yürütebilirlerse, diğer kullanıcıların yapabileceği her şeyi yapabilirler (özel anahtarı okumak dahil)?


1
Uzak sunucuyu, yalnızca sunucunuzun IP'sinden bu anahtarla bağlantı kabul edecek şekilde yapılandırdınız mı? Bu şekilde anahtarı çalsalar bile hiçbir şey yapamazlar.

@ AndréDaniel belki de sunucudan şifresiz girişleri kabul edecek şekilde yapılandırılmış, tamamen ilgisiz başka bir bilgisayara giriş yapabilirler. Böyle bir düzene sahip olmayı düşünebilmemin tek nedeni bu; eğer bu değilse, ne olduğunu merak ediyorum. (Gerçekten önemli değil.)
David Z

@DavidZ Gerçekten anlamıyorum ... anahtar , IP'nin ilk sunucudan (kullanıcıların bağlandığı yer) biriyle eşleştiği varsayılarak hedef sunucuda güvenilmemelidir .

2
Bu şekilde kilitlemeniz gerekiyorsa, kullanıcıların ~/.ssh/authorized_keysdosyaya yeni ortak anahtarlar eklemesine izin vermemek için önlem aldığınız var mı?
mpontillo

Yanıtlar:


31

Var olan sebeplerden biri budur sudo. Kullanıcılarınızın yalnızca önceden yetkilendirilmiş komut satırı seçenekleriyle tek bir komut çalıştırmasına izin verin ve en belirgin engeller çözülür. Örneğin

#/etc/sudoers
%users ALL = (some_uid) NOPASSWD: /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

sudogrubun tüm üyelerinin usersssh komutunu çalıştırdıklarında kendi parolalarını (veya some_uid hesabının parolasını) girmeden user_uid olarak çalıştıracak şekilde ayarlar :

sudo -u some_uid /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

NOPASSWD:Uzak ana bilgisayarda oturum açmadan önce kullanıcıların kendi şifrelerini girmeye zorlama seçeneğini kaldırın .
Muhtemelen bir takma ad veya sarıcı komut dosyası kullanıcılarınız için kolaylık olarak ayarlayın, çünkü sudodoğru argümanları kullanma konusunda oldukça seçici.


Tıkır tıkır çalışıyor. Bu aynı zamanda wenzul tarafından belirtilen kopya için önerilen cevap olmalıdır.
Philipp

10

Bu, ana bilgisayar tabanlı kimlik doğrulaması için iyi bir kullanım durumu gibi görünüyor. Bu, SSH'nin kimlik doğrulaması için yerel makinede (bu durumda sunucunuz) tek bir kullanıcının anahtarını kullanmadığı bir kimlik doğrulama yöntemidir ; bunun yerine, ana bilgisayarın özel anahtarını kullanır; bu anahtar, depolanan /etc/ssh/ve yalnızca tarafından okunabilen özel anahtarı kullanır root.

Bunu ayarlamak .shostsiçin, uzak makinede, kullanıcıların giriş yapmasını istediğiniz kullanıcının giriş dizininde (değil ~/.ssh) adlı bir dosya oluşturmanız gerekir . Dosyanın içeriği olmalıdır

server-hostname +

Burada server-hostnamesunucunuzun adı ve +"herhangi bir kullanıcı" anlamına gelen joker karakter olarak kullanılan gerçek bir artı işaretidir.

Ayrıca uzak makinenin sunucunun ana makine anahtarını doğrulayabildiğinden emin olmanız gerekir; bu, sunucunun ana makine anahtarının uzak makinede /etc/ssh/ssh_known_hostsveya ~/.ssh/known_hostsuzak makinede listelenmesi gerektiği anlamına gelir . Bu durumda değilse, uzak makinede oturum açıp çalıştırarak ayarlayabilirsiniz.

ssh-keyscan server-hostname >> /etc/ssh/ssh_known/hosts

Bu adımları ayarladıktan sonra, başka bir şeye ihtiyacınız yoksa, sunucudaki özel anahtarı tamamen silebilirsiniz. (Bunu yaparsanız, her zaman yalnızca tarafından okunabilecek bir rootşey olarak ayarlayabilirsiniz .)

Ayrıca, belirli kullanıcıların uzak makineye erişmesine izin verme veya reddetme gibi işlemleri kolayca yapabilirsiniz. Ayrıntılar için sshve sayfalarına hosts.equivbakın.

Bu kurulumla ilgili bir sorun, uzak makinede oturum açan kullanıcıların değiştirebilmesidir .shosts. Uzak makineye farklı bir kullanıcı olarak giriş yapmalarına izin verecek hiçbir şey yoktur, ancak kendi veya başkalarının uzak makineye erişimini kesebilirler. Bu bir endişe ise, .shostssadece yazılabilir bir rootşey yapabilir veya bunun işe yarayıp yaramadığından emin değilim, ama deneyebilir ve görebilirsiniz. ( sudoBir kullanıcı her zaman silebildiğinden, olduğu gibi diğer yöntemler de aynı riske maruz kalır ~/.ssh/authorized_keys.)


+ 1; Kullanıcının bağlantı noktası iletme, güvenli kopyalama, vb. Gibi terminal dışındaki SSH özelliklerini kullanması gerektiğinde bu seçeneğin iyi bir esneklik sağladığını düşünüyorum. Alternatif bir SSH istemcisi bile çalışmalıdır. sudoSeçenek olsa da, daha iyi bir kilitli çevre için olmak ... olabilir
mpontillo
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.