Merhabalar,
Bu makalede, linux sunucular üzerinde yapılabilecek güvenlik sıkılaştırma konfigürasyonlarından biri olan SSH Key ile bağlantı konfigürasyonları hakkında bilgiler aktaracağım.
Public Key Authentication, bir şifre yerine, bir cryptographic key kullanarak bir SSH/SFTP hesabında oturum açmanın bir yoludur.
Çok güçlü SSH/SFTP şifreleri kullanıyorsanız, hesaplarınız brute force saldırılarına karşı zaten güvendedir. Ancak, Public Key Authentication kullanmak, birden çok geliştiriciyle çalışırken birçok avantaj sağlar. Örneğin, SSH key’leri ile şunları yapabilirsiniz:
- Birden fazla geliştiricinin/tedarikçinin, aralarında tek bir parola paylaşmak zorunda kalmadan aynı sistem kullanıcısı olarak oturum açmasına izin vermek;
- Diğer geliştiricilerin/tedarikçilerin erişimini iptal etmeden tek bir geliştiricinin erişimini iptal etmek;
- Tek bir geliştiricinin, birçok farklı şifreyi yönetmeye gerek kalmadan birçok hesapta oturum açmasını kolaylaştırır.
Public Key Authentication nasıl çalışır?
Key’ler, Public Key ve Private Key halinde gelir. Her key çifti benzersizdir ve bu iki key, kelimenin tam anlamıyla birbirleri için yaratılmışlardır 🙂
Bu iki key’in çok özel ve etkileyici bir matematiksel özelliği vardır: Private Key’iniz varsa, şifrenizin ne olduğunu göstermeden ona sahip olduğunuzu kanıtlayabilirsiniz. Birine şifreyi göstermek zorunda kalmadan, bir şifre bildiğinizi kanıtlamak gibidir.
Public Key, herkeste bulunabilir ve bu key ile veri kriptolanır. Bu kriptoyu açabilecek tek şey ise elinizdeki Private Key’dir. Dolayısıyla Private Key’i iyi muhafaza etmeniz gerekir. Ekstra güvenlik sağlamak açısından, key çifti ilk defa oluşturulurken, bu dosyanın güvenliğini sağlamak için bir parola oluşturmanız da istenir. SSH ile bağlanmak istediğinizde, Private Key’inizi okumadan önce bu parolayı sizden isteyecektir. İlk bağlantıyı kuracağınız zaman bunu yapacaktır ve kullandığınız bilgisayar üzerinde, artık bu parolayı cache de saklayacağı için bir daha size parola sorulmayacaktır.
Public Key Authentication için,
- Bir key çifti oluşturulur
- Birisine (veya bir sunucuya) oluşturulan key’lerden sadece Public Key verilir
- Private Key, hiçbir zaman hiçkimse ile paylaşılmaz ve güvenliğini sağlamalısınız. Kimlik doğrulaması yapmak istediğinizde, kişi (veya sunucu), Public Key’e karşılık gelen Private Key’e sahip olduğunuzu kanıtlamanızı ister
- Private Key’e sahip olduğunuzu kanıtlarsınız ve login olursunuz
Matematiksel işleri yapmak veya key değişimini kendiniz uygulamak zorunda değilsiniz. SSH sunucusu ve istemci programları sizin için zaten bu işlemleri yapmakta olacaklar.
SSH Key çifti oluşturma
Key çiftinizi sunucunuzda değil, dizüstü bilgisayarınızda oluşturmalısınız. Tüm Mac ve Linux sistemleri, yeni bir key çifti oluşturacak olan ssh-keygen adlı bir komut içerir.
Windows kullanıyorsanız, sunucunuzda anahtarları oluşturabilirsiniz. Key’lerinizi dizüstü bilgisayarınıza kopyalamayı ve sonra sunucudan silmeyi unutmayın.
Bir SSH Key çifti oluşturmak için ssh-keygen komutunu kullanıyoruz.
ssh-keygen
Key’leri kaydedileceği lokasyonu seçmeniz istenir. Zaten bir key’iniz yoksa varsayılan konum yeterli olur. Varsayılan konumu seçmek ve devam etmek için Enter tuşuna basın. Bu örneğimizde varsayılan konum /root/.ssh dizinidir.
Ardından, bir parola seçmeniz istenir. Parola kullanılması, bu Private Key’i kullanmak için parola gerekeceği anlamına gelir. Dolayısıyla Private Key için bir parola kullanmak, iyi bir fikir olacaktır. Böylece Private Key’in başkalarının eline geçse bile parolanın da bilinmesi gerektiği için daha güvenli bir yapı kullanılmış olur.
Bir parola seçtikten sonra Public ve Private Key’leriniz oluşturulur.
İki farklı dosya oluşacak:
- id_rsa : Private Key
- id_rsa.pub : Public Key
Ayrıca Key’inize ait bir fingerprint (parmak izi) ve “visual fingerprint” gösterilir. Bunları kaydetmeniz gerekmez.
Default kayıt lokasyonu /root/.ssh dizinidir. Bu key’leri oluşturduktan sonra otomatik olarak /root/.ssh dizini yaratılır. Erişim güvenliğini de sıkılaştırmak için, default izinlerini kontrol edip düzenlememiz gerekiyor.
.ssh dizini izinlerine baktığımızda aşağıdaki gibi olduğunu görüyoruz. Bu dizini sadece root kullanıcısı okur-yazar-çalıştırır. Fakat bu dizin içindeki key dosyalarının da izinlerini kontrol etmekte fayda var.
ls -la /root/
.ssh dizini içindeki doyaların da izinlerini kontrol ediyoruz.
ls -la /root/.ssh/
Bu dizin altındaki dosyalarda olması gereken izinleri veriyoruz.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa*
Kullanıcı için SSH/SFTP Key konfigürasyonu
Metod 1: ssh-copy-id kullanımı
Bu işlemleri yaptığınız sunucudan, başka bir sunucuya bağlanmak isterseniz, o sunucu üzerinde oluşturduğunuz Public Key içeriğini, karşı taraftaki sunucu üzerinde .ssh/authorized_keys dosyasına kaydetmeniz gerekiyor.
Artık bir SSH Key çiftiniz olduğuna göre, Private Key’inizi kullanarak SSH veya SFTP yapabilmeniz için yapılandırmalara geçebiliriz.
Public Key’inizi karşı taraftaki sunucunuza kopyalamak için aşağıdaki komutu çalıştırın.
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.174.157
Bu komutun yaptığı iş, Public Key içeriğini, karşı taraftaki sunucunun .ssh/authorized_keys dosyası içerisine yapıştırmak. Bunu neden yaptığımızı, makalenin en başında belirtmiştim. Public Key karşı tarafla paylaşılacak, Private Key ise bizde gizli olarak kalacak. Karşıdaki sunucuya SSH yaptığımızda bu Private Key ile bağlanacağız…
Metod 2: Manual Konfigürasyon
ssh-copy-id komutuna sahip değilseniz (örneğin, Windows PC kullanıyorsanız), sunucunuza Public Key’inizi nasıl kopyalayacaksınız? Bu durumda manual konfigürasyon yapmak gerekiyor.
Bunun için windows PC’mizden, sunucuya SSH ile bağlanıyoruz ve .ssh/authorized_keys dosyasını manual oluşturuyoruz.
İlk olarak, dosyayı doğru izinlerle oluşturmak için aşağıdaki komutları çalıştırın.
(umask 077 && test -d ~/.ssh || mkdir ~/.ssh)
(umask 077 && touch ~/.ssh/authorized_keys)
Ardından, tercih ettiğiniz bir metin editörü kullanarak .ssh/authorized_keys dosyasını düzenleyin. id_rsa.pub dosyanızın içeriğini kopyalayıp bu dosyaya yapıştıracağız.
Windows PC kullanıyorsanız Public Key oluşturmak için komut satırını açıyoruz ve ssh-keygen komutunu çalıştırıyoruz.
ssh-keygen
Key’lerin olduğu lokasyona gidip Public key dosyasını notepad ile açıyoruz. İçeriği şu şekilde görünüyor. Bu içeriğin tamamını kopyalıyoruz.
SSH ile sunucuya bağlıydık ve .ssh/authorized_keys dosyasını manual oluşturmuştuk. Şimdi metin editörü ile bu dosyayı açıyoruz ve windows PC den kopyaladığımız Public Key içeriğini buraya yapıştırarak, dosyayı kaydedip çıkıyoruz.
nano /root/.ssh/authorized_keys
Dosyayı kaydedip çıkış yapıyoruz.
Password Authentication Disable etme
Bu adımda ise, artık key kullanacağımız için sshd_config dosyamız içinde buna yönelik düzenlemeler yapacağız.
ÖNEMLİ NOT: SSH erişim şekli (bağlantı noktaları, kimlik doğrulama yöntemleri, vb.) hakkında birşey değiştirirken, sistem gerektiği gibi çalışana kadar etkin kalacak bir SSH oturumunun açık bırakılması şiddetle önerilir. Böylece, bir şeyler ters gittiğinde ve girişler düzgün çalışmadığında, değişiklikleri geri alabilmenizi sağlar.
Ek bir güvenlik önlemi olarak, SSH key’lerini ayarladıktan sonra, parola kimlik doğrulamasını tamamen devre dışı bırakmak isteyebilirsiniz. Böylece, SSH key’leri olmadan, hiçbir kullanıcı SSH veya SFTP’de oturum açamaz. Parola giren herkese şöyle bir mesaj gönderilir:
Permission denied (publickey,password).
Ya da
No supported authentication methods available
Password Authentication disable etmek, sunucu güvenliğini artırmak için mükemmel bir yoldur.
Güçlü parolalar kullandığınız sürece, sunucunuz için SSH parola kimlik doğrulamasını devre dışı bırakmanız gerekmez; ancak isterseniz devre dışı bırakabilirsiniz.
Devam etmeden önce şunları aklınızda bulundurun:
- Password Authentication (Parola kimlik doğrulamasını) devre dışı bırakmak, yanlış bir işlem sonucunda, sunucunuzda kilitlenmeniz olasılığını artırır.
- Private Key kaybederseniz veya ~ / .authorized_keys dosyanızı bozarsanız kilitli kalabilirsiniz.
- Kilitli kalırsanız, artık hiçbir uygulamaya ve dosyalarına erişemezsiniz. Uzak bağlantıyı kaybettiğiniz için sunucunun başına bizzat gidip konsoldan bağlanmanız ve değişiklikleri geri almanız gerekir.
SSH parola kimlik doğrulamasını devre dışı bırakmak için /etc/ssh/sshd_config dosyasında birkaç satırı değiştiriyoruz.
nano /etc/ssh/sshd_config
Ardından, aşağıdaki satırları değiştirin
Bu değişikliği yaptıktan sonra, aşağıdaki komutla SSH hizmetini yeniden başlatın:
systemctl restart sshd.service
Tüm işlerimiz bu kadar. Şimdi başka bir SSH penceresi açarak sunucumuza SSH ile normal bağlanmaya çalışalım.
Gördüğünüz gibi artık password doğrulama devre dışı ve SSH ile bağlanırken, şu Private Key kullanarak bağlan diye tanımlayarak bağlanmalıyız.
SSH programımda, sunucuma ait bilgileri giriyorum ve windows pc üzerinde oluşturduğum Private Key dosyamı seçerek tekrar bağlanıyorum.
Bir seferliğe mahsus Private Key parolasını giriyoruz.
Ve başarılı şekilde login olduk.
Peki linux’tan linux’a SSH key kullanarak nasıl bağlanacağız?
Az önceki adımlarda, üzerinde çalıştığım linux sunucudan, başka bir sunucuya SSH ile bağlanıp, oradaki .authorized_keys dosyasına Public Key yapıştırmıştım. Şimdi o sunucuya Private Key kullanarak nasıl bağlanacağımıza bakalım.
ssh -i /root/.ssh/id_rsa root@192.168.174.157
Başarılı şekilde login olduk ve yaptığımız konfigürasyonlar çalışıyor.
Bu komutla şunu demiş olduk : 192.168.174.157 sunucusuna root kullanıcısıyla ve /root/.ssh/ lokasyonundaki id_rsa Private key ile bağlan…
SSH Key kullanarak remote bağlanma konusunda aktaracaklarım bunlardan ibaret.
Yararlı olması dileğiyle.
Yusuf İşleyen