.Ssh klasöründeki özel anahtarın izinleri?


381

.sshKlasörümdeki izinlerimi değiştirdim ve şimdi özel anahtarımı kullanan bir yazılım kullandığımda her seferinde şifremi yazmam gerekiyor. Kullandığım id_rsabir uygulamayı her kullandığımda şifre yazmak zorunda kalmamak için dosyamda izinlerim ne olmalıdır ?

Şu anda izinlerim şuna ayarlandı:

-rw-------@ 1 Jody  staff   114 Nov  4 23:29 config
-rw-------  1 Jody  staff  1743 Oct 21  2009 id_rsa
-rw-------@ 1 Jody  staff   397 Oct 21  2009 id_rsa.pub 
-rw-------@ 1 Jody  staff  3855 Sep 13 22:35 known_hosts

Yanıtlar:


640

Genelde izinlerin olmasını istersiniz:

  • .ssh dizin: 700 (drwx------)
  • ortak anahtar ( .pubdosya):644 (-rw-r--r--)
  • özel anahtar ( id_rsa):600 (-rw-------)
  • Son olarak, ana dizininiz grup veya diğerleri tarafından (en çok 755 (drwxr-xr-x)) yazılabilir olmamalıdır .

Her seferinde sistem / kullanıcı şifrenizi girmeniz gerektiğini ve daha önce yapmak zorunda olmadıklarını kastettiğinizi farz ediyorum. cdhowie'nin yanıtı, anahtarlarınızı oluştururken bir parola / parola ayarladığınızı varsaymaktır ve o zaman yaptıysanız, bir ssh aracısı kullanmadığınız sürece her seferinde parolanızı girmek zorunda kalacağınızı varsayar.


13
Başka bir yerde, yetkili anahtarlar dosyasını kullanıyorsanız, bunun 640'a chmod olması gerektiğini, yani -rw-r ----- olduğunu öğrendim.
AnneTheAgile 11:14

5
Bu bilgiyi man sayfalarında nerede bulabilirim?
Sonique

131
Şimdi yaklaşık 30 kez bu yazıya geri döndüm. Hatırlayamadığıma inanamıyorum.
JREAM

7
Tek önemli şey, .ssh içindeki hiçbir şeyin başkasına yazılabilir olmaması ve gizli anahtarların hiçbirinin başkasının okunamayacağıdır.
Markus Kuhn

5
@Cerin, bir dizindeki yürütme iznini, bu dizinin derhal alt dosyalarını / dizinlerini listeleme yeteneğini verir, klasör içindeki dosyalar üst klasörlerinin çalıştırma bitini "devralmaz".
Thomas

87

Sonsuza dek bununla mücadele ediyordum ve nihayet ihtiyaç duyulduğunu anladım. $USERHer yerde sunucuda oturum açmak istediğiniz SSH kullanıcı adıyla değiştirin . rootKullanmaya ihtiyaç duyacağınız gibi giriş yapmaya çalışıyorsanız /root/.ssh, bunun yerine /home/root/.sshkök olmayan kullanıcılar için olduğu gibi.

  • Sunucudaki giriş dizini başkaları tarafından yazılabilir olmamalıdır: chmod go-w /home/$USER
  • Sunucudaki SSH klasörü için 700 izin gerekiyor: chmod 700 /home/$USER/.ssh
  • Authorized_keys dosyası 644 izin gerektirir: chmod 644 /home/$USER/.ssh/authorized_keys
  • Emin olun userdosya / klasör sahibi değil root: chown user:user authorized_keysvechown user:user /home/$USER/.ssh
  • Oluşturulan ortak anahtarı (from ssh-keygen) authorized_keyssunucudaki kullanıcının dosyasına yerleştirin.
  • Kullanıcının giriş dizininin beklediğiniz şekilde ayarlandığından ve .sshdeğiştirdiğiniz doğru klasörü içerdiğinden emin olun. Değilse usermod -d /home/$USER $USER, sorunu çözmek için kullanın .
  • Son olarak, ssh'yi yeniden başlatın: service ssh restart
  • Ardından müşterinin yerel kullanıcının .sshklasöründe ortak anahtar ve özel anahtar dosyalarına sahip olduğundan emin olun ve giriş yapın:ssh user@host.com

İlk paragrafınızla ilgili olarak, yerel linux kutumdaki bir kullanıcıyla ortak / özel anahtarlarla (örn. abc) Uzak sunucudaki kullanıcıdan farklı (örn. ) Ssh yazabiliyorum def@123.456.789. Yerel kullanıcının yerel .ssh dosyalarına sahip olduğundan emin olmam gerekiyordu (örneğin abc:abc, değil root:abc) `
Michael

1
Yeni başlayanlar için tüm adımları ve komutları verdiğiniz için teşekkürler, Alex. Sevgiler, burada en yararlı cevaplardan biridir.
Nav

6
+1. "Authorized_keys dosyasının 644 izni gerekiyor" <= bu çok önemli!
Le Quoc Viet

.Ssh dizinine 700 modu veriyorsanız , o zaman r - grubuna ve diğerlerine vermenin anlamı yoktur , çünkü sadece ".ssh" den sonra gidebilirsiniz (o zaman bu dosyalar için herhangi bir sabit bağlantı olmadığını varsayarak). Kabul edilen cevap için aynı. Varsayılan 755 yeterli.
user3125367 21:17

PEM dosyaları için 400 deneyimim yeterli.
AT

37

Ayrıca, ana dizininizin diğer kullanıcılar tarafından yazılmadığından emin olun.

chmod g-w,o-w ~


8
Bilginize, bu komut kullanıcı olarak oturum açtığınızı ve root olarak girmediğinizi varsayıyor
Alex W

6

İzinler bununla ilgisi olmamalıdır. Özel anahtarınız şifreyle şifrelenmiştir, bu nedenle özel anahtarın şifresi çözülebilir ve kullanılabilir olması için girmeniz gerekir.

Şifresi çözülen anahtarları önbelleğe alabilen ve bunları ihtiyaç duyan uygulamalara sağlayabilecek bir ssh aracısı çalıştırmayı düşünebilirsiniz.


Ssh acentesi hakkında ek bilgi için teşekkürler. Leopard'ın içine yerleştirilmiş bir tane var gibi görünüyor, sanırım bunu yapacağım. Onunla biraz sorun yaşıyor ama başka bir soru soracağım.

5
İzinleri küçümsemeyin. Kesinlikle hala oyuna giriyorlar.
Alex W

@AlexW Onlar ssh'ın diğer yönleriyle devreye giriyorlar, ancak soruda sorulanın değil.
cdhowie

Özel anahtarlarda şifreniz yoksa (kodlar adı verilen otomatik uzaktan kumandanın göz kırpması), size yardımcı olmaz. Burada izinler gerekli.
nerdoc,

"Her seferinde şifremi yazmalıyım. Kullanan bir uygulamayı her kullandığımda şifre girmemesi için id_rsa dosyamdaki izinlerim ne olmalıdır?"
Craig Hicks,

4

Felipe doğrudur - .ssh dizininizi içeren dizin, grup veya başkaları tarafından yazılabilir olmamalıdır. Dolayısıyla chmod go-w ~, ssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keysssh-keygen komutunda bir parola atamadığınızı ve .ssh dizininizin ana dizininizde olduğunu varsayarak, çalıştırdıktan sonra ssh'' yaparken hala bir parola istenip istenmediğini denemek için bir sonraki mantıksal şey budur.

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.