SSH açık-anahtar doğrulaması (SSH public key authentication)

Parola doğrulaması maalesef yeterince güvenli bir doğrulama aracı olamıyor günümüzde. Evcil hayvanınızın adından daha güçlü olduğunu düşünerek oluşturduğunuz “güçlü” parolanız dahi brute-force saldırılarına karşı tahmininizden daha çabuk teslim olabilir. Ağ trafiğinizin koklanması (sniff), İnternet üzerinden doğrudan veya köleleştirilmiş (zombie) bilgisayarların otomatik saldırıları sıklıkla yaşanıyor. SSH trafiğiniz yerel ağınızda dahi olsa sisteminize bulaşan bir solucan parola tabanlı güvenliğinizi kolayca delebilir.

Pek çok istemcinin aynı parolaya sahip hesabı kullanarak uzak sistemlerinize erişmesi, genel adıyla paylaşımlı parola kullanımı,  sizi daha çok risk altına atacaktır. Parolanın güvenliğinden endişe edilen durumlarda, aynı parolayı kullanan tüm istemcileri eksiksiz yeni parola ile güncellemeniz dahi pek eğlenceli olmayacaktır.

OpenSSH’a tümleşik gelen açık anahtar doğrulama sistemi (public key authentication) hem güvenliğinizi arttırıyor hem de kullanım kolaylığını beraberinde getiriyor.

Açık anahtar altyapısı nedir?

Açık anahtar doğrulaması (PKI – public key infrastructure) açık/gizli anahtar çiftine dayanan bir yöntemdir. Anahtar çiftinin açık olan anahtarı herkes tarafından kullanılabilir ve bu anahtarla veri kriptolanır. Sadece anahtar çiftinin gizli olan anahtarı bu kriptolu veriyi çözümleyebilir. Bu yöntemle açık anahtarınıza sahip herhangi biri size gizli bilgi gönderebilir ve veriyi gönderen kişi sizin gizli anahtara sahip olmanız durumunda bunu okuyabileceğinize emindir. Çalışma prensibini anladıktan sonra, doğrulamanın bu teknik üzerinden nasıl çalıştığını anlamak gayet kolaylaşacaktır.

Kullanıcı olarak bir anahtar çifti oluşturup, açık anahtarınızı uzak sisteminize yerleştirebilirsiniz. Bu sayede uzaktaki sisteminiz sizi doğrulayabilecektir. Bu doğrulama SSH protokolü seviyesinde otomatik olarak gerçekleşmektedir.

İşleyişten anlayacağınız gibi gizli anahtarın gizliliğinin sağlanması gerekmektedir. Sisteminizde tuttuğunuz gizli anahtarınızın güvenliği için ek bir parola (passphrase) koruması bulunmaktadır. SSH gizli anahtarınızı okumadan önce parola girişi istenmektedir. Sadece kendinizi kullandığı ve fiziksek güvenliğinden emin olduğunuz sistemlerde passphrase tanımlamadan gizli anahtarınızı bulundurmanız veya oturumunuz süresince belleğe kaydedilecek şekilde tek sefer passphrase girmeniz alternatif olarak değerlendirilebilir. OpenSSH içindeki bir araç SSH-agent, bellekte passprase saklama özelliğini kolaylaştırmaktadır.

Yapılandırma ve kullanım

İlk yapılması gereken işlem, SSH-keygen aracı kullanılarak kendinize özel anahtar çiftinin oluşturulmasıdır. Bu işlem farklı platformlarda farklı araçlar kullanılarak da yapılabilir ör. putty-keygen.exe, secureCRT gibi.

hamdi@localhost:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/hamdi/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hamdi/.ssh/id_dsa.
Your public key has been saved in /home/hamdi/.ssh/id_dsa.pub.
The key fingerprint is:
f3:77:56:58:a8:bb:08:59:67:15:2c:0e:1d:d0:40:a3 hamdi@localhost
hamdi@localhost:~$

Yukarıdaki adımları tamamladıktan sonra anahtar çiftiniz kullanıma hazır hale gelecek. Faklı bir isim belirtmediyseniz id_dsa gizli anahtarınız, id_dsa.pub açık anahtarınız olarak kaydedilecektir. Gizli anahtarınızı sadece sizin okuyabilmeniz için yetkilendirme yapmanız gerekecek, çünkü OpenSSH geniş yetki ile okunabilir gizli anahtarı kullanmayı kabul etmeyecek. Bunun için;

hamdi@localhost:~$ chmod 700 ~/.ssh
hamdi@localhost:~$ chmod 600 ~/.ssh/id_dsa*
hamdi@localhost:~$ ls -la .ssh
total 10
drwx------   2 hamdi  hamdi   512 Apr 10 16:12 .
drwx-----x  12 hamdi  hamdi  1024 Apr 10  2013 ..
-rw-------   1 hamdi  hamdi  1264 Apr 10 16:12 id_dsa
-rw-------   1 hamdi  hamdi  1123 Apr 10 16:12 id_dsa.pub
hamdi@localhost:~$

Bu aşamadan sonra açık anahtarınızın uzak sunucunuza kaydedilmesi gerekiyor. Bu aşamada id_dsa.pub dosyanızını bir text düzenleyici ile kopyalayıp, uzak sunucunuzdaki ~/.ssh/authorized_keys dosyasının içine eklemeniz yeterli olacaktır. Bu işlemi kolaylaştıran ssh-copy-id aracını da tercih edebilirsiniz;

ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host

İstemci sisteminizde yaptığınız yetkilendirmenin bir benzerini uzak sunucunuzda da yapmanız gerekiyor. .ssh klasörü için chmod 700 ve authorized_keys dosyası için chmod 600 uygulayın.

Uzak bağlantı için tüm adımları tamamladık. Parola kullanmadan açık anahtar ile bağlantı kurmak için;

hamdi@localhost:~$ssh -i /home/hamdi/.ssh/id_dsa remotehost.example.com
Enter passphrase for key '/home/hamdi/.ssh/id_dsa':
Last login: Wed Apr 10 16:20:50 2013 from localhost.example.com

hamdi@remotehost:~$

Uzak sisteminizi sadece açık anahtar doğrulaması ile çalışacak şekilde yapılandırmanız, kullanıcı hesaplarının brute-force ve man-in-the-middle saldırılarına karşı tamamen korunmasını sağlar.

Farklı cihazlarınız için farklı anahtar çiftleri oluşturup kullanmanız bu yapı ile mümkün olacaktır. Bunun avantajı, taşınabilir bir cihazınızın çalındığını veya kaybolduğunu düşünün. Uzak sisteminize bağlanarak bu cihazınızın açık anahtarını silmeniz yeterli olacak. Eğer birisi cihazınızı ele geçirip gizli anahtarınızın passphrese ini kırmayı başaracak seviyeye gelirse sertifika otoritesi ile yönetilen anahtar çiftlerinin “revoke” edilmesi tüm riski sıfırlayacaktır.

Ayrıca bu sistemde birden fazla istemciye parola dağıtmanın getirdiği güvenlik riskini ortadan kaldıracaksınız ve toplam güvenlik yapınıza büyük bir katkı sağlayacak. Çünkü eğer bir hesap ele geçirilse dahi uzak sisteminizdeki diğer hesapların ele geçirmesi imkansız olacak. 

Avantajlarını şu şekilde listeleyebiliriz;
– Araya girme (man in the middle) saldırılarına karşı güvenlik sağlayacaktır,
– Aynı parolayı pek çok sistemde kullanan kullanıcıların güvenliğini arttırır,
– Kullanım kolaylığı ve otomatikleştirme ile çok sayıda sistem yönetenlere hız kazandırır,
– Zayıf parola kullanımına karşı kullanıcı güvenliği artar,



Yorumlar

  1. merhaba, ben tam olarak anlamadım. runabove.com dan ssd cloud satın aldım ama bağlantı kuramıyorum. putty ile ip adresini yazıp root / admin / ssh admin@ipadresi vs. ssh key adını ve ssh keyi her birini kullanıcı adı ve şifre yerlerine değiştirerek onlarca kombinasyon denedim ama bağlantı sağlayamadım. :D ssh key ile bağlantı nasıl kurabilirim. ben her zaman linuxa putty ile windows üzeirnden bağlandım. putty ile windows üzerinden SSH KEY kullanarak ip adresini girdiğim yere veya login kısmına özel olarak ne yazmam gerekiyor çözemedim. yardımcı olursanız sevinjirim. inanın hiç anlamadığım bir şey

  2. Kendi açık anahtarını sunucuya eklediysen putty ile o anahtarı kullanarak bağlanman mümkün. Gerekli adımları açıklayan pek çok site var. Anahtar kelimeler “Key-Based SSH Logins With PuTTY”

  3. Merhaba hocam. Ben amazondan Freebsd sunucu aldım. Bana putty giriş yapabilmem için .pem bir key pair verdi. bunu putty için dönüşütürüp puttye ec2-user kullanıcı adıyla giriş yapabiliyorum. Fakat root girişi yapamıyorum. Filezilla nasıl bağlanacağım bu key ile? Sunucumun bir şifresi olmadan navicat filezilla gibi programlara nasıl bağlanacağım yardımcı olurmusunuz. teşekkürler

Bir cevap yazın

(gerekli)