Masaüstü Linuxunu Güvenli hale getirmek için...

Masa üstü Linux’umu nasıl güvenli hale getiririm? Gerek sunucu sistemi gerekse masa-üstü kişisel bilgisayarımız olarak linux , her geçen gün kullanıcı sayısını artırmaktadır. Buna paralel olarak linux çalışan sistemler, kötü niyetli kişilerin daha belirgin bir hedefi haline gelmektedir. Şu anda mutlu şekilde çalışmamıza izin veren linux`umuz, eğer gerekli önlemleri almazsak farkında bile olmadan başımızı ciddi belaya sokabilir. Bu belgede linux`a yeni başlayanlar ve orta derecede linux bilenler için birtakım güvenlik önlemlerinin nasıl alınacağını anlatmaya çalıştık. Bu önlemlerin bir kısmı tek aşamada ve basit bir şekilde yapılabileceği gibi bir kısmı da periyodik olarak ve özen gösterilerek yapılmalıdır. Belgemizin kronolojik bir sıra takip etmesi açısından konuya ilk olarak kurulum aşamasından başlamak istiyoruz. Temelde bilgisayarımızın (bilgisayar kelimesini aslında kişisel bilgisayar yerine kullanıyoruz. Sunucu sistemlerde güvenlik konusu çok daha boyutlu ve biraz daha karmaşık yapıdadır) güvenliğini 3 değişik aşamada gerçekleştirebiliriz: - Kurulum aşamasında - Kurulumdan hemen sonra - Ve kullanırken Temiz Kurulum: Eğer linux kuracağınız bilgisayarınızda daha önce kurulu olan herhangi bir linux sürümü varsa, sizin açınızdan tavsiye edilen edilen en güvenli kurulum , "disk" e "format" atarak yapacağınız bir kurulumdur. Bu şekilde "disk" inizi sıfırlamış olup temiz bir kuruluma başlayabilirsiniz. Güvenlik Seviyesi: Bazı Linux sürümleri (örn: Mandrake 8.1) kurulum aşamasında bilgisayarımızı hangi güvenlik seviyesinde kuracağımızı sorar. Eğer kuracağımız sistem kritik bir iş yapacaksa veya önemli bilgiler barındıracaksa yüksek güvenlikte kurmamızda fayda vardır. Bu şekilde kurulum seçtiğimizde bazı güvenlik araçları kurulum aşamasında seçili hale gelecek ve bazı güvenlik ayarlarını kurulum programı otomatik olarak yapacaktir. Fakat, en yüksek seviyede kurulan bir sistem, herhangi bir saldırıda yapılan fakat normalde de oluşabilen bazı işlemlerde uyarı mesajı vereceğinden sizi gereksiz yere üzebilir. Bu nedenle kişisel kullanım için orta seviyede bir güvenlik ayarı yeterli olacaktir. Disk Bölme: İlk defa bir işletim sistemi kuracak birisi, "disk" üstünde tek bir bölmenin yeterli olacağını düşünerek tüm sistemini bu bölmeye kurar. Linux"umuzun çalışması açısından fazla bir problem teşkil etmiyecek olan bu kurulum, hiç beklemediğimiz bir anda veri kaybımıza neden olabilir. Yoğun istekte bulunarak herhangi bir sunucu programımızın planladığımızdan daha fazla "log" almasına ve tek olan "disk" bölmesini doldurmasına neden olabilecek kötü niyetli bir arkadaşımız, böylelikle o esnada başka bir program tarafından "disk" e yazılması gereken ve bize çok gerekli olan herhangi bir bilginin disk dolu olduğu için kaybolmasına neden olabilir. Bu nedenledir ki "disk" bölme aşamasında a) Sistem dosyalarını koyacağımız kök bölmesi (/) b) Çeşitli programların "log" larının yazıldığı, "mail" sunucusu çalışıyorsa, gelen mesajların yazıldığı, ve yazıcı dosyala- rının gönderildiği bir bölme (/var) c) Eğer sistemimizde bizden başka kullanıcıların da çalışmasını istiyorsak, onların programlarının çıktılarının yazıldığı bir bölme (/home) d) Eğer önemli belgelerimiz varsa ve sistemi tekrar kurmak gerektiğinde bu belgeleri başka bir yere taşımak istemiyorsak bunları koyacağımız başka bir bölme (/backup) şeklinde "disk" bölmeleri açmamız, hiç beklemediğimiz bir anda hayatımızı çok kolay bir hale getirebilir. Az Paket Seçimi: Kurulum aşamasında bizim işimizi halledecek ve yakın bir zamanda kullanmayı planladığımız paketleri seçmek güvenlik açısından önemlidir . Çünkü her geçen gün bir programın açığı bulunmakta ve yükleyeceğimiz her bir paket o anda sağlam olsa dahi potansiyel olarak güvenlik tehlikesi oluşturmaktadır. Yamaların Atılması: Daha önce bahsedildiği gibi kuracağınız sürümün bazi paketlerinin güvenlik açığı bulunabilir. Sürümünüzü öğrenen kötü niyetli arkadaşımız kullandığınız delik programın açığını kullanarak başınıza dertler açabilir . Bu nedenle kurulum yaptıktan sonra sürümünüze göre linux`unuza yamaları atmakta her zaman fayda vardır. Bunu yapmak için Mandrake ve RedHat`lerde "rpm" komutunu, bu işi otomatik olarak yapmak istiyorsanız Mandrake"de "MandrakeUpdate", RedHat`te "autorpm" komutunu kullanabilirsiniz. Gereksiz Servislerin Kapatılması: Linux`umuzu kurup, yamalarını atıp tekrar sistemimizi başlattığımızda artık bilgisayarımızın açık kapılarını kapatma zamanı gelmiştir. Yabancı insanların bilgisayarımıza ulaşabileceği en temel yollardan birisi çalışan sunucu programlar üzerindendir. Bu nedenle sizin işinize yaramayan sunucu programların sisteminizde çalışmasına izin vermeyin. Kişisel bir masa-üstü linux`da sadece "sshd" sunucu programının çalışması yeterlidir. Sunucu programları genelde 3 değişik şekilde çalıştırılır: 1- Sunucu programın ismini yazarak çaliştirma: Bu tip çalıştırma tamamen insiyatifinizde olan bir çalıştırma şeklidir. Genelde linux`unuza daha sonra kurduğunuz ve belirli zamanlarda ihtiyaç duyduğunüz sunucu programlarını çalıştırırken bu yolu izlersiniz. Eğer bu şekilde çalıştırdığınız sunucu programına ihtiyacınız yoksa "ps -ef | grep sunucu_program_ismi" komutu ile "process id" sini öğrenip, "kill process_id" komutu ile bu sunucu proğramı öldürebilirsiniz. Eğer hala size direniyorsa "kill -9 process_id" komutunu en son çare olarak düşünebilirsiniz. 2- Açılırken Otomatik Olarak Çalıştırılan Sunucu Programları: Başlangıçta çalışacak programlar ".rc" betikleri (script) ile belirlenir. Linux`unuz açıldıktan sonra KDE ya da GNOME gibi grafiksel arabirim otomatik olarak çalıştırılıyorsa çalışma-düzeyiniz 5 demektir ve başlangıç betikleriniz /etc /rc.d/rc5.d dizini altında bulunur. Başlangıçta çalıştırılan betiklerin başlarında "S" vardır. Eğer bu betiğin çalışmasını istemiyorsanız isminin baş harfini "S" yerine "s" yapın. "K" ile başlayan betikler çalışan servisleri öldürmek için kullanılır. İlk harften sonra gelen numaralar ise bu betiklerin çalıştırılma sıralarını belirler (küçükler daha önce çalıştırılır). Aşağıda bu betiklerin bir kısmını ve açıklamalarını göreceksiniz: S05apmd (Buna sadece dizüstü bilgisayarlarda ihtiyaç duyarsınız) S10xntpd (Network time protocol) S11portmap (eğer NIS veya NFS gibi RPC servisleri çalıştırıyorsanız gerekli) S15sound (Ses kartının ayarlarını kaydeder) S15netfs (Bu nfs istemcisidir, bir nfs sunucusundan dosy-sistemlerini mount etmede kullanılır) S20rstatd ("r" ile başlayan servisleri çalıştırırken dikkatli olun, uzaktaki kullanıcılara çok fazla bilgi sağlarlar) S20rusersd S20rwhod S20rwalld S20bootparamd (Diskleri olmayan istemciler içindir, genelde bu zayıflık içeren servise ihtiyaç duymazsınız) S25squid (Proxy sunucusu) S34yppasswdd (Eğer bir NIS sunucusu iseniz gerekli, bu servis pek çok zayıflık içeebiliyor) S35ypserv (Eğer bir NIS sunucusu iseniz gerekli, bu servis pek çok zayıflık içeebiliyor) S35dhcpd (Dhcp sunucusu servisini çalıştırır) S40atd (cron`a benzer olan at servisi içindir, her sistem ihtiyaç duymaz) S45pcmcia (Buna sadece dizüstü bilgisayarlarda ihtiyaç duyarsınız) S50snmpd (SNMP daemon, uzaktaki kullanıcılara sisteminiz hakkında detaylı bilgiler verebilir) S55named (DNS sunucusu. Eğer DNS kuruyorsanız BIND`ın en son sürümüne güncelleyin, http://www.isc.org/bind.html) S55routed (RIP, buna GERÇEKTEN ihtiyacınız yoksa çalıştırmayın) S60lpd (Yazıcı servisleri) S60mars-nwe (Netware dosya ve yazıcı sunucusu) S60nfs (NFS sunucusu için kullanılıyor, ihtiyacınız yoksa çalıştırmayın) S72amd (AutoMount daemon, uzaktaki dosya sistemlerini mount etmede kullanılıyor) S75gated (OSPF gibi diğer yönlendirme protokollerini çalıştırmak için kullanılır) S80sendmail (Bu script`i kapatsanız da hala posta gönderebilirsiniz fakat alamazsınız veya relay yapamazsınız) S85httpd (Apache web sunucusu, en son srümüne güncelleyin, http://www.apache.org) S87ypbind (Eğer bir NIS istemcisi iseniz gerekli) S90xfs (X font sunucusu) S95innd (Haber (News) sunucusu) S99linuxconf (Bir browser ile Linux sistemleri uzaktan konfigür etmede kullanılıyor, her siyahşapkalının rüyası :) ) Eğer başlangıç programlarını yukarda açıklanan şekilde değiştirmek zorunuza gidiyorsa bunun başka yolları da vardır. Çoğu dağıtımlarda bulabileceğiniz "chkconfig", Mandrake`de "/usr/sbin/setuptool", RedHad`ta "/usr/bin/setup" yapılandırma programları ile istediğiniz başlangıç betiklerini açıp ya da kapatabilirsiniz. Bilgisayarınız açıldıktan sonra hangi sunucu programların çalıştığınız öğrenmek için "netstat -an | grep -i listen" komutundan faydalanabilirsiniz. 3- Süper Sunucu (inetd/xinetd) Yardımı ile: Bilgisayarınızda birden fazla sunucunun aynı anda çalışarak istek gelmesini beklemesi, hiç kimse o anda servis almıyorsa dahi sistem kaynağımızı tüketen bir olaydır. Bu yüzden birçok sunucu yerine bir sunucu çalışır (inetd) ve gelen isteği bazı güvenlik kontrollerinden geçmesi için "tcpd" sunucusuna devreder. Bu şekilde birçok sunucu program merkezi bir yapılandırma dosyasından (/etc/inetd.conf) kontrol edilebildiği gibi aynı zamanda bilgisayarımız daha az kaynak tüketerek çalışmış olur. Tipik bir "/etc/inetd.conf" dosyasının içeriğine bakalım: ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -L -i -o telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd #smtp stream tcp nowait root /usr/bin/smtpd smtpd #nntp stream tcp nowait root /usr/sbin/tcpd in.nntpd Eğer "inetd" nin bir sunucuya istek geldiğinde ilgili sunucu programını çalıştırmasını istemiyorsanız, sunucu programın olduğu satırın başına "#" koymanız yeterli olacaktır. "Inetd" nin, gelen istekleri bazı kontrollerden geçirdiğini belirt- miştik. "Inetd.conf" dosyasının 6. sütununda görülen "/usr/sbin/tcpd" programı bu kontrolleri yapan bir sunucudur. "Ftpd" sunucusuna gelen isteği ilk önce "inetd" sunucusu alır ve yapılandırma dosyasındaki "ftp" satırının başında "#" yoksa bu isteği "tcpd" ye yönlendirir. Ger- ekli kontrolleri yapan "tcpd" bu kontrollerden geçen isteği, "in.ftpd" programını yukarıda gösterilen parametrelerle çalıştırarak devreder. "Tcpd" sunucusu bu kontrolleri 2 yapılandırma dosyasına bakarak yapar. "hosts.allow" ve "hosts.deny". İçeriklerine bakacak olursak: /etc/hosts.deny: ALL: ALL : spawn (/usr/sbin/safe_finger -l @%h > /var/log/denied) & /etc/hosts.allow: in.telnetd: 192.168.1.0/255.255.255.0 : banners /etc/bannerfile :ALLOW in.ftpd: 192.168.1.30 :ALLOW Linux ilk kurulduğunda bu yapılandırma dosyaları boş gelir. Yapılandırma yaparken: 1- Alan adları yerine IP adresleri kullanın 2- İlk önce bütün istekleri "hosts.deny" dosyasında reddedin. Daha sonra izin vereceklerinizi "hosts.allow" dosyasının içerisine yazın. Güvenli Parola Seçimi: Linux`unuzda herhangi bir kullanıcı açarken şifresini sözlüklerde bulunmayan kelimeler yapın. Hatta şifrenin içindeki bazı karakterleri rakam (1,5,2 gibi) bazılarını da rakam ve harf dışıkdaki karakterlerden (@ , /, -) yapın ki, kötü niyetli arkadaş sizin "encrypted" şifrenizi eline geçirdiğinde herhangi bir şifre-kıran program ile kolayca kıramasın. Ayrıca seçtiğiniz şifreleri periyodik aralıklarla değiştirin. Root Hakları ile Çalışan Programların Tespiti ve Kontrolü: Unix ve Linux sistemlerde bazı programlar vardır ki bunların root hakları ile çalışması gerekir (örn: ping, mount gibi). Ama sisteminize sizden habersiz giren kişi kendi istediği herhangi bir programı da root hakları ile çalıştırmak isteyebilir. Bunu yapabilmek için "setuid" ve "setgid" programlarından faydalanabilir. Bu tür programlar çalıştırıldıklarında program sahibinin haklarıyla çalışır. Bu nedenle, Linux`unuzda hangi "setuid" programların root hakları ile çalıştığını tespit edin ve süphelendiğiniz programlardan bu hakkı kaldırın. Bunun için find / -perm +4000 -exec ls -l `{}` `;` komutunu kullanabilirsiniz. Uzaktan Erişimin Yapılandırılması: Linux`unuza erişimi iki dosya yardımıyla yapılandırabilirsiniz. "/etc/securetty", dosyasında root kullanıcısının sisteminize hangi terminallerden bağlanabileceğini belirtirsiniz. Eğer bu dosyaya sadece "ttyX" şeklinde terminaller yazarsanız, root kullanıcısı bilgisayarınıza uzaktan erişemez. Sadece fiziksel olarak makinanızın önünden bağlanabilir. (Tabi uzaktan başka kullanıcı ile bağlanıp, root kullanıcısına "su" yapabilir). "/etc/login.access" (Mandrake`de /etc/security/access.conf) dosyası yardımı ile daha esnek bir yapılandırma yapabilirsiniz. Bu dosyadaki kurallar yardımıyla hangi kullanıcının nerden bağlanabileceğini yapılandırabilirsiniz. Her kural, tek bir satırda 3 bölmeden oluşur hak : kullanıcı(lar) : bağlantı_noktası "hak" kısmının + veya - oluşuna göre "kullanıcıya" "bağlantı_noktası" ndan giriş izni verilir. "kullanıcı(lar)" kısmı bu kuralın hangi kullanıcı(lar) veya gruba uygulanacağını gösterir. Üçüncü kısım ise bağlantının kaynağını gösterir ("tty" isimleri, IP adresleri gibi). Örnek verecek olursak: # # /etc/login.access - restrict logins # -:ALL EXCEPT wheel : console # -:wheel : ALL EXCEPT LOCAL # -:httpd ftpd : ALL # # all other accounts are allowed to login # Bu dosyaya göre ilk kural, sadece "wheel" grubundaki kullanıcıların "console" dan bilgisayara erişebileceğini belirtiyor. İkinci kural "wheel" grubundaki kullanıcıların "local" olmayan bilgisayarlardan bağlantı yapamıyacağını söylüyor. Üçüncü kural ise "httpd" ve "ftpd" kullanıcıların hiçbir şekilde bağlantı yapamıyacağını belirtiyor. Eğer herhangi bir kullanıcı herhangi bir yerden bağlanmaya çalışırken bu dosyadaki herhangi bir kurala uymazsa, otomatik olarak bağlantı hakkı verilir. Sistem Kaynaklarının Paylaştırılması ve Sınırlandırılması: Bilindiği üzre "harddisk" gibi "memory" gibi bilgisayarımızın sınırlı kaynakları vardır. Eğer bu kaynakları kullanıcılara sınırsız açarsak, kötü niyetli arkadaşımız istediği bir anda (ki bu genelde çok kritik bir an olur) kaynakların hepsini tüketerek sistemimizi çalışamaz durumda bırakabilir. Hangi kullanıcının kaynaklar üzerinde ne kadar hakkı olduğunu "ulimit" komutu ile görebilirsiniz. LILO Parolası: İnsanlar bazen evi için tüm güvenlik önlemlerini alırlar. Değerli eşyalarını kilitli yerlerde saklarlar, tüm pencerelerini kapalı tutarlar, evde bekçi köpeği beslerler fakat evin ön kapısını bazen açık unutabilirler. Bilgisayar güvenliği dediğimizde de tüm önlemleri alırız fakat biz farkında olmadan bilgisayarımıza fiziksel olarak erişecek kişiyi bazen hiç düşünmeyiz. Bu nedenle bilgisayarımızın açılması için bazı parolalar koymamız şarttır. Bunlardan bir tanesi BIOS parolasıdır. Bilgisayar üzerinde çalışan işletim sisteminden bağımsız, anakart üzerindeki yongalarda tutulan BIOS parolası, "jumper" ayarları ve anakart pili ile oynanarak sistem üzerinden silinebilir. BIOS parolasını bir şekilde atlatan arkadaşımızı (eğer bilgisayarımıza fiziksel olarak erişip bunu yapabilmişse artık arkadaşımız değildir kendisi) durdurmak istiyorsak, işletim sistemimizin yüklenebilmesi için de parola koyabiliriz. Eğer sisteminiz LILO ile açılıyorsa, LILO`nun başlatacağı herhangi bir işletim sistemi için parola koymak mümkündür. Bunun için "/etc/lilo.conf" dosyasının başına password= your_password optional satırlarını ekleyiniz ve parola SORULMAYACAK işletim sistemi bloğunun altına restricted satırı ekleyeniz. Bundan sonra LILO, "/etc/lilo.conf" dosyası içindeki bloğunun içinde restricted yazmayan her işletim sistemi için parola soracaktir. "Log" ların Kontrol Edilmesi: Linux "log" larını "/var/log" dizini altına depolar. Sisteminizde kontrolünüz dışında birşeylerin gittiğini anlamak için burdaki dosyalar periyodik olarak bakmanızda fayda vardır. Mümkünse loglar üzerinde çalışan bir analiz programı yardımıyla bu işi otomatik hale getirmeniz de mümkün. Bilgisayarınıza Uzaktan Güvenli Bağlantı: Uzaktan bağlantı dediğimizde çoğumuzun aklına "telnet" ve "ftp" gelir. Bu programlar internetle tanıştığımızdan beri yardımımıza koşmakta ve her işimizi görmektedir. Peki bu programların güvenli olduğunu hiç düşündük mü? Sunucu sistemle istemci arasındaki tüm veri aktarımını (kullanıcı ismi ve parola da dahil) şifrelenmemiş düz metin halinde yapan programlara ne kadar güvenebilirsiniz? Evet "telnet" ve "ftp" den bahsediyoruz. Ağ üzerinde iyi bir yere konuşlanmış kötü niyetli arkadaşımız, internetten kolayca bulacağı bir ağ dinleyen program ile şifrelerinizi toplayabilir. Bu nedenle bu iki programın yerine "ssh" kullanmanızı tavsiye ediyoruz. "Sshd" çalışan herhangi bir sunucu sisteme "ssh" ve "sftp" sayesinde güvenli şekilde bağlanabilir (parolanız şifrelenmiş şekilde iletilir), "telnet" ve "ftp" ile yaptığınız tüm işleri rahatlıkla yapabilirsiniz. Sunucu Programların ve Diğer Programların Çalıştırılması: Eğer herhangi bir sunucu program çalıştıracaksanız, mümkünse bu programı root olarak çalıştırmayın. Root, sistem üzerinde en geniş yetkiye sahip olan (sistemi tamamen yoketmek de buna dahil) kullanıcı olduğundan, root haklarıyla çalışan bir sunucu program kötü amaçlı yönlendirilerek sisteminizde onarılmaz hatalara yol açabilir. Bu nedenle, bu tür programları mümkünse hakları en az kullanıcı ile çalıştırınız. Ahmet ÖZTÜRK ve Mustafa ATAKAN ODTU Bilgi İşlem Daire Başkanlığı Internet Teknolojileri Güvenliği

Döküman Arama

Başlık :

Kapat