Linux, kararli cekirdegi, ag yazilimlarinin cesitliligi ve kalitesi, performans/maliyet egrisindeki konumu nedeni ile günümüzün en cok tercih edilen ag isletim sistemlerinden olmustur. Disaridan ve iceriden gelebilecek tehlikelere karsi gerekli önlemler alinmis bir Linux kurulu makine yillarca hic sorun cikartmadan calisabilmesine ragmen, her zaman icin bunun aksi de mümkündür. Güvenlik ile ilgilenen herkesin bilecegi gibi kesinlikle güvenli denilecek bir sistem tasarlanmasi mümkün degildir. Özellikle Internet’ in yayginlasmasi ve kurumlarin ic aglarini global aga baglamasi sonucunda tehlike daha da artmistir. Bu aydan itibaren Linux sunucu ve istemci bilgisayarlarda güvenligi artirmak icin bazi faydali bilgiler vermeye calisacagiz.

Güvenli bir isletim sistemi
Güvenlik, ciddiyet isteyen bir istir. Tasarimina ilk asamada yani, sunucunun kurulumundan önce baslanmasi gereklidir. Bilgisayarin ne amacli kullanilacagi bir cizelge üzerinde belirlenmeli ve temel islevi disinda hicbir yazilimin makine üzerinde bulunmasina izin verilmemelidir. Unutmamaliyiz ki, hatasiz bir program yoktur. Makine üzerinde ne kadar az program bulunursa, hatalardan etkilenme riskimiz de ayni derecede azalir.

Eger sunucumuz üzerinde cok önemli bilgi bulunduruyorsak RAID kontrol kartlari bulunmasi kacinilmazdir. Ayrica yazilimin her ihtimale karsi düzenli olarak yedeklenmesi ve yedeklenmenin de mümkünse ayri bir optik veya manyetik medya üzerine yapilmasi tercih edilmelidir.

Güvenli bir Linux sistemin kurulumu
Linux kurulumunda deneyimli bir kullanici, her Linux sürümünün kurulum programinda bulunan tipik sunucu veya istemci seceneklerinden birisini tercih etmemelidir. Eger bilgisayarinizda tam bir hakimiyet kurmak ve üzerinde bulunan her yazilimin varligindan haberdar olmak istiyorsaniz kurulacak bütün bilesenleri sizin secmeniz gereklidir.

Kurulum sirasinda /var, /usr, /home dizinlerini ayri disklere baglamak genelde dogru bir yaklasimdir. Bu sayede diskin yedeginin alinmasi kolaylasmakta ve disklerden birinde olusacak bir hata sonucunda kaybedilen verinin minimuma indirilmesi saglanacaktir.

Eger sunucuda maksimum güvenlik gerekli ise, Xwindows bilesenlerinin kurulmamasi dogru bir karar olacaktir. Xwindows sistemi, bir istemci makinede islemleri kolaylastirmasina ragmen, cok büyük kod yapisi ve kodunda bulunmasi muhtemel onlarca hatadan dolayi cok büyük bir risk tasimaktadir.

Elinizdeki Linux sürümünü cok iyi tanimali, eger ihtiyaciniz olan sunucu yazilimlar bu sürüm ile birlikte geliyorsa onlari sisteminize kurmadan önce versiyonlari hakkinda ayrintili bilgi edinmelisiniz. Örnek vermek gerekirse: Red Hat Linux 6.2 isletim sistemi kurulacaksa, bu sürüm ile birlikte gelen FTP sunucu paketi olan wu-ftpd-2.6.0 paketinde bulunan bazi güvenlik aciklari ve bunlardan faydalanan exploitler nedeni ile yeni kurdugunuz Linux sunucu birkac dakika icinde kötü niyetli bir kisi tarafindan ele gecirilebilir. Tavsiyemiz, az önce hazirlamanizi tavsiye ettigimiz sunucunun görevi baslikli listenize sizin icin gerekli olacak yazilimlar listesini de ekleyerek sirasi ile bu yazilimlarin Internet’teki ana sayfalarina göz atmanizdir. Örnegin az önce söz ettigimiz Red Hat 6.2′ deki güvenlik bosluguna karsi wu- ftpd-2.6.1 sürümü kullanilmasinin gerekliligi, sitenin ana sayfasinda önemle duyurulmaktadir.

simdi, Linux sunucularda yaygin olarak kullanilan bazi ag servisleri ve bunlar hakkinda en güncel bilgilerin bulundugu Internet sitelerini listeleyelim.

Paketin Adi Temel Görevi Web Adresi Wu-FTPD FTP Sunucu WU-FTPD Development Group Apache Web Sunucu Welcome! – The Apache Software Foundation Bind DNS Sunucu ISC BIND qpopper POP3 Sunucu Please Update Your Bookmark Cyrus IMAP Server IMAP Sunucu Project Cyrus Sendmail MTA Yazilimi Sendmail.org – Sendmail Home

Yukaridaki web sitelerini ziyaret ederken, elinizdeki Linux sürümündeki yazilimlarin versiyonlarini kontrol ettiginizde büyük ihtimalle en son sürüme sahip olmadiginizi göreceksiniz. Bu asamada en dogru hareket, ilgili paketin tar.gz uzantili kaynak kodunu sunucu makineye kopyalayip, kodu derlemektir. Pek cogumuza zahmetli gelen kod derlemeye basvurmamizin nedeni, yazilimlarin kaynak kod olarak dagitilmasi ile rpm veya deb paketi olarak dagitilmasina baslanmasi arasinda gecen sürede sunucumuzun tehdit edilmesini istemememizdir.

Güvenligi maksimize etmek icin bir diger önemli nokta da makinede C, C++ derleyici bulundurulmamasidir. Eger ileride bir gün gerekirse gecici olarak kurulmasi ve ardindan tekrar kaldirilmasi dogru olacaktir. Bunun nedeni, makineye erisen kullanicilarin isletim sistemine zarar verebilecek bazi kodlari derlemesini engellemektir. Ayrica, cekirdek (kernel) kaynak kodunun da sistemde bulunmasi bazi tehlikeler ortaya cikarabilir. Bunun nedeni ise bazi alt seviye güvenlik kirici programlarin kernel’ daki C++ baslik dosyalarini kullanarak sistemde root kullanici hakkina sahip olmayi basarmasidir. Bunu engellemek icin en iyi yol, Linux cekirdeginin kaynak kodunun sistemde bulunmamasidir.

Kurulduktan sonra silinecek bilesenler.
Linux sisteminizi kurduktan sonra ilk yapilmasi gereken, bazi tehlikeli paketlerin sistemde bulunup bulunmadiklarinin kontrolü olmalidir. Tipik bir sunucuda asagida listelenen programlarin bulunmasi ya gereksizdir, ya da bir güvenlik boslugu teskil etmektedir. Bu nedenle özellikle gerekli degilse silinmeleri daha akillica olacaktir.

git ve mc
rsh, rlogin, rcp, rdate, rdist, rusers, rwall, rwho
ntalk, talk
telnet sunucu
Xwindows ile ilgili her türlü program
KDE, QT kütüphaneleri
C, C++, tk, derleyici ve yorumlayicilari
Snmpd yazilimi
NFS ve NIS ile ilgili her sey.
routed
tftp
Grafik ile alakali her sey.
piranha, linuxconf
at
Multimedia ile ilgili her sey
Pump
mt-st
eject
mailcap
apmd
kernel-pcmcia-cs
getty_ps
isapnptools
setserial
kudzu
gd
pciutils
rmt
Yukaridaki liste ile paranoyaklik boyutuna ulasmis olabiliriz fakat hepimiz biliyoruz ki, güvenlik ciddi derecede paranoyaklik gerektirir.
Ayrica yukaridaki listede yer almayan ve makinenize kuracaginizi varsaydigimiz Apache, wu- ftpd, bind, sendmail gibi programlari da simdi sisteminizden kaldirmaniz ve kaynak kodlarindan derlemeniz tavsiye edilir.

Kullanici hesaplari
Bir bilgisayar sisteminin kirilmasinda izlenen yollarin büyük cogunlugu, makine üzerinde gecerli bir kullanici hesabina sahip olunmasindan gecer. Güvenlik aciklarindan faydalanmayi amaclayan kötü niyetli kisiler bu sunucu üzerinde bulunan hesaplardan bir tanesini eline gecirdiginde isi büyük ölcüde kolaylasmaktadir. Bu nedenle ana makine üzerindeki bütün sifrelerin en az root kullanicinin sifresi kadar iyi korunmasi gereklidir.

Sistemde kullanilan sifrelerin genel özelliklerini kisitlamak mümkündür. Örnegin sistemdeki bütün sifrelerin minimum 5 karakter ile kisitli olmasi saglanabilir. Bunun icin /etc/login.defs dosyasina PASS_MIN_LEN n gibi bir ibare girilmesi gereklidir. Buradaki n sayisi sifrelerin minimum uzunlugunu belirtmektedir.

cok sik yapilan hatalardan bir tanesi de bir kullanicinin sisteme baglanmasi ve uzun süre bagli kalmasidir. Bunu engellemek icin de /etc/profiles dosyasi icerisine TMOUT =7200 yazilmasi bagli olan kullanicinin hicbir islem yapmadan gecirdigi 7200 saniye sonunda otomatikman sistemden atilmasini saglar.

/etc/exports dosyasi
Sisteminizde NFS, NIS gibi bir sistem kullanilmiyorsa, ki kullanilmasi pek tavsiye edilmez, /etc/exports dosyasi icersinde herhangi bir sey olmasi gerekli degildir. Bu dosya NFS sunucular icin paylastirilacak dizinleri belirtir. Eger NFS kullanilacaksa buradaki paylasim listesi asagidakine benzer bir yapida olmalidir.

/paylastirilacak/dizin1 yetkili.makine.com.tr(ro,root_squash)
/paylastirilacak/dizin2 192.168.10.4(ro,root_squash)

Yukaridaki dosyada ro secenegi, bu paylasimin salt okunur oldugunu, root_squash secenegi ise root kullanici yazma haklarina sahip herhangi bir kosulun olamayacagi anlamina gelir.

/etc/security/console.apps/ dizini
Red Hat Linux sistemlerde normal kullanicilarin makineyi kapatmak, yeniden acmak vb… özel haklara sahip olmalarini saglayan bazi dosyalar bulunur. Bu dosyalar, /etc/security/console.apps dizininde bulunur. Buradaki bazi dosyalari silmek bizi beklenmedik sürprizlere karsi koruyacaktir. Asagidaki komutlar ile gereksiz bazi dosyalari temizleyelim.

rm –f /etc/security/console.apps/halt
rm –f /etc/security/console.apps/poweroff
rm –f /etc/security/console.apps/reboot
rm –f /etc/security/console.apps/shutdown

Eger sistemde root kullanici harici kimsenin Xwindows sistemini kullanmamasini istiyorsak yine rm –f /etc/security/console.apps/ dizini icindeki xserver dosyasini da silmemiz yeterli olacaktir.

/etc/pam.d/ dizini
Bir diger güvenlik artirimi da pam.d sisteminde saglanabilir. Red Hat sistemlerde /etc/pam.d dizininde bulunan betikler, yazilimlarin kullanicilari nasil yetkilendirecegini düzenler. Asagidaki komutlari verdiginiz takdirde kullanicilar tehlikeli sayilabilecek bazi konsol haklarindan mahrum edileceklerdir.
cd /etc/pam.d for i in * ; do sed ‘/[^#].*pam_console.so/s/^/#/’ <$i> temp && mv temp $i done

/etc/inetd.conf dosyasi
Bu dosya Linux makinenizin sunucu yazilimlarinin pek cogunu kontrol eder. Arka planda calisan inetd adli yazilim, bu dosyada belirtilen portlarda gelen istekleri dinleyerek bir istek karsisinda yine bu dosyada belirtilen programin bir kopyasini calistirir. Bu sekilde hic kullanilmayan ya da az kullanilan bazi sunucu yazilimlarin bellekte gereksiz yer kaplamalari engellenmis olur.

Dosyanin temel yapisi su sekildedir.

ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l –a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

Bu dosya, sisteminizin güvenligi icin en önemli dosyalardandir. Gerekli olmayan her seyi kapatmalisiniz. Örnegin makine ftp sunucu olarak kullanilmayacak ise yapilmasi gereken en dogru hareket ilgili satirin basina bir diyez (#) isareti koyarak bu servisi aktif halden kaldirmak olacaktir. Elbette ki bu servis kullanilmiyorsa, ayni zamanda makineden silmek dogru bir harekettir. Eger bir servisin ise yarayip yaramadigi hakkinda tereddüde düsüyorsaniz, o servisi kaldirin. Büyük ihtimalle isinize yaramayacaktir. Burada acik birakacaginiz her bir satir size bir güvenlik boslugu olarak geri dönecektir. Örnek vermek gerekirse cok zararsiz gibi görünen “echo” servisi, bu porta gönderilen her bilgiyi aynen geri göndermekle görevlidir. Eger kötü niyetli birisi bu porta, sürekli ise yaramaz bilgi gönderen bir yazilim yazarsa, bu servis gelen sacma sapan karakterlerin hepsine birden cevap vermek isterken sistem kaynaklarinin cok önemli bir kismini tüketecektir. Ayni programin bir worm tarzinda yazildigini ve Internet üzerinde binlerce makineden ayni anda sacma sapan karakterler gönderildigini varsayarsaniz, sunucunuz büyük ihtimalle göcecektir.

Bir diger önemli madde ise her ihtimale karsi /etc/inetd.conf dosyasinin haklarini kontrol etmeliyiz. Bu dosyanin haklari 600 yani sadece root kullanici tarafindan okunabilir ve yazilabilir sekilde olmalidir. Bu, asagidaki komut ile saglanabilir.

chmod 600 /etc/inetd.conf

Bu dosyanin iceriginden emin olunduktan sonra, bir daha root kullanici dahil kimse tarafindan degistirilmemesi icin su komut verilmelidir.

chattr +i /etc/inetd.conf

/etc/hosts.deny dosyasi
Bu dosya, ag servislerinize ulasmaya yetkili kullanicilari kisitlamaya yarar. Genellikle bu dosya icinde herkese bütün yetkiler kisitlanir. Ardindan sisteme girmeye yetkili IP adresi veya bilgisayar adlari /etc/hosts.allow dosyasi icinde belirlenir.

Asagida standart bir /etc/hosts.deny dosyasi görünmektedir.

# Bütün erisim haklarini kapat!!!…
ALL:ALL

/etc/hosts.allow dosyasi
Bu dosya, /etc/hosts.deny dosyasinda tamamen kapattiginiz erisim haklarini bazi yetkili bilgisayarlara iade etmek icin kullanilir. Örnegin sunucu makinenize sadece trlinux.com (195.244.37.241) alan adindan ve sadece sshd adli protokol ile erisilmesini istiyorsaniz, bu dosyada asagidaki degisiklikleri yapmalisiniz.

sshd: 195.244.37.241 trlinux.com

/etc/issue ve /etc/issue.net dosyalari
Bu dosyalar, sisteminize konsoldan veya telnet yolu ile baglanmak isteyen kisilere login: belirtkecinden önce gösterilen bilgi satirlarini icerirler. Bu, genelde kisiyi kullandigi sistemin bir Linux sistem oldugunu göstermesi acisindan faydali olabilir fakat, yüksek güvenlik gerektiren sistemlerde kullanilan isletim sistemi, kullanilan cekirdek(kernel) gibi bilgilerin kötü niyetli kisilerin eline gecmesi dogru degildir. Bu nedenle /etc/inetd.conf dosyasinda telnet programini calistiran satirda in.telnetd sonuna –h parametresinin eklenmesi bu bilgilerin ekrana getirilmemesini saglar.

telnet protokolü, bir makineye uzaktan erisim amacli kullanilir ve üzerinden akan bilgiyi sifrelemeden gönderdigi icin güvenli bir makinede bulunmasi kesinlikle tavsiye edilmez. sifrelenmeden yollanan her türlü bilgi, bir sniffer yazilimi araciligi ile rahatlikla dinlenebilir. Bunu engellemek icin ssh adi verilen protokolü tercih etmelisiniz.

/etc/services
Bu dosya, bir portta baglanacak olan programa bir isim vermek amacli kullanilir. Örnegin 65000 nolu portu kullanan ve inetd araciligi ile bu portu dinleyen bir Netbus tarzi bir worm programi yazilmak istendiginde yapilmasi gereken, /etc/services dosyasinda bu porta bir isim vermek ve /etc/inetd.conf dosyasinda verilen ismi iceren ve bu porttaki istekleri isleyen bir program yazilmasi yeterlidir.

Bunu engellemek icin bu dosyada degisiklik yapmayi engelleyen su komutun verilmesi yeterlidir.

chattr +i /etc/services

/etc/securetty dosyasi
Bu dosya root kullanicinin sisteme direk login belirtecinde kullanici adi ve sifresini girerek baglanabilecegi terminal aygitlarini listeler. Bu dosya silindigi takdirde sisteme telnet ile baglanan herkes kullanici adi olarak root verebilir. Bu cok büyük bir güvenlik acigidir. Yapilmasi gereken eger bu dosya yerinde yoksa yaratilmasi ve icine “tty1″ yazilmasidir. Bu sayede root kullanici sadece bilgisayarin önünde iken ve 1 nolu sanal terminali kullanirken sisteme direk baglanabilir.

/etc/passwd ve /etc/shadow dosyalari
passwd ve shadow dosyalari birlikte, kullanici sifreleri ve hesaplari hakkinda ayrintili bilgiyi barindirir. Bu nedenle korunmasina özel önem verilmelidir. Internet’ te yer alan pek cok hack- warez sitesinde, bir Linux sistemi kirmakla ilgili dokümanda bu dosyalarin bir sekilde ele gecirilmesi ve ardindan bir brute force programi yazilimi ile bu sifrenin güclü bir bilgisayarda deneme yanilma yöntemi ile kirilmasi anlatilmaktadir. Bunun önüne gecmek gercekten cok kolaydir. Yapilmasi gereken /etc/shadow dosyasinin okuma haklarini normal kullanicilardan kaldirmak olmalidir. Bu islem su komutla gerceklestirilir.

chmod 600 /etc/shadow

Kullanicilarin su komutu ile root kullanici olmalarinin engellenmesi
su komutu herhangi bir kullanicinin root sifresini bildigi takdirde root kullanici haklarina sahip olmasini saglar. Bu cok büyük bir güvenlik riskidir, fakat engellemek mümkündür. /etc/pam.d/su dosyasinin en tepesine asagidaki satirlari ekledigimiz takdirde sadece wheel adli ön tanimli gruba üye olan kullanicilar su komutunu calistirarak root kullanici haklarina sahip olabilirler.

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

Artik sistemimizde wheel grubuna üye olmayan hicbir kullanici root haklarina sahip olamayacaktir. Wheel grubuna asagidaki komut ile kolayca umut adli bir kullanici eklenebilir.

chmod –G10 umut

Kullanicilarin CPU ve RAM kullanimlarini sinirlamak
Bu Linux’ un cok gelismis özelliklerinden bir tanesidir. Sisteme baglanan kullanicilara herhangi bir kaynak limiti verilmedigi takdirde sistemi kirmak icin özellesmis bazi programlari calistirarak sistemi mesgul etmelerine ve belki de sonucta basarili olmalarina neden olunabilir. Asagidaki satirlar /etc/security/limits.conf dosyasina eklendigi takdirde root kullanici haricindeki kullanicilar maksimum 20 tane proses acabilecek ve 5 MB bellek kullanabileceklerdir.

hard core 0
hard rss 5000
hard nproc 20

Ardindan bu özelligi aktif hale gecirmek icin kullanicilar sisteme baglanirken kullanilan /etc/pam.d/login betigine bu özelligin belirtilmesi gereklidir. Sonucta bu dosya asagidaki gibi olacaktir.

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so

Linux isletim sistemi, dogru ellerde dünyanin en güvenli isletim sistemi haline getirilebilir. Fakat, pek coklarinin düsündügü gibi bu özelliklerin pek cogu aktif olarak gelmez. Dogru amaclar icin konfigüre edilmis bir isletim sistemi yaratmak icin cok calismali ve Linux dünyasinda duyurulan güvenlik uyarilarini dikkate almalisiniz.

Be Sociable, Share!
Etiketler:, , , , , , , , , , ,
Cevap yaz

*