E N D
SSH Servisi (1) • SSH, iki sistem arasındaki uzak bağlantıların güvenli bir şekilde kurulmasını sağlayan bir protokoldür. İki sistem arasındaki tüm ağ trafiğinin şifrelendiği bu protokol ile, önceden kullanan ftp, rsh, telnet ve rcp gibi yerini sftp, ssh ve scp gibi programlar almıştır. • SSH protokolü ile gerçekleştiren bağlantılarda öncelikle kimlik doğrulama ile ilgili kullanıcı adı ve şlifre bilgileri sunucuya şifrelenmiş olarak gönderilir. Kimlik doğrulama adımı geçildikten sonra veri aktarımı sunucu ve istemcinin ortaklaşa anlaştığı bir şifre ile şifrelenerek gerçekleştirilir.
SSH Servisi (2) • SSH protokolü üzerinden bağlantı kurulduktan sonra istemci bağlantı yaptığı sunucu ile ilgili bazı bilgileri kaydeder. Aynı sunucuya daha sonra yapılacak bağlantılarda yine bu bilgiler kontrol edilir ve uyuşmazlık olması durumunda kullanıcı uyarılır. Bu bilgiler arasında tutarsızlığın sebebi bağlantı yapılan sunucunun aslında gerçekten bağlanılmak istenen sunucu olmaması olabilir. Bu tipte saldırılar “man-in the-middle”olarak adlandırılır. • Red Hat Linux dağıtımları ile beraber openssh sunucu ve istemci programları gelmektedir. Eğer ssh sunucusu çalıştırılacak ise, openssh-server paketi kurulu olmalıdır. Bir sistem ssh istemcisi olarak kullanılacak ise openssh-client paketi sistemi kurulu olmalıdır. Ayrıca openssh paketi de hem istemci hem de sunucu paketinin gereksinim duyduğu temel dosyaları içeren bir paketttir. [root@localhost ~] #rpm –q openssh openssh-server openssh-client openssh-4.2p1-fc4.10 openssh-server-4.2p1-fc4.10 openssh-clients-4.2p1-fc4.10
SSH Servisi (3) • SSH servisinin verilebilmesi sistemde sshd servisinin çalışıyor olması gerekir. (root@localhost ~)#service sshd status sshd (pid 10224 30063)is running… • SSH servisi yapılandırmasnı /ets/ssh/sshd_config dosyasından okur, dosyanın her satırında yapılandırma deyimi değer çiftleri bulunur. “#” ile başlayan satırlar yorum/açıklama satırları olarak değerlendirilir.
SSH Sunucusunun Yapılandırılması SSH sunucusunun yapılandırmasında kullanılabilecek temel yapılandırma deyimleri aşağıda verilmiştir. Port: SSH sunucusu varsayılan olarak 22 numaralı portu dinler, istenilirse bu değer Port yapılandırma deyimi ile değiştirilebilir. Port 22 Protokol: SSH sunucusunun hangi protokol versiyonlarını desteklediğini gösterir. SSH1 ve/veya SSH2 protokolleri kullanılabilir. Bu yapılandırma deyiminin varsayılan değeri 2,1 dir. Bu sıralama bir öncelik belirtmez, çünkü protokol seçiminiistemci yapar. Protokol2 HostKey: SSH protokolünde kullanılacak özel sistem anahtarlarının bulunduğu dosyaları gösterir. Birden fazla anahtar dosyası tanımlanabilir. Bu dosyalar ayrıca SSH1/SSH2 protokollerinin kullanımına göre değişiklik gösterebilir.
SSH Sunucusunun Yapılandırılması (2) SyslogFacility: ssh sunucusundan gelecek mesajları loglanırken hangi tipte değerlendireceğini belirtir. Bu deyimin alabileceği değerler: DEAMON, USER, AUTH, AUTHPRIV, LOCAL[0-7] dir. Varsayılan olarak AUTH kullanılır. SyslogFacility AUTHPRIV LogLevel: ssh sunucusunun üreteceği log miktarının ayarlanmasını için kullanılır. Alabileceği değerler QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG[1-3] tür. Varsayılan olarak INFO değeri kullanılır. Log seviyesinin DEBUG ve üstü olarak ayarlanması durumunda aşırı miktarda log üretilecek ve üretilen loglar arasında kullanıcıların kişisel gizliliklerini ihlal edebilecek loglar bulunacaktır. AllowUsers: Sisteme ssh ile bağlanabilecek kullanıcıların ayarlanması için kullanılır. Varsayılan olarak sisteme bağlanabilecek kulanıcılar üzerinde bir kısıtlama bulunmamaktadır. Bu deyim ile birbirinden boşluk karakteri ile ayrılan birden fazla kullanıcı ismi tanımlanabilmektedir. Kullanıcı ismi tanımlanırken * ve ? özel karakterleri kullanılabilmektedir. Eğer kullanıcı ismi olarak KULLANICI@UZAK_SİSTEM formatı kullanılır ise KULLANICI ile belirtilen kullanıcının sadece UZAK_SİSTEM ile belirtilen istemcinin login olabilme hakkı bulunmaktadır.
SSH Sunucusunun Yapılandırılması (3) • DenyUsers: sisteme ssh ile bağlanacak kullanıcıların kısıtlanması için kullanılır. AllowUsers deyimi ile benzer kullanıma sahiptir. • AllowGroups: Sisteme ssh ile bağlanmasına izin verilecek grupların tanımlanması için kullanılır. Varsayılan olarak her grubun izni vardır. Grup isimleri belirtilirken * ve ? gibi karakterler kullanılabilir. • DenyGroups: Sisteme ssh ile bağlanması istenmeyen grupların belirtilmesi için kullanılır. AllowGroups deyimi ile benzer kullanıma sahiptir. • LoginGraceTime: Kullanıcı kimlik doğrulama adımında başarılı olamazsa sunucunun ( saniye cinsinden) belirtilen zaman sonunda bağlantıyı koparmasını sağlar. Bu değer “0” ise bir sınırlama yoktur. Varsayılan değeri 120 saniyedir. Bu değerin küçük tutulması kullanıcı adı, şifre çiftlerini kullanarak yapılan saldırılarda bir seferde yapılacak maksimum deneme sayısını kısıtlayıcı yönde etki yapacaktır.
SSH Sunucusunun Yapılandırılması (4) PermitRootLogin: Bu yapılandırma deyimi “yes”, “without-password”, “forced-commands-only” ve “no” değerlerini alabilir. Varsayılan olarak root kullanıcısının sisteme ssh ile bağlanmasına izin verilmiştir (yes). Bu deyime “without-password” değeri verilmişse root kullanıcısı şifre ile kimlik doğrulaması yapamaz eğer değer olarak “forced-commands-only” ayarlanmış ise, root kullanıcısının sisteme login olup interaktif bir kabuk elde etmesi engellenirken, ssh üzerinden sistemde komut çalıştırılmasına izin verilecektir. Root kullanıcısının ssh ile bağlantısını engellemek için bu değer “no” yapılmalıdır. PermitLootLogin yeni PubkeyAuthentication: Genel anahtar kimlik doğrulama mekanizmasının kullanılıp kullanılmayacağını ayarlamak için kullanılır. Varsayılan olarak bu mekanizma kullanımaktadır. Bu deyim sadece SSH2 için geçerlidir. PoobkeyAuthentication yes AuthorizedKeysFile: Genel anahtar ile kimlik doğrulamada kullanılacak anahtar dosyasının yerini belirtir. Varsayılan değeri kulanıcının ev dizinindeki ssh/authorized_keys dosyasıdır. AuthorizedKeysFile ssh/authorized_keys PasswordAuthentication: Şifre ile kimlik doğrulama yapılıp yapılmayacağını belirtir. Varsayılan olarak şifre ile kimlik doğrulamaya izin verilir. PasswordAuthentication yes
SSH Sunucusunun Yapılandırılması (5) PermitEmptyPasswords: Şifre ile kimlik doğrulama mekanizmasının kullandığı durumlarda boş şifrelerin kabul edilip edilmeyeceğini belirtilmesi için kullanıllır. Varsayılan olarak boş şifreye sahip kullanıcıların sisteme girmesi engellenmektedir. PermitEmptyPasswords no UseDNS : eğer değer olarak “yes” verilir ise sshd bağlantı isteğinde bulunan istemcinin IP adresini kullanıp DNS üzerinde ters kayıt sogulaması gerçekleştirecektir. Ters kayıt sorgulaması sonucunda bir isim bulunduğu takdirde, bulunan isim için bir düz DNS sorgulaması gerçekleştirecek ve cevap olarak gelen IP adresi ile istemcinin IP adresi karşılaştırılacaktır. Bu karşılaştırma /var/log/secure dosyasına yansıyacaktır. Varsayılan olarak bu mekanizma kullanılır. [root@localhost ~]# egrep “reverse mapping checking” /var/log/secure reverse mapping checking getaddrinfo for del.dinamic2316.ttnet.net.tr failed – POSSİBLE BREAKİNG ATTEMPT!
Kimlik Doğrulama Mekanizmasları SSH sunucusu doğrulama mekanizması olarak şifre yada genel anahtar mekanizmalarını kullanabilir. Sistem Şifreleri ile Kimlik Doğrulama Kimlik doğrulama mekanizması olarak PasswordAuthentication seçildiği zaman ssh sunucusu kimlik doğrulama işlemini yerel sistem kullanıcıları üzerinden PAM modülü aracılığı ile yapar. Bu yöntem ile /etc/passwd ve /etc/shadow dosyaları yada NIS, LDAP, Active Directory sunucuları kullanılabilir. [root@localhost ~]# cat /etc passwd/sshd #0PAM-1.0 auth required pam_stack_soservice-system-auth account required pam_nologin.so account required pam_stack.so servise-system-auth password required pam_ stack.so servise-system-auth session required pam_ stack.so servise-system-auth session required pam_loginuid.so
Kimlik Doğrulama Mekanizmasları Genel Anahtar (Public Key) ile Kimlik Doğrulama SSH protokolü ile kullanılan bir değer kimlik doğrulama mekanizmasıdır. Bu sistemin temeli birbirlerinin tamamlayıcısı özelliğindeki anahtar çiftlerini dayanmaktadır. Kullanılan anahtarlardan bir tanesi public key (genel anahtar) adını almaktadır. Bağlantı kurulacak sisteme taşınan bu anahtarın içeriğinin öğrenilmesi önemli değildir. Genel anahtarın karşılığı olan anahtar ise private key (özel anahtar) adını almaktadır. Sadece oluşturduğu sistemde bulunan bu anahtar bir şifre (passphrase) ile korunmaktadır. Genel anahtar ile kimlik doğrulama yapılabilmesi için öncelikle kullanılacak anahtar çiftlerinin oluşturulması gerekir.anahtar çifti oluşturma işlemi ssh-keygen komutu ile yapılır. SSH2 protokolünde rsa ve dsa olmak üzere iki tip anahtar oluşturulabilir. Oluşturulmak istenen anahtar çifti tipi ssh-keygen komutuna verilen –t seçeneği ile belirtilir. ssh-keygen –t dsa #DSA tipinde anahtar çifti oluşturmak için ssh-keygen –t rsa #RSA tipinde anahtar çifti oluşturmak için
Genel Anahtar ile Kimlik Doğrulama(2) Oluşturulan anahtar çiftleri varsayılan olarak kullanıcının ev dizinindeki ssh dizininde saklanır. DSA tipindeki anahtar çiftlerinde özel anahtar id_rsa isminde, genel anahtar ise id_rsa.pub ismindeki dosyalarda tutulır. Benzer şekilde RSA tipindeki anahtar çiftlerinde özel ve genel anahtarların tutulduğu dosyalar id_rsa ve id_rsa.pub olacaktır. Anahatr çifti oluşturulması aşamasında özel anahtarın korunması için bir şifre (passphrase) girilmesi istenir. Bu şifrenin güvenlik açısından uzun ve karmaşık olması önerilmektedir. Şifrenin unulması durumunda anahtar çiftinin yeniden oluşturulması gerekmektedir. Ancak passphrase biliniyorsa istendiğinde ssh-keygen komutuna -p anahtarı verilerek değiştirilebilir. [root@localhost ~ ]# ssh-keygen –t dsa Generating public/privatedsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa) Enter passphrase (empty for no passphrase) Enter same passphrase again Your identification has been saved in /root/.ssh/id_dsa Your public key has been saved in /root/.ssh/id_dsa.pub The key fingerprint is: 10:ab:01:67:04:f4:db:d2:b4:6b:2c:8c:36:f2:ee:24
Genel Anahtar ile Kimlik Doğrulama(3) SSH sunucusunda genel anahtar kimlik doğrulama mekanizmasını kullanabilmesi için, bağlantısı yapacak kullanıcının genel anahtarını sunucuda ev dizinindeki .ssh dizini içindeki authorized_keys dosyasına girmesi gerekmektedir. Bu dosya içinde birden fazla genel anahtar bilgisi bulunabilir. Bu işlemler gerçekleşdikten sonra kullanıcı genel anahtarı ile sunucuya ssh ile bağlanabilir. Bağlantı anında, kullanıcıdan, özel anahtarını korumak için kullsndığı passphrase (şifre) istenir. Yardımcı bir program olan ssh-agent program sayesinde passphrase bilgisi kullanıcıdan bir defalığına istenmekte ve bu bilgi yapılan bağlantılarda kullanılmaktadır. Ssh-agent komutunun kullanılması için kullanılan kabuktan aşağıdaki formattaki komut verilmelidir. [root@localhost~]# axec ssh-agent /bin/bash Bu komutun verilmesi ile çalışan kabuk programının yerine ssh-agent programı çalışmaya başlayacak ve kulanıcıya /bin/bash kabuğunu açacaktır. Bu işlemden sonra ssh-add komutu ile gerekli passpharaseler ssh-agent programına bildirilebilir. Bu işlem yapıldıktan sonra pıblic key kimlik doğrulaması yapan ssh sunucularına yapılan bağlantılarda passphrase istenmeyecektir. [root@localhost ~ ]# ssh-add Enter passphrase for /root/.ssh/id_rsa Identity added:/root/.ssh/id-rsa (/root/.rsa/id_rsa)
SSH İstemcisi SSH istemcisi olarak ssh komutu kullanılmaktadır. Bu komut temel olarak rlogin, rsh ve telnet komutlarının güvenli bir yerdeğiştirmesidir. Ssh komutu ile rlogin, rsh ve telnet komutları ile yapılabilen işlemlerin hepsi yapılabilmektedir. Komutun temel kullanımı aşağıdaki gibidir: Ssh [[-1] kullanıcı_adı] uzak_sunucu [komut] Ssh [kullanıcı_adı@]uzak_sunucu [komut] [root@localhost~]# ssh 192.168.1.200 The authenticity of host : 192.168.1.200 (192.168.1.200) can’t be established RSA key fingerprint is fb:78:12:0f:24:a0:fd:14:a5:c4:2d:58:a6:a3:bf:5f Are you sure you want to continue connecting (yes/no)? Yes Warning: Permenently added ‘192.168. 1. 200 ’ (RSA) to the list of known hosts. root@192.168.1.200 ‘s password:
SCP ve SFTP İstemcileri SCP Ağ üzerinden bir makinadan değerini dosya transferi yapmak için kullanılan scp komutu da benzer şekilde rcp komutunun güvenli bir yerdeğiştirmesidir. Scp dosya [kullanıcı_adı@] uzak_sunucu:/kopyalanacak/ dizin Bazı anahtarlar: -p uzak sisteme kopyalanan dosyaların erişim zamanı, izin ve sahip bilgilerini koruması sağlar. -r tekrarlı işlem yaparak tüm dizinin uzak sisteme kopyalanmasını sağlar. SFTP Ağ üzerindeki birmakinadan değer makinaya dosya transferi yapmak için kullanılan sftp komutu interaktif modda ftp istemcisi gibi çalışır. sftp komutunun temel kullanımı aşağıdaki gibidir: sftp uzak_sunucu
SSH Servisinin Yönetilmesi SSH servisinin başlatılması için script start, durdurulması için stop, durumunun öğrenilmesi için status parametreleri ile çağırılmalıdır. [root@localhost~]# /etc/rc.d/init.d/sshd Usage: /etc/rc.d/init.dsshd {start|stop|restart|reload|condrestart|status} [root@localhost~]# /etc/rc.d/init.d/sshd status sshd (pid 12375 10981 10275) is running…
SSH Servisi Uygulaması • Makinenizde arkadas-isim_sinif kullanıcısı açın ve şifresini password olarak belirleyin • SSH servisinizin sadece SSH2 protokolü ile çalışmasını sağlayınız. • Root kullanıcısının SSH servisi ile sisteme bağlanmasını engelleyiniz • Makinanızdaki ssh servisini, arkadas-isim _sınıf kullanıcısının sadece tek bir makine üstünden bağlanacağı şekilde ayarlayınız • Arkadaşınızın makinesine ssh ile oturum açmadan /etc/passwd dosyasının içeriğini cat komutu ile gösteriniz • Kendi makinenizde bulunan bir dosyayı uzaktaki ev dizininize kopyalayınız • Uzaktaki ev dizininizdeki dosyayı kendi makinanıza kopyalayınız • SSH sunucusunda Genel Anahtar ile kimlik doğrulamalı yapabilmek için gerekli işlemleri yapınız ve test ediniz (Passphrase olarak pktest veriniz)