SlideShare a Scribd company logo
1 of 309
KALİ LİNUX HAKKINDA
HERŞEY
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
1
İçindekiler
I. Kali Nedir .............................................................3
II.Linux Shell Ortamı................................................7
III.Dosya Sistemi Temel Bilgiler ...............................38
IV. Shell Scripting .................................................57
V. Shell History.......................................................69
VI. Manuel Dosyaları............................................72
VII. Kullanıcı Yönetimi...........................................75
VIII. Ağ Yönetimi ..................................................90
IX. Kablosuz ağ yönetimi.....................................105
X. Linux bilgisayarı router haline getirme ..............121
XI. Ağ teşhis araçları...........................................126
XII. Ağ paketleri izleme araçları...........................130
XIII. Sistem boot süreci ve servis yönetimi...........135
XIV. Zamanlı İşler................................................166
XV. Log altyapısı.................................................183
XVI. IPTABLES.....................................................202
XVII. Arşivleme...................................................205
XVIII. Uygulama Kurulumu..................................209
XIX. Performans ve Kapasite İzleme ....................234
XX. Mount Etme, Dosya Sistemi ve Dosya Paylaşımları
242
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
2
XXI. Komut Satırından Dosya İndirme..................268
XXII. Editörler ve dosya izleme araçları................302
XXIII. BTRİSK Hakkında........................................308
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
3
I. Kali Nedir
Kali bir(genel amaçlıkonulardaDebianpaketleri bazalınarakoluşturulmuş)Linux dağıtımıdır,ancak
genel amaçlıolmayıpözelliklesızmatesti,adli bilişimve tersinemühendislikamaçlarıylakullanılmak
üzere özelleştirilmiştir.Bualanlailgilenenhemenherkesinmalumuolmaklabirliktebualanayeni ilgi
duyanlariçinenbaşta netleştirmekte faydagördüğümbirkonuKali içinde yeralanaraçlarınkendi
geliştiricileriolduğu,Kaliekibininbuaraçlariçinde seçtiklerini (tabilisanshaklarıbunaizinveriyorsa) Kali
dağıtımına dahil ettikleridir.Kali tümaraçlarıntekrar incelenmesi ve neredeyse sıfırdanbirsızmatesti
platformuolarakgeliştirilmişolmasınarağmenyine aynıgruptarafındangeliştirilmişolanBacktrack
dağıtımının mirasçısıdır. Kali’nin araçlaraçısından genel eğilimdenfarklılaştığıbirnoktasadece DOS,
DDOS ve anoniminterneterişimine özel araçlarıgenellikle yasal projelerdekullanılmadıklarıgerekçesiyle
dışlamışolması ve barındırmamasıdır.
Resmi sitesi https://www.kali.orgolankali dağıtımıile ilgili dokümantasyonve indirme linklerine bu
sitedenerişebilirsiniz.
Debianstandartlarınabağlıkalınarak özelleştirilmişbudağıtımın kernel seviyesinde ve güvenlikaraçları
uygulamakodlarıseviyesinde gerekligörülenpekçokirili ufaklıözelleştirme yapılmıştır.Yani herhangi
bir linux işletimsistemi alınaraküzerinearaçlarbasitbirşekilde kurulmamıştır.Çoğunluğuaçıkkaynak
kodluaraçlardanoluşangüvenlikyazılımpaketleriile ilgili bilgi ve yamalinklerinehttp://tools.kali.org
websitesindenulaşabilirsiniz.
Kali açık bir platformdur.Kali’ninkernel’ınıve Kali üzerinde kurulugüvenlikaraçlarındankaynakkodu
mevcutolanpaketlerinkaynakkodlarınıDebianuygulamaindirme araçlarıile indiripihtiyaçlarınızagöre
değiştirerektekrarderleyebilirsiniz.Bunapekihtiyacınızolmazmışgibi görünebilir,ancaközelliklesızma
testi bulgularınızınfalse pozitif olduğuiddiaedildiğindetespitinize yol açan aracın nasıl çalıştığını
anlamakisteyebilirsiniz.Bazıdurumlardadaaracı özelleştirme ihtiyacınızolabilir.Örneğinkullanıcı
tespiti açıklığınıbulanbir araç kısıtlı sayıda kullanıcıyıçekiyorduramasiz dahafazlakullanıcı tespit
etmekisteyebilirsiniz.
Bununlabirlikte doğasıitibarıylapekçoksaldırı aracı barındıran bu dağıtımın geliştirici kadrosuçokgeniş
tutulmamış,tümpaketlergeliştiricilertarafındanve de ekiptarafındanimzalanmakta,paketdağıtım
repository’leri de enazdatutulmuştur. Buaçıdan açık platformözelliği,güvenlikihtiyacınedeniyle,
kısıtlanmışgibi görülebilir.Ayrıcasource listenize diğerrepository’lerineklenmesihemgüvenlikhemde
sistemintopluolarakfonksiyonalitesininbozulmamasıiçinönerilmemektedir.Zirapek çokfarklıgüvenlik
aracının farklıkütüphane versiyonlarıkullanmasıve kurulumlarısırasındayapabilecekleri değişiklikler
birbirlerini olumsuzetkileyebilir.Kali’yitümbukurulumve birlikteçalışmauyumproblemlerinden
arındırılmış bir platformolarakdüşünebilirsiniz.Eğerstandartbirlinux dağıtımı üzerine farklıaraçlar
kurmakveyakaynakkodundanderlemekgibi birdeneyiminizolduysabusöylenenlerdahaiyi
anlaşılacaktır.Uzun sözünkısası elinizinaltındaKali olsadasıradan biryazılımın denenmesiamacıylabile
Kali’ninkullanımıönerilmemektedir.Busadece mevcutyazılımlarınçalışmasınıetkilemesiaçısındandeğil
kuracağınız yazılımın da çalışmaması riskininbulunmasındankaynaklanmaktadır.
Kali’nindiğerlinux dağıtımlarındanbellibaşlıfarklarışunlardır:
 Tekkullanıcı ve “root” kullanıcısıolarakkullanılmaküzere tasarlanmıştır.Buyaklaşımnormal
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
4
sunuculariçingüvenlikaçısındansakıncalıdır.Ancakkali’de kullanılanaraçlarınönemli birkısmı
root erişimhaklarınaihtiyaçduyurmakta ve herdefasındasudoyapmaktankurtulmakiçinbu
yaklaşımkullanılmaktadır.
 Kali genel amaçlıbirdağıtım değildirve bunedenleağservisi vermesi de beklenmez.Buyüzden
sistembaşlangıçkonfigürasyonlarıtümservislerkapalıolacakşekildedir.Elbette sizservisleri
açabilirve bunlarıher rebootişlemindensonraaktif hale gelecekşekildeayarlayabilirsiniz.
 Kali kablosuzağtestleri içinözelleştirilmişbirkernel kullanmaktadır.Yani ayrıca özel sürücüler
kurma ihtiyacıyoktur.
Kali’yi Intel ve ARMişlemci mimarileriiçin derlenmiş,ISO, VMWare ve VirtualBox imajlarıhalinde
indirebilirsiniz.Kali’ninde sağladığıimkanlarsayesinde masaüstüözelleştirilmiş,barındırdığıpaketler
sınırlanmış,kendi geliştirdiğinizscriptleriiçerenv.d.özelleştirmelerilekendiimajlarınızıda
oluşturabilirsiniz.Tabi buözelleştirmeyi yineKali’ninwebsitesindenedineceğinizbilgiler,Kali’nin
sağladığı scriptlerve bircross compilertoolchaingkullanarakARMmimarisi içinde yapabilirsiniz.
RaspberryPi gibi ARMtabanlıgömülüsistemlere Kali kurulumuiçinşulinktenfaydalanabilirsiniz:
http://blog.btrisk.com/2015/09/raspberry-pi-kali-kurulumu.html
Kali’yi liveolarakbootableISOimajıile birUSB sürücüdenveyasistemüzerinekurarakkullanabilirsiniz.
Tüm bu alternatiflerle ilgili detaylıbilgiyiKali’nindokümantasyonsitesindenbulabilirsiniz.
Kali ekibi dağıtımlarınbütünlüğükonusundaüzerine düşeni yerinegetirmişdurumda,imzaların
doğrulanmasıise kullanıcılarınüzerine düşüyor.DoğrulamaileilgiliprosedürKali’nindownloadslinkinde
dokümante edilmiş.
Kali dağıtımı OSCP sertifikasyonununhamisi olanve bireğitimşirketiolanOffensive Securityşirketi
tarafındandesteklenmektedir.KALILINUXmarkası Offensive Securityşirketine aittir.
Kali’yi öğrenmekne demektir?
Hacking’insaldırıaraçları kullanmaktanibaretolduğualgısıçokyaygındır ve Kali gibi birortam bu algıyı
güçlendirmektedir.Ancakaraçlarlaoynamak, fonksiyonalitelerineaşinaolmayaçalışmaksadece hızlıbir
girişyöntemidir.
Aslaunutmayıngerçekbirhacker,Kali gibi birplatformuoluşturabilen,teknolojininnasıl çalıştığını
merakedenve endetaylıseviyede inceleyebilen,güvenlikaraçlarıgeliştirerekgeliştirdiği testveya
saldırı metodlarınıotomatize edebilenkişidir.Çünküaraçlarbelli biramaçiçinvardırlar,amacı
anlamadanaracı geliştiremezsiniz.Hacker’ınamacıvar olanteknolojileri anlayıpbuteknolojilerdeki
mimari açıklıkları kullanmak,teknolojilerdekiyetersizkonfigürasyonlarıtestedipbunlarıkullanmakve
güvenlikkontrollerini otomatikaraçlarvasıtasıylaaşmayaçalışmaktır. Tabi sosyal mühendislikamacıyla
belli araçlargeliştirmekde yineamaçlarahizmetetmekiçinyapılmaktadır.Sadece araçlarıve kabaca ne
yaptıklarını anlamaksizi biradım öteye götürür,ancakikinci seviyeyeçıkmakistiyorsanızişletimsistemi,
işlemci mimarisi,websunucusu,veritabanısunucusugibi temelteknolojileri,ağprotokollerini öğrenmeli
ve mutlakakaynakkodusevmelisiniz.
Güvenliksektöründe karşılaştığımpekçokkişiyazılımyapmakistemediği içinbualanıseçtiğini söyler.
Gerçekşu ki yazılımı anlamayanbirkişi ancak biraraç operatörüolabilir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
5
Bu nedenlerle Kali’yi öğrenmekdemekaslındagüvenlikyetkinliği olaraksize zannedildiğikadarçokşey
katmaz.Ama işinizi biliyorsanızsize ciddizamankazandırır.Tabi Kali’ningeliştirme ekibi içinde yeralmak
istiyorsanız,ozamançok daha farklıbir boyutageçersinizki buboyutdapentestuzmanlığındandaha
çok birsistemve yazılımuzmanlığı yoluanlamındadır.Gerçekşuki iyi birhacker’ınaynı zamandaiyi bir
sistemve yazılım(ve elbette ağ) uzmanıolmasıgerekmektedir,amabuçok uzunbirsüreç
gerektirmektedir.
Bunlarlabirlikte Kali’yi etkinbiçimde kullanabilmekiçinmutlakave mutlakaenazındantemel seviyede
Linux işletimsistemikullanımve yönetimyetkinliğinesahipolmakgereklidir.Buyüzdenbumakalenin
teknikiçeriğininönemlibölümütemellinuxbilgisineyöneliktir.Evet,script kiddie(hacker
terminolojisinde araçkullanarakhavaatmayaçalışan kişilereverilenad,birdiğerdeyişlehackerergeni)
olmakiçinbile temel linux bilgisine ihtiyaçvar.
Kali’ninkurulumu
Kali’ninkurulumuile diğerlinux dağıtımlarınınkurulumuve hattaWindowskurulumuarasındapekfark
yok.Kali dağıtımı daha önce de belirttiğimizgibi ISO,VMWare ve Virtual Box imajlarıolarakelde
edilebilir.Kali ISOimajlarıaynızamandabootable,yani live olarakişletimsistemini başlatabilmeye
imkanverenimajlar.DilersenizbuimajlarıDVDveyaUSB belleğe de (WindowsdaWin32DiskImager,
linuxdaddgibi araçları kullanarak) kopyalayarakbilgisayarınızılive olarakKali Linux işletimsistemiile
başlatabilirsiniz.Live işletimsistemi demekaslındadosyasistemi bellektebulunanve yazdığınızverilerin
işletimsistemi kapandığındakaybolacağıbirişletimsistemi demek.Bunundışındanormal birişletim
sistemindenhiçbirfarkıyok.
Kali’yi diskinize yazarakkalıcıyapmakisteseydinizizleyeceğiniztemel adımlarşunlarolurdu(aynıadımlar
bir sanal makine kurulumundadageçerli):
 Diskinpartitiontablosununoluşturulması (ve diskinilksektörüneyazılması)
 Partition’ların ve üzerlerine kurulacak file system’lerininbelirlenmesi(ve işletimsisteminin
kurulacağıpartition’ınbelirlenmesi)
 Partition’lariçinfile systemformatlamaişleminingerçekleştirilmesi
 Kurulumiçinkernel imaj dosyasınınve diğerişletimsistemi uygulamave kütüphanelerinin
formatlanmışfilesystem’e yazılması
 İşletimsistemi için zamandilimi yerelleştirme,dil,klavye formatıv.b.konfigürasyonunyapılması
 İşletimsistemininbootedilmesi
Bu işlemleriçinbirerekrangörüntüsüalmayıpekanlamlıbulmadım, çünküne yaptığınızıbilmemeniz
durumundagörüntününpekbirfaydasıyok,ayrıca kurulum işlemi siziyeterince yönlendiriyor.Ekran
görüntülerinikoysamdabiryıl içinde aynı işlemleriyapanfarklıekranimajlarıylakarşılaşacağınızfarklı
bir versiyonçıkmışolacak.
Yukarıdaki işlemlerde sizinmüdahalenizi gerektirecekkısımlarınönemli oranıdiskyapılandırmasıylailgili.
Kısaca partitionve file systemkonularınınüzerindengeçelim.Ham(raw) birdisksektörve clusteradı
verilenbirimlerlebüyüklüğüifade edilentertemizbirtarlayabenzer.İşletimsisteminindiski
anlamlandırabilmesi içingerekliilkveri yapısıpartitiontablosudur.Butablodiskinilksektöründen
başlar,partition’ıntipi yine ilkbölümlerde belirtilirki işletimsistemipartitiontablosunudaiçerenveri
yapısını doğru yorumlasın.Partitiontablosudiskinhangi bölümlerininhangi partition’larolarak
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
6
tanımlandığını / bölümlendiğini,herbirpartitiontablosundahangi filesystembulunduğu(ör:FAT,
FAT32, NTFS,ext,v.d.),hangi partition’larınsistempartition’ıolduğu(yani bootable birkernel imajı
barındırdığını) v.d.bilgileri içerir.Bilgisayar(donanım) ilkaçıldığındaBIOSkodubootable cihazsırasının
üzerindengeçerek(ör:CD,USB, HDD, v.d.) içinde veri bulunanve birpartitiontablosubarındıranilk
sürücüye erişereksistempartition’ınıbulmayave bupartition’dakiişletimsistemi kernel’ınıyüklemeye
çalışır. İşletimsistemi hafızayayüklendiktensonrapartitiontablosupartition’larınyerlerinintespiti ve
içlerinde barındırdıklarıfilesystem’e göre kullanıcıyasunulmasınısağlar.Filesystemtemel olarakkendine
ayrılan partitionsınırlarıiçinde dizinve dosyahiyerarşisi ve dosyalarınişgal ettiği alanlarınadreslerini
takipetmeye yarayanveri yapılarıbarındırır. Bunlar FATgibi basitbir dosyasistemindenNTFSgibi
karmaşık birdosyasistemine kadarfarklıkurallarıolanveri yapılarıolabilir.İşte birişletimsistemini
kurarkeneğerhambir diskkullanıyorsanızönce diski yapılandırmaihtiyacınızbusebeplerden
kaynaklanmaktadır.İşletimsistemininayağakalkabilmesi ve kullanıcıyadosyalarınıyazabileceğive
okuyabileceği biralansunabilmesi içinönce diskinyapılandırılmışolmasıgereklidir.
Aynı bilgisayarüzerindebirdenfazlabootable işletimsistemi kurmakonusunaburadagirmeyeceğim,
ancak bu işlemDOSpartitiontablosundabirdenfazlapartition’ınınsistempartition’ıolarak
işaretlenmesive birloaderuygulamasıile mümkün.
Linux hakkında temel bilgi
Kali birlinux dağıtımı olmaklabirlikte Linux’uöğrenmekiçindoğrubirplatformolduğusöylenemez.
Linux hakkındatemel deneyimleri edinmekiçin Ubuntu,Debian,Mintgibi dağıtımlartercihedilebilir.
Bununlabirlikte Kali’yi etkinolarakkullanmakiçintemel linux kullanıcıve sistemyönetici bilgisine sahip
olmakgereklidir.
Linux hakkındahakimiyetinizienüstdüzeye taşımakistiyorsanızLinux FromScratch
(http://www.linuxfromscratch.org/) projesiherhalde endoğruyerlerdenbirisi olacaktır.Amabaşlangıç
olarakgenel işletimsistemi işlemlerininLinux üzerindenasıl yapıldığındanve Linux’aözel bazıtemel
bilgileri belirterekbirgirişyapabiliriz.
Kali Linux hakkındaki bundansonraki makalelerdeDebianpaketlerindenfaydalanılarakoluşturulmuş
olanKali dağıtımı hakkındadetaylıbilgiyeulaşabileceksiniz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
7
II.Linux Shell Ortamı
Shell ortamı
Linux işletimsistemleri ilebirliktemasaüstüortamlarıdageliyor,amalinux’un(vetabi Unix’in) başından
itibarenve halenengüçlükullanımpaneli shell ortamıdır.BirUnix sistemyöneticisinintümişlerini GUI
ortamlarındahalletmesiçokzordur.Bunedenle shell ortamınıiyi tanımamızlazım.
Shell nedirdersenizkısacabirkomutişleyici (commandprocessor) diyebiliriz.Shell komutları
kullanıcıdankomutsatırından alabileceği gibi birdosyadandaalabilir.Butürdosyalarascript(betik)
dosyasıdiyoruz.
Kali’de shell arayüzünüTerminal uygulamasıile başlatabiliriz.
Veyasol uygulamaçubuğununenaltındaki seçeneğetıkladıktansonrauygulamaisminiarayabiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
8
Daha önce de belirttiğimizgibi,normalde genelamaçlıLinux işletimsistemlerine ilk erişimroothaklarına
sahipolmayanbirkullanıcıile bağlanılmasıönerilir.Sebebi gayetbasitaslında,süperkullanıcıhaklarıile
ne kadar uzunsüre geçirirsenizhatayaptığınızdasisteme zararverme potansiyelinizde artar.Ancak
Kali’de özel birkullanımihtiyacımızvarve neredeysesürekli rootkullanıcıhaklarınaihtiyacımızvar.Bu
nedenle başlangıçtanitibarenrootkullanıcısıolaraksistemi kullanıyoruz.
Root kullanıcıprompt’u“#” işareti ile biter,normal kullanıcılardaise buişaret“$” işaretidir.Elbette bu
bir sistemsel kural değilve buişaretçevreseldeğişkenleraracılığıile (ör:PS1 çevresel değişkeni ile)
ayarlanabilir.Ancakbuişaretlergeleneksel olarakbuşekilde kullanılır.Çevresel değişkenkonusuna
ayrıca değineceğiz.Yukarıdaki şekildende görebileceğinizgibi shell prompt’urootolduğumuzuhem
kullanıcıadını prompt’unbaşındabelirterekhemde #işareti ile belli ediyor.
Unix ve linux işletimsistemleri üzerinde birdenfazlashell uygulamasıbulabilirsiniz,bunlaracsh(Cshell ),
Bourne shell,bash(Bourne shell’inyerini alanuygulama,aynızamandaBourne-againShell’inkısaltması),
ksh(Kornshell) örnekolarakverilebilir.Shell uygulamalarıarasındafarklarnelerdirderseniz,
fonksiyonaliteleri benzerolsadaheruygulamagibi kendilerine hasayarfarklılıklarıve kullanım
kolaylıklarıbulunmaktadır.Bazıtemel komutlarve işlemlertümshell uygulamalarındaaynıolsada
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
9
kullandığınızshell ortamınagöre shell ortamınızıayarladığınız startupscript dosyalarıfarklılaşacaktır.Bu
nedenle rutinbirshell kullanıcısıisenizve herseferinde bazıenvironmental değişkenleribelirlideğerlere
ayarlamanızgerekiyorsabubilgiye ihtiyacınızolacaktır.Ancaksıradan birkullanıcıiçinshell’lerarasındaki
farkı bilme ihtiyacıçokdüşüktür,temel linux bilgisi ileshell’inizikullanabilirsiniz.
Kali’de Terminaluygulamasınınaçtığı shell uygulamasınınne olduğunumerakederseniz“echo$0”
komutunuçalıştırarakbunu görebilirsiniz.
Bu komutlailgili olarakiki konudanbahsetmemizlazım.Birincisi “echo”komutu,adındanda
anlaşılabileceğigibi bukomutkendisineparametre olarakverilensabitdeğeri veyadeğişkenindeğerini
yazıyor.Böyle söylendiğinde kulağaçokbasitgeliyoramao kadartemel birişlevi yerine getiriyorki bu
nedenle shell script’lerinde,debugamaçlıolarak,birdosyayabirşeyyazmakiçinv.b.amaçlarlaçoksık
kullanılanbirkomuttur.İkinci konuise $0parametresi.Buparametre özel birparametredirve çalıştırılan
uygulamayaverilenilkparametrenindeğeriniiçerir.Pekaklayakıngelmese de çalıştırılanuygulamaya
verilenilkparametrebuçalıştırılanuygulamanınadıdır. Sonraki parametreler$1,$2, $3 şeklinde gider.
$0 parametresininmantıklıbirkullanımalanınısöyleyeyim,örneğingömülüsistemlerde kaynak
kısıtından dolayıuygulamakaynakkodları,kullanılankütüphanelerv.d.pekçoknoktadaoptimizasyona
gitme ihtiyacıvardır.Gömülüsistemlerdestandartshellkomutlarınınpekçoğubusybox adlıbir
uygulamadabarındırılır. Bu komutlarıntamamıda semboliklink ile (semboliklinkidahasonra
açıklayacağım) “busybox”uygulamadosyasıile ilişkilendirilir.Bukomutlarçağrıldığındaaslında
“busybox”uygulamasıçalıştırılır.“busybox”uygulamasıbuparametre sayesinde aslındakullanıcının
hangi komutukullanmakistediğinianlayabilir.
Shell’e interaktif olarakerişebildiğimizdençalışmaanındadinamikolarakshelluygulamasıçağrılırken
kullanılanparametreleride tektekinceleyebiliriz.Yukarıdayaptığımız işlemde shell uygulamasını
çağırırken kullanılanuygulama adınıgörüntülemekoldu.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
10
Peki işletimsistemi hangi shell uygulamasınıbaşlatacağınıneredenbiliyor.Buayar“/etc/passwd”
dosyasıiçinde herbirkullanıcıiçinbelirtilenbirdeğerdir.
“cat” komutunuve “pipe”(|) işaretini dahasonraaçıklayacağım. “passwd”dosyasınıda dahasonra
açıklayacağım, ancak budosyadaroot kullanıcısıile ilgili satırdaensonda“/bin/bash”ifadesine
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
11
dikkatiniziçekmekistiyorum.Buradaki değerhangi kullanıcıiçinhangi shell ortamınınkullanılacağını
belirtiyor.İşte işletimsistemibashortamınıbaşlatmasıgerektiğinibudeğere bakarakanlıyor.Diğer
kullanıcılariçingenellikle “/usr/bin/nologin”değerini görüyoruz.Budeğersayesindebukullanıcılara
parolaatanmışsa ve bu parolakırılmışsa bile bukullanıcılarınshell alamamalarısağlanıyor.Buyöntem
Unix ortamlarındagüvenlikiçinkullanılanakıllıcayöntemlerdenbirtanesi.
Nologinuygulamasınıçağırdığımızda sadece birmesaj yazarak sonlanıyor.Birshell içindenfarklıbirshell
açıp açmadığımızı yine echo$0 komutuile kontrol edebiliriz.
*Startup Scriptleri*
Her shell uygulamasınınkendisinehasstartupscriptdosyalarıbulunabileceğindenbahsetmiştik.Shell
scriptingkonusundandahasonrabahsedeceğiz,ancakstartupscriptlerininnormal scriptlerdenfarkları
şunlardır:
 Startupscriptlerinde (#!/bin/bashgibi) birinterpreterdirective’i bulunmasınagerekyoktur,
normal shell scriptlerinde eğeröntanımlıshell kullanılmayacaksabudirective’inilgili shell
uygulamasınaişaretedecekbiçimde bulunmasıgereklidir.
 Startupscriptlerininçalıştırılmahaklarınıntanımlanmasınagerekyoktur,shell scriptlerinin
mutlakaçalıştırılabilirolmasıgereklidir.Bukonuyadosyaerişimhaklarıbölümünde değineceğiz.
Kali’de bash’i kullandığımızagöre bushell ile ilgili startup scriptdosyalarınıinceleyelim.
İnteraktif loginshell olarakbaşlatıldığında
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
12
Bash,interaktif loginshell olarakbaşlatıldığında(yani diyelimki Kali’yeuzaktansshveyatelnetgibibir
protokolle eriştiniz,loginoldunuzve birshell ortamınaulaştınız) “/etc/profile”dosyasındabulunan
komutlarçalıştırılır.
“/etc/profile”dosyasınıniçeriğinebaktığınızdabirshell scriptbarındırdığını görebilirsiniz.Buradayapılan
ilkişlemkullanıcıid’sine göre PATHçevresel değişkenininayarlanması,bunun hemenaltındada
commandprompt’unmevcutolupolmamasınagöre bazıişlemleryapılıyor.
“/etc/profile”dosyasıokunduktanve çalıştırıldıktansonrabashsırasıylaaşağıdaki dosyalarıarar ve
bulduğuilkdosyadaki scripti çalıştırır:
 ~/.bash_profile
 ~/.bash_login
 ~/.profile
Nedenhem.profile hemde .bash_profile v.d. dosyalarvarderseniz,budosyalarınkullanıcının$HOME
dizinindebulunmasıgerektiğini söylemiştik.Eğerbukullanıcıhesabıiçinloginshell’i basholarak
ayarlanmışsaherikisi de,farklıbirshell tanımlanırsasadece .profile dosyasındaki komutlar
çalıştırılacaktır. Bu nedenle bash’eözel syntax gerektirenkomutların.bash_profile dosyasınayazılması,
farklıbir shell kullanılacaksa.profiledosyasınınkullanılmasıönerilir.Ancakbashkullanılmasıhalinde
.bash_profile dosyasıvarsasadece budosyadaki komutlarçalıştırılacak,.profiledosyasıdikkate
alınmayacaktır.
Yukarıdaki dosyaisimlerinde ilginçolabilecekiki konuvar.Bunlardanbirincisi baştaki “~”yani tilda
işareti.Buişaretinshell içinözel biranlamıvardır,o da kullanıcınınHOME dizinini ifade etmesidir.HOME
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
13
dizini dahaönce de gördüğünüzpasswddosyasındaherbirkullanıcısatırında sondanikinci alanda
belirtilendizinadıdır.Örneğinrootkullanıcısıiçinbudeğerin“/root”olduğunuaşağıdagörebilirsiniz.
İkinci ilginçkonuise dosyaisimlerininbaşındaki “.”yani noktaişareti.Shell de özel birswitch
kullanmadan“ls”yani listkomutunuçalıştırdığınızdalistelediğinizdizinveyadosyaisimlerininbaşında
“.” geçendosyalarlistelenmez.Yani birtürgizlenmişdosyahalinegelirler.Buiyi niyetli olarak
düşünürsekgenelliklekritikdosyalarınyanlışlıklasilinmeveyabozulmaihtimalini azaltmakiçin
geliştirilmişbiryöntemdir.
Loginshell’dençıkıldığında
Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:
 ~/.bash_logout
Interaktif shellolarakbaşlatıldığında(örneğindesktoportamınaloginolduktansonraTerminal
uygulamasınıbaşlatarak)
Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:
 ~/.bashrc
Sondaki “rc” harfleri “runcommands”ifadesininkısaltmasıdır.
*Çevresel değişkenler(environmentalvariables)*
Shell ortamındamevcutolanilginçbirfonksiyonalitede çevresel değişkenler.Yukarıdabahsedilen
startupscript’lerinönemli birbölümüde buçevresel değişkenlerindeğerlerininbelirlenmesineyönelik.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
14
Önce çevresel değişkenlerneye benzeronugörelim:
Setkomutulokal değişkenlerinoluşturulmasıiçinkullanılır.Herhangi birargümanalmadankullanılırsa
mevcutlokal ve çevresel değişkenleri listeler.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
15
Yukarıdaki çevresel değişkenlerelbettebelli biramaçiçinvarlar.Öncelikleçevreseldeğişkenlerinana
kullanımalanlarındanbirisindebahsedeyim.Shell scriptingiçinçevresel değişkenlerpratikbirparametre
aktarım alanıdır. Bir shell oturumuiçindebirshell script’i çalıştırdığınızdashell prosesine(parent)bağlı
bir alt(child) prosesbaşlatılır.Ancakparentproseste tanımlıolantümçevresel değişkenlerchildprosese
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
16
de aktarılır. Bu aktarım teknikolarakçevresel değişkenlerdenoluşanbirarray’inadresininbaşlatılan
prosese parametre olarakverilmesi şeklindegerçekleşir.Böylece bazıönemli tanımlarınaktarımıiçin
başlatılanbirscript’e parametre verilmesigerekmez.Aynıdurumsadece shell script’leriçindeğilbinary
uygulamalarve diğerdillerdeki scriptleriçinde geçerlidir.Shell script’lerdışındaki uygulamalardaki tek
temel farkçevresel değişkenlere doğrudanerişememeleri,uygulamanınyazıldığıdilinsağladığıbirAPI
fonksiyonunukullanmalarıgerektiğidir.Örneğin“C”dilinde bununiçin“getenv”fonksiyonunun
kullanılmasıgereklidir.
Shell scriptiçinde ise aşağıdaki ifadeile birçevreseldeğişkenindeğerine erişilebilir:
Çevresel değişkeninbaşınaeklenecek“$”işareti budeğişkenindeğerine erişmekiçinyeterlidir.Teknik
olarakyukarıda gerçekleşenişlemvariable substitutionişlemidir.Bukonuyadahasonradeğineceğiz.
Yeni birçevresel değişkentanımlamakiçinse şuişlemlerinyapılmasıgereklidir:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
17
“export”komutuile tanımlananbirdeğişkençevresel değişkenolacak,bushell içindenbaşlatılanbaşka
bir prosesbuçevresel değişkenindeğerineerişebilecektir.
Değişkendeğeriniaşağıdaki gibi tanımlamışolsaydımbudeğişkensadece içinde bulunduğumuzshell’e
özel olacaktıve childproseslertarafındanerişilemeyecekti:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
18
Değişken,variable substitutionve commandsubstitutionkonularınashell scriptingbölümünde daha
detaylıdeğineceğiz.
*Concurrent(eşzamanlı),batch(sıralı) ve conditional (koşulabağlı) çalıştırma*
Shell ortamınınsağladığı birbaşka imkandaeş zamanlı,sıralı ve koşulabağlı çalıştırma imkanlarıdır.
Yukarıdaki işlemde birinci komut“&”işareti ile arkaplana(background) atılmakta,ancakçalışmaya
devametmekte ve standartoutput(stdout) olarakekranıkullanmayadevametmektedir.(background
ve stdoutkonusunubirazdanaçıklayacağız)
İkinci komutise önplanda(foreground) çalışmayabaşlamaktave buşekildedevametmektedir.Çıktılara
dikkatederseniziki farklıprosesinçıktılarınınbirbirlerininarasınagirdiğini farkedebilirsiniz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
19
Sıralı çalıştırmada çok ilginçbirdurumyok,önce birinci komutçalışıyor ve çalışmasını tamamlıyor,birinci
prosestamamlandıktanhemensonraikinci komutçalışmayabaşlıyor.
Buradaki sıralı (batch) çalıştırma script içinde komutçalıştırmayabenzerbirdurum, ancakaynı satırda
birdenfazlakomutusıraylaçalıştırmaktanbahsediyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
20
Koşulabağlıçalıştırmada “&&” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarıile
sonuçlandığında(returnkodu0 olduğunda) çalışmaktadır.Eğerbirinci komutbaşarıile sonuçlanmazsa
ikinci komutçalışmamaktadır.
Yukarıda ilkkomutunhataaldığı durumdaözel değişken“$?”sonçalışan prosesinreturnkodunuiçerir.
Bu değere baktığımızda0’dan farklı(1) birdeğertaşıdığını görebiliriz.Budurumprosesinhataile
sonuçlandığınaişarettir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
21
Koşulabağlıçalıştırmada “||” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarısızolduğunda
(returnkodu0’dan farklıolduğunda) çalışmaktadır.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
22
*Proses’leri arkaplanve önplandaçalıştırma imkanları*
Bazençalıştırmak istediğimizprosesçokuzunsürebilir.Ancakbizaçmışolduğumuzshell’i kapattığımız
anda bu shell’denbaşlattığımızproseslerde sonlanacaktır.Böyle birdurumda“nohup”komutunu
kullanabiliriz.Bu“nohang up”kelimelerininkısaltmasıolanbirifadedir. Yaptığıişlemshell kapansadahi
prosesin(bilgisayar/sunucushutdownedilmediğisürece)çalışmasınadevametmesini sağlamaktır.
Nohupkomutuile çalıştırılankomutbizshell’i kapatsaydıkdaçalışmayadevamedecekti.Nohupeğer
çıktı (stdout) ve hataçıktısı (stderr) yönlendirmesiyapılmamışsaçalıştırdığıkomutlarınçıktılarını içinde
bulunulandiziniçinde oluşturacağınohup.outdosyasınayazar.Eğerbu uyarıyı ve çıktının herhangi bir
yere yazılmasınıistemiyorsanızaşağıdaki işlemiyapmanızgerekir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
23
Bu basitsatırın içinde ağırbir içerikvar.Birincisi inputve outputredirectionkonusu,ikincisi ise /dev/null
gibi özel Unix /Linux dosyalarıhakkındabilgi.Bukonulardaörnekleriayrıcavermekkaydıylaözetolarak
bir girişyapacağım.
Küçüktür(<) işareti ile belirttiğimizdosyanohupkomutuiçinbirinputdosyasıhaline geliyor.Yani komut
girdisini komutsatırındandeğil de belirtilendosyaiçeriğindenalıyor.
Büyüktürve ampersand(>&) işaretleri hemçalıştırılankomutunçıktısınıhemde hata mesajlarınıbu
işaretlerdensonrabelirtilendosyayayönlendiriyor,buyüzdenekrandaherhangi birçıktıgörmüyoruz.
Stderrçıktılarının stdoutçıktıları ile birlikte yönlendirilmesi içineski modayol (2>&1) ifadesidir.Farklıbir
kaynaktabu şekilde biryönlendirme de görebilirsiniz.2ve 1 rakamlarının geldiği yerise stdinfile
descriptor’ının0,stdout file descriptor’ının1ve stderr file descriptor’ının2olmasıdır (Unix’te herşeyin
bir dosyaolduğunuhatırlayın).Filedescriptornedirdersenizbu integerdeğerişletimsisteminin
üzerinde çalışanuygulamalarabudosyalaraerişimiçinverdikleri “handle”değeridir.Uygulamalarbu
değerleri dosyalaraokuma,yazma,silmegibi erişimleriçinkullandıklarıkütüphanefonksiyonlarına
parametre olarakverirler.
/devdizini filesystemhierarchystandard’agöre device dosyalarınıntutulduğudizin:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
24
Unix’te herşeybirdosyadır./dev/null iseözel birdosyadır.Budosyayıkara delikolarakdüşünebilirsiniz.
Bu dosyayayazdığınız herşeyboşluğagider,budosyadanaldığınız girdi ise hiçbirşeydir.Bunabenzer
diğerdosyalaraşunlarıörnekverebiliriz:
 /dev/zero(süreklisıfırüretir)
 /dev/random(rastgele sayıüretir)
Bir prosesi baştanarkaplandabaşlatabileceğinizgibiönplandabaşladıktansonradaarka plana
gönderebilirsiniz.Ancakbununiçinöncelikleönplandaçalışanprosesi Ctrl+Zkısayol tuşuile
duraklatmanız(suspendetmeniz) gerekir.(TeknikolarakproseseSIGTSTPsinyali göndermekten
bahsediyoruz).
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
25
Yukarıda öncelikletoplam100 defa192.168.163.1 IPadresine pingatacakkomutubaşlattıktanve
çıktısını da /dev/null dosyasınayönlendirdiktensonra(evetbiliyorumbirazanlamsızoldu,amaekranı
kirletmesinistedim) Ctrl+Zkomutuile buprosesiduraklattım.Dahasonra“bg” komutuile önplanda
olanprosesi arkaplana attım.Hemenardından budefa100 adetping(echorequest) işlemini
gerçekleştirmeküzere farklıbirkomutçalıştırdım.Bunuda arka plana attıktansonra “jobs”komutuile
arka plandaki tümişleri listeledim.“fg%1” komutuile bunlardanbirincisıradaolanınıön planageri
aldım.
*Proses’lere sinyal gönderme*
Şimdi sinyal konusunave bununshell ortamıile ilgiliuygulamasınageçelim.Diyelimki shell’denbir
proses’i başlattınızamaçok uzunsürdü,sizde buproses’i sonlandırmakistiyorsunuz.Elbette shell
erişiminisağlayanTerminaluygulamasınıçarpı düğmesindenkapatmakbirçözüm, çünküterminal
uygulamasındanbaşlatılanshell uygulaması(bash) ve bundanbaşlatılanproses’inizbirbirleri ile parent
childprocessilişkisine sahipve bunedenleterminaluygulamasıkapandığındabaşlattığınızproses’de
(nohupkomutuylabaşlatmadıysanız) sonlanacaktır.Ancakbupekpratikbiryöntemdeğil.Onunyerine
işletimsistemine artıkprosesi sonlandırmakistediğiniziiletmenindahapratikbiryoluolmasılazım.Bu
ve benzeri diğerihtiyaçlarnedeniyleLinux (ve diğerişletimsistemleri) sinyal(signal) altyapısınısunuyor.
Sinyal altyapısıçalışmaktaolanproses’lere birinterruptgöndermeimkanısunuyor.Yani prosesinkendi
iç dinamiklerindenbağımsızbaşkabirproses(veyakullanıcınınyapacağıbir işlemdiyelim) diğerproses’e
standartbir mesaj gönderiyor.Buteknikolarakasenkronbirmesaj ve birsoftware interrupt.Hardware
interruptkonusudahaçokişlemci mimarisi ile birlikte anlaşılabilecekbirkonu,buyüzdengerekli genel
bilgi ihtiyacıdahafazla,ayrıca shell kullanımıile de birilgisiyok.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
26
Kendisinebirsinyal gönderilenbirprosesbusinyale aşağıdaki şekillerdetepki verebilir:
 Sinyali bilerekve isteyerekgörmezdengelebilir
 Sinyali yakalayarakkendiistediği birbiçimdeyanıtverebilir
 Kendi içinde hiçbirdüzenleme yokise sinyale öntanımlıtepkiyi verebilir
Yukarıdaki ilkiki işleminnasıl yapılacağıuygulamanıngeliştirildiği dilve budilinkullandığıkütüphane
imkanlarıile ilgili birkonu,buyüzdendetayınagirmeyeceğiz.Ancakbirprosesinsinyali yakalamasıve
bunaöntanımlı tepkinindışındakendi istediği tepkiyi verenbiruygulamaörneği olarak“hping”
uygulamasınıörnekverebiliriz.“hping”uygulamasıCtrl+Ztuşlarıile kendisinesuspend(SIGTSTP) sinyali
gönderildiğinde businyali gönderdiği paketlerinTTLdeğerlerini artırmakveyaazaltmakiçin
kullanabilmektedir.Aslındabuoldukçaakıllıcabiryöntem, çünkükullanıcıdanuygulamaçalışırkengirdi
almakiçinbu asenkronkanal zatenişletimsistemi tarafındansağlanmış.
Yukarıdaki örnekte hping’i www.btrisk.com sunucusunayönelikolarakTCPSYN (-S) bayrağıişaretli,
başlangıçTTL değeri 0 (-t0), 80 portuna(-p80) yönelikve Ctrl+Ztuşlarıile TTL değeri herseferinde 1
artacak biçimde (-z) paketgöndermeyebaşlıyoruz.HerCtrl+Ztuşlarınabasıldığında TTL değeri 1 artıyor.
TTL değeri 2 olduğundanormalde“TTL0 duringtransit”yanıtını görmeye devametmemizlazımçünkü
www.btrisk.com sunucusu2hop’tandahauzakta.Ancak görünenoki sanal makine’dençıkanpaketlerin
TTL değerleri orijinal değerlerindenfarklılaşarakhostmakineninöntanımlıdeğerinialıyorlar.Bukonu
kafanızı karıştırmasın diye açıklamakistedim.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
27
Tekrar sinyal konusunadönersek,normaldebirproses’e komutsatırındanbirsinyal göndermekistersek
“kill”komutunukullanabiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
28
“kill”komutununöntanımlıdavranışıSIGTERMsinyali göndermekşeklinde,amaismi yanıltıcıolabilir,
herdurumdaprosesi sonlandırmakamacıylakullanılmasışartdeğil.Sinyal türleriniyukarıda
görebilirsiniz,signal.hdosyasındasinyallerinanlamlarınailişkincommentbilgileride görülebilir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
29
Arka plandaki (background) birprosese sinyal göndermenintekyolu“kill”komutudur.Shell ortamında
ise yukarıdagördüğünüzCtrl+Ztuşlarının yanı sıra Ctrl+C tuşları ile de önplandaki (foreground) prosese
sinyal gönderme imkanıvardır.Ctrl+C ile gönderilensinyal SIGINTsinyali olupbusinyalinöntanımlıetkisi
prosesinterminateedilmesidir,elbette uygulamakoduiçindeelealınabilirveyaihmal edilebilir.
Yukarıda pingkomutu100 adetistekgöndermeküzere başlatılmış,ancakbusayı tamamlanmadan
Ctrl+C tuşlarıile önplandabulunanbuprosessonlandırılmıştır.
Yine shell ortamındankullanılantuşkombinasyonlarındanCtrl+Dtuşlarıdasıklıklakullanılan
tuşlardandır.Bu tuşkombinasyonuaktif proses’eEOF(dosyasonu) karakteri gönderir.Bukarakterin
prosesüzerinde oluşturacağıetki tamamenprosesle ilgilidir.Butuşkombinasyonugenellikleshell’in
“exit”komutuylakapatılmadanCtrl+Dtuşlarıile kapatılmasıiçinkullanılır.
*Standard input(stdin),standardoutput(stdout),standarderror(stderr),girdi ve çıktıyönlendirme*
Unix’te (ve dolayısıylaLinux’ta) herşeyinbirdosyaolduğundansözetmiştik.Uygulamalarelbette
dosyadan,ağdangelenisteklerden,komutsatırından,çevreseldeğişkenlerdenv.d.kaynaklardangirdi
alabilirve bukanallaraçıktı iletebilir,ancakkomutsatırındankullanılanpekçokuygulamagirdi olarak
klavyedenkomutsatırınayazılanverilerikullanırve çıktılar ile hatamesajlarınıda komutsatırına yazar.
Ancakshell ortamınormalde komutsatırından okunangirdileribirdosyadanokumayıve yine çıktılarile
hata mesajlarınıda birdosyayayazmayı destekler.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
30
Yukarıda btrisk.txtadlıdosyanıniçeriğini “cat”komutuile görüntülüyoruz.“cat”komutunormalde
stdoutve stderr hedefleriolarakshell ortamınıkullanıyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
31
Şimdi çıktı yönlendirme yöntemini kullanarakbtrisk.txtdosyasınıniçeriğini cikti.txtdosyasınayazıyoruz.
Gördüğünüzgibi buişlemsırasındashell’deherhangi birdosyaiçeriğigörülmüyor.Dahasonracikti.txt
dosyamızagöz attığımızda btrisk.txtdosyamızıniçeriğininbudosyayayazılmışolduğunugörüyoruz.
Bu denemede“olmayandosya.txt”adlıbirdosyanıniçeriğinilistelemeye ve buçıktıyı da “cikti.txt”
dosyasınayönlendirmeye çalışıyoruz.Ancakbudefashell’de birhatamesajıile karşılaşıyoruz.Demekki
uygulamahatamesajlarınıstdoutkanalınayazmıyor,stderr halenshell ortamınıişaretediyor.“cikti.txt”
dosyamızıniçeriğinde de herhangibirveri göremiyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
32
Hemhata mesajlarınıhemde standart çıktıyı tekbirdosyayayönlendirmekiçin“>”işareti yerine “&>”
karakterlerinikullanabiliriz.Özellikle arkaplanda(background) çalıştırdığınızişlerde önplandayaptığınız
çalışmanın etkilenmemesini istiyorsanızarkaplanaattığınız işinhemçıktılarını hemde hata mesajlarını
bir dosyayayönlendirmekisteyebilirsiniz.
Bu şekilde yönlendirme yaptıktansonrahatamesajınında “cikti.txt”dosyasınayazıldığınıgörebiliriz.Bu
kullanımdandahaönce hemUnix hemde Linux ortamlarındakullanılanshell uygulamalarında
desteklenenbirdiğeryöntemise çıktıyönlendirmeişlemini yaptıkdansonrakomutsatırınınsonuna
“2>&1” karakterlerini kullanmaktır.Bukomutuşöyle anlamlandırabiliriz;birinciyönlendirmeişareti (>)
çıktıyı yönlendirirkensatırınsonundaki karakterler(2>&1) stderr’ye (dosyahandle’ı2) yazılançıktıları da
stdout’a(dosyahandle’ı1) yönlendirecek,böylecehatamesajlarıdaaynı dosyayayazılacaktır.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
33
Girdi yönlendirmeiçinçokmantıklıbirörnekbulamadım, çünküzaten komutlargenelliklegirdi olarak
kendilerineparametre olarakverilendosyaisimlerini kullanabiliyorlar.Ancakyukarıdaki işlemi birörnek
olarakverirsek“btrisk.txt”dosyasını“sort”komutunagirdi olarakveriyoruz,buişleminçıktısınıda
“sortlubtrisk.txt”dosyasınayönlendiriyoruz.“sortlubtrisk.txt”dosyasınagözattığımızdasatırların sıralı
bir şekildesaklandığınıgörebiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
34
Daha önce yaptığımız yönlendirmelereğerbirdosyayoksabunuoluşturuyorve içeriğiniyazıyor,ancak
dosyazatenmevcutsada içeriğini sonoluşturulaniçerikile eziyordu.Eğerdosyaiçeriğini koruyarakyeni
çıktıyı da dosyayaeklemekistersenizbununiçinekleme (appendetme) işaretini (>>) kullanabilirsiniz.
Appendetme işareti de eğerdosyayoksaoluşturuyor,ancakeğerdosyamevcutsamevcutdosyanın
içeriğini ezmiyorve çıktıyıdosyanınsonunaekliyor.
Şimdi birsistemyöneticisininenbüyükyardımcılarındanbirisine geliyoruz,“pipe”lar.Pipe işareti (|)
kendisindenönce çalışankomutunçıktılarınıkendisindenbirsonraki komutagirdi olarakyönlendiriyor.
Bir başkadeyişle çıktılarbirdosyayayönlendirilmekyerine yineshell ortamınayönlendiriliyor,ancakbir
çıktılar bir başkakomuttarafından yeni birsatırda yeni birkomutyazmadanhemengirdi olarak
kullanılabiliyor.Buyöntembirdenfazlaişlemi herhangi biraradosyakullanmadanteksatırda
halletmemizeimkansağlıyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
35
Yukarıda “ls” komutuile içinde bulunduğumuzdizindeki dosyave dizinleri listeliyoruz,ancakçıktıyı “wc”
komutunaparametre olarak aktarıyoruz.“wc” (wordcount) uygulamasıişlediği girdiveyadosyadaki
satır sayısı, kelime sayısıve karaktersayısını hesaplarve bize görüntüler.Pipesayesinde “ls”komutunun
çıktısını bir dosyayayönlendiripdahasonrabu dosyayı“wc” komutuylaişlemekyerinetekbirsatırdabu
işlemi gerçekleştirebildik.Bunagöre içinde bulunduğumuzdizindetam21 adet dosyaveyadizinvar.
Daha önce girdi ve çıktı yönlendirmeişleminedeğinmiştik.Çıktıyönlendirmede çıktılarartıkshell
ortamında görünmüyorsadece dosyayayazılıyordu.Pipeişaretive “tee”komutuylabirlikte çıktılarbir
dosyayaaktarılırkenaynı zamandashell ortamındada görüntülenebiliyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
36
Unix ve linux sistemlerde“wc”ve “tee”gibi dahapekçok kullanışlıuygulamavar,buuygulamalarafilter
adı veriliyor.Buuygulamalardosyalarıgirdi olarakalabildiği gibi“pipe”vasıtasıylabirönceki komutun
çıktısı olarakshell ortamındandaalabilir.Bunlardanbirkısmınıaşağıda bulabilirsiniz:
 sort: Adındanda anlaşılacağı üzere almışolduğugirdiyi sıralayarakçıktıüretir
 uniq:Sıralanmış birgirdi dizisindentekrarlayansatırlarıçıkararak satırları tekil biçimde tekrar
üretir
 grep: En sık kullanılanfiltrelerdenbirisi olan“grep”komutugirdileriniçindebelirli birveri
yapısını arar ve bu veri yapısının bulunduğusatırıntamamını çıktı olaraktekrarlar.Yani veri
yapısının görülmediğisatırlarıeler.Veri yapısısabitbirmetinolabileceğigibi bir“regular
expression”daolabilir.
 head: Genellikle büyükbirdosyainceleneceği zamansadece ilkbirkaçsatırınıgörmekiçin
kullanılır.
 tail: Genellikle büyükbirdosyainceleneceği zaman(örneğinbirlogdosyasıgibi) dosyanın
sadece sonbirkaç satırını görmekiçinkullanılır.Tail komutuözellikle logdosyalarıgibi sık
değişendosyalarınsonunaeklenensatırlarınsürekliizlenmesiiçin“-f”switch’i ile birlikte
kullanılır.
 sed:Adı “stream editor”ünkısaltmasıolan“sed”komutualdığıgirdi içinde gereklideğişiklikve
dönüşümleri yaparakçıktıüretir.Örneğinbirdosyanıniçindeki “2015” tarihini “2016”ya
dönüştürmekve yeni birdosyayayazmakiçinşukomutkullanılabilir:“sed‘s/2015/2016’ <
girdi.txt>cikti.txt”.Tabi sed’inözellikleribununlakısıtlıdeğil,kendikaraktereşleşmeve regular
expressiondesteği de var.
 awk: awk hakkındakısaca birtanımlamayapmakkolaydeğil,amaawk’ıgirdi işleme ve
dönüştürme içinbirprogramlamadili de içerenbiraraçolarakdüşünebilirsiniz.Girdi işlemeve
dönüştürme ihtiyaçlarınızkarmaşıklaştığında“perl”programlamadilindenönce
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
37
değerlendirilebilecek birkomuttur.
Shellshock
Bash ile ilgilibelirtilmesi gerekenkonulardanbirisi de bushell’insağladığıfonksiyonexportetme imkanı.
Öncelikleshell içindenkullanabileceğinizbirfonksiyonukomutsatırındantanımlayabiliyorsunuz.Bu
işleminsyntax’ınagirmeyeceğimamakabacaaçıklayacağım.Bu fonksiyonutanımladıktansonraexport
ederekartıkbir çevresel değişken(fonksiyonubirdeğişkenolarakdüşünebilirseniz)olaraktanımlıyoruz.
Daha sonra mevcutshell’iniçindenveyabushell’iniçindeykençağırdığınızdiğerchildshell’lerden(yine
bash komutuylayeni birshell dahaaçabilirsinizve bubirchildprocessolaraküstteki parentprocess’e
bağlı olarakçalışır) bu fonksiyonukullanabilirsiniz.Burayakadargüzel ve diğershell’lerden(csh,ksh,
v.d.) farklıbirfonksiyonalite.Ne yazıkki bufonksiyonalitekötüye kullanıldıve shellshockadıylameşhur
olanaçıklığa imkantanıdı. Konuylailgili detaylıaçıklıkve yamabilgilerineinternettenulaşabilirsiniz.Bu
açıklık çevresel değişkenleriuzaktanetkileyebildiğinizbiruygulamaaçıklığıile birlikte kullanıldığındaçok
etkili sonuçlardoğurabiliyor,buaçıdanbash’tenbahsederkenatlanmamasıgerekenbirkonu.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
38
III. Dosya Sistemi Temel Bilgiler
*Dosya listeleme,erişimhaklarıyönetimi,dosyave dizinmanipülasyonişlemleri*
MuhtemelenbirUnix /Linux sistemüzerinde ençokkullanılankomutlardanbirisi “ls”komutudur.
Diğerkomutlargibi “ls”komutunundapekçok switch’i var.Bazıları diğerlerindendahaçokihtiyaç
duyacağınız switch’ler.Bunlardan birisi“-a”switch’i (“all”kelimesininilkharfi).
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
39
“-a” switch’i ismininbaşında“.”olandosyave dizinlerinde listelenmesini sağladı.Budosyalardan
bazıları daha öncedenbahsi geçenstartupscript’leri,çünküşuanda“root” kullanıcısının“home”
dizinindeyiz.Hangi dizininiçinde olduğumuzu“pwd”yani “presentworkingdirectory”komutuile
görebiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
40
Adı “.” ile başlayandosyalardanbiriside “.bash_history”dosyası.Budosyayadahasonra değineceğiz.
Dosyaadı tamamlama
Shell ortamınınsağladığı imkanlardanbiriside dosyaadıtamamlamaimkanıdır.Herhangi birkomuta
parametre olarakdosyaismi vereceğimizzamandosyaadınınbirveyadaha fazlakarakterini yazdıktan
sonra tab tuşunabasarakdosya adının tamamlanmasıiçindestekalabiliriz.
Yukarıdaki örnekte dosyaismininilkkarakteri olarak“d”karakterini girdiktensonra“tab”tuşuna birinci
basışımızda herhangi birtamamlamayapmadı.Bununanlamıadı “d” ile başlayanbirdenfazladosya
veyadizinadı bulunduğudur.Bunedenletekrar“tab” tuşunabastığımızda olası tümihtimalleri bize
gösterdi.Bunuyaparkenadı“d” ile başlayanlardanbirisininbirdizinolduğunudasonuna“/”karakterini
ekleyerekbelirtti.Buaşamadansonra“d” karakterindensonra“o”karakterini de yazdımve “tab”
tuşunabastım. Bu durumdatekalternatif olduğundanshell dosyanınadınıtamamladı.
Dosyaerişimhakları
Bir başka“ls” switch’i de “-l”yani “longlistingformat”switch’idir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
41
“-l”switch’i gördüğünüzgibi herbirdosyaiçindahadetaylıbilgilersağlıyor.Bunlararasındaenkayda
değerolanlarıdosya/ dizinerişimhakları,dosyanınsahibi olankullanıcıadı,dosyanınsahibi olangrup
adı, dosyanınboyutu(byte cinsinden) ve dosyanınsongüncellenmezamanısayılabilir.
Dosya/ dizinerişimhaklarınınbulunduğubölümünbaşındaözel erişimbayrağı(specialpermissionflag)
bulunur.
[-][rwx] [rwx] [rwx]
Bu ilkbölümde bulunabilecektümopsiyonlarafarklıbirkaynaktanulaşabilirsiniz.Ancakburadasadece
sıklıklakarşılaşılanopsiyonlaradeğineceğim:
 “-“ karakteri dosyanınrutinbirdosyaolduğunaişareteder.
 “d” karakteri ilgili isminbirdizinismiolduğunubelirtir.
 “l” dosyanınaslındafarklı birdosyanınsemboliklinki olduğunubelirtir.Bukonuyuaşağıda
açıklayacağız.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
42
Semboliklinkörneği içinönceliklebirsemboliklinkoluşturuyoruz.Buörnekte bulunduğumuzdizin
altındaoluşturduğumuzbizim-passwd.txtdosyasını/etc/passwddosyasınabirsemboliklinkolarak
tanımlıyoruz.
Semboliklinkdosyamızınözelliklerine gözattığımızdailkkarakterin“l”olduğunugörebiliriz.Sembolik
linkdosyamızıniçeriğine gözattığımızdaorijinal passwddosyasınıniçeriğini görüyoruz.Semboliklink
aslındatahminedebileceğinizgibi yeni birdosyaoluşmasınanedenolmuyor,teknikolarakilgili dizin
hiyerarşisi içinde yeni birinode veri yapısıoluşuyorve buveri yapısı da orijinal dosyayaişaretediyor.
Semboliklinkile dosyayaerişerekiçeriğindegüncelleme yapabiliriz,ancaksemboliklinki sildiğinizde
orijinal dosyasilinmez.
Dosyaerişimizinleri 3farklıgrup içinverilir:
 Dosyasahibi kullanıcı(u - owner)
 Grup (g - group)
 Diğer(tüm) kullanıcılar(o - others)
Erişimhaklarıise aşağıdaki gibidir:
 Okuma(r - read):Dosyalariçindosyanıniçeriğiningörülebilmesi,dizinleriçindiziniçeriğinin
listelenmesi anlamınagelir.
 Yazma (w - write):Dosyalariçindosyaiçeriğinindeğiştirilebilmesi,dizinleriçindiziniçindedosya
oluşturma,diziniçindekidosyalarınadınıdeğiştirme,diziniçindekidosyalarısilmeve dizin
özelliklerini (attributes) değiştirebilme anlamınagelir.
 Çalıştırma (x - execute):Dosyalariçindosyanın(derlenmişkoddosyasıveyascriptdosyası)
çalıştırılabilmesi,dizinleriçindizine giriş,dizininiçindeki dosyave dizinlere erişimhakkıanlamına
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
43
gelir.
Güvenlikaçısındanbahsetmeyedeğerbir diğererişimhakkıtürüise setuid/setguid(s) erişimhakkıdır.
Bu erişimhakkıdosyasahibi (owner) veyagrup(group) erişimalanlarındaçalıştırma(x) bölümünde“s”
karakteri ile ifade edilir.Buerişimhakkınıntanımlandığıdosyalarçalıştırıldığında çalıştıran kişinin
id’sindenbağımsızolarakdosyanınsahibinin(veyagrubunun) sahipolduğuhaklarlaçalıştırılır.Bu
dosyalaraverilebilecekentipikörnek“passwd”uygulamadosyasıdır.
Görüldüğügibi “passwd”komutudosyasındadosyasahibi (u) alanındakiçalıştırmahakkı“s” olarak
görülüyor.Bumantıklı çünkühersistemkullanıcınınparolasınıdeğiştirebilmesigerekir,ancakbu
/etc/passwddosyasındadeğişiklikyapabilmekanlamınagelirki buhakyine yukarıdagörülebileceğigibi
sadece rootkullanıcısınaaittir.
Setuid/setguidhakkınasahipdosyalargüvenlikdenetimlerindeözellikle incelenir,çünkübu
uygulamalaryüksekerişimhakkınasahipolduklarındandüşükkullanıcıhakkınasahipkullanıcılar
tarafındankötüye kullanılabilirler.Ayrıcabuuygulamalardaki biraçıklıkyüksekkullanıcıhaklarının
herhangi birişlemgerçekleştirilebilmesine de olanaktanıyabilir.
Dosya/ dizinerişimhaklarınındüzenlenmesi
Erişimhaklarınındüzenlenmesiiçinkullanılanaraç“chmod”uygulamasıdır.Erişimhaklarının
düzenlenmesinde aşağıdaki 2yöntemdenbirisi tercihedilebilir:
 Numerik:Buyöntemde dosyasahibi(user),grup(group) ve diğerkullanıcılar(others) içinhaklar
tekseferde tanımlanmalıdır.
 Sembolik(alfabetikkarakterlerle):Buyöntemde istenilenprofile (yani user,groupve/veya
others’a) istenilenhak(yani read,write ve/veyaexecute)verilebilirveyaçıkarılabilir.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
44
“touch” komutuile “dosya”isimli birdosyaoluşturdukve budosyanınerişimhaklarınıgözlemledik.
“touch” komutuile büyüklüğü0olan bir dosyaoluşturabilirizveyavarolanbirdosyayı “touch”
komutunaparametre olarakvererekbudosyanınsonerişimtarihini mevcutzamanlagüncelleriz.Çok
kullanışlıgibi görünmesede birshell script’iniçinde hızlıcabirdosyaoluşturmakiçinveyadosyaerişim
zamanlarınabakan biruygulamaiçinişimize yarayabilir.
Erişimhaklarınabaktığımızda aşağıdaki erişimhaklarınıgörüyoruz:
 User (owner):read,write
 Group: read
 Others:read
Yani “root” kullanıcısıolarakbir dosyaoluşturduğumuzdaöntanımlıolarakbudosyanınhaklarıbu
şekilde belirleniyor.
“umask”komutuise “0022” gibi bir değerüretti.Öntanımlıerişimhaklarıile umaskkomutununçıktısı
birbirleri ileilişkili.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
45
“umask”değeri yine “umask”komutuile belirlenebilir.Startupscript’leri içinde bukomutubulamadım,
ama /etc dizini altındalogin.defsdosyasıiçindebudeğeri görebiliriz,dolayısıylatahminentüm
kullanıcılariçinbudeğerumaskdeğeri olarakatanıyor.Peki budeğerne anlamageliyor:
“umask”değeri öntanımlıbaz erişimhaklarıile bitwise NOTişlemine tabi tutularakyeni oluşturulacak
dosyanınerişimhaklarıbelirlenir.Bazerişimhaklarışuşekildehesaplanabilir(dosyalariçin):
 Read:4
 Write:2
 Execute:1
Yani numerikgösterimleerişimhakları644 demekşuanlamagelir: - r w - r - - r - - , yani user’ınokumave
yazma,group’unokumave others’ınokumahakkı var anlamınagelir.
Unix / linux sistemlerde öntanımlıdosyabazerişimhakları666, öntanımlıdizinerişimhaklarıise 777’dir.
Kernel yeni birdosyaoluşturulurkenbu değeri alırve umaskdeğerinibudeğerdençıkararakdosyave
dizinerişimhaklarınıbelirler.EğerKali ve rootkullanıcısıiçinbu hesaplamayıyaparsak:
 Dosyaiçin:666 – 022 = 644, yani “- r w - r - - r - -“
 Diziniçin:777 – 022 = 755, yani “d r w x r - x r - x”
Bu nedenle birdosyaoluşturulduğundave birdizinoluşturulduğundayukarıdaki erişimhakları
atanmıştır.
Dikkatli okuyucudikkatetmişolabilir,“ls”komutunuçalıştırırken“-l”switchininyanınabirde “d”
switch’ini ekledik.Bununnedeni “dizin”dizinininiçeriğini değil dizinerişimhaklarınıgörüntülemek
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
46
istediğimiziçindi.Eğersadece “-l”switchini kullanırsak“ls”komutudizininiçeriğini görüntülemeye
çalışıyor.
Şimdi yeni oluşturduğumuzdosyamızınerişimhaklarınıbirazdüzenleyelim.
Yukarıda “chmod” komutununçeşitlikullanımörneklerini görüyorsunuz.İlkkullanımdasembolik
yöntemle group’ayazma(w) hakkınıekliyoruz.
İkinci kullanımdaothers’aokumave yazmahaklarınıatıyoruz(rw).
Üçüncü kullanımdaothers’danyazmahakkını(w) çıkarıyoruz.
Sembolikyöntemdeeğerkullanıcıyailişkinbirbilgiyoksaatamatümkullanıcılariçinyapılır. Örneğin
“chmod +w dosya”komutuuser,groupve otherskategorilerininhepsi içinbuatamayıyapar.
Dördüncükullanımdanumerikyöntemleerişimhaklarınıatıyoruz.Buörnekte ayrıca ilkdefaexecutable
(x) hakkıda ekledik.Linux’un(yadaUnix’in) Windows’dankullanıcıaçısından temel farklarındanbiriside
dosyauzantılarının biranlamtaşımamasıdır. Bir dosyanınçalıştırılabilirolupolmadığıo dosyaya
executable hakkınınatanıpatanmadığıile ilgilidir.Bubirelf formatındaki çalıştırılabilirdosyadaolabilir,
bir shell scriptdosyasıda.Tabi buradaki dosyamızıniçinde çalıştırılabilirbiriçerikbulunmamaktadır.
Ancaklistelediğimizdeçalıştırılabilirbirdosyagibi görünmektedir.
Dosyasistemi navigasyonu
Temel birbilgi olmaklabirlikte dosyasistemi (file system) içinde temel navigasyonişlemlerine de
değinmemizdefaydavar.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
47
“cd” (change directory) komutuadındandaanlaşılabileceği gibi içinde bulunulandizini değiştirmekiçin
kullanılanbirkomut.Yukarıdaki örnekte içinde bulunduğumuzdizininaltındabulunanbirdizine
geçiyoruz.Birsonraki adımdaise “..” karakterlerinikullanarak2üst dizine çıkıyoruz.
Herhangi birdosyaadını işaret ederken2tür işaretetme imkanımızbulunmaktadır:
 Relative (göreli) dosyaadıile işaretetme
 Absolute (tam) dosyaadıile işaretetme
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
48
Yukarıdaki örneklerde içinde bulunduğumuzdizine göreli(relative)olarakbelli dosyalaraişaretediyorve
içeriklerini inceliyoruz.Birinci örnekte“/etc”dizini içindeykenbudizininaltındabulunan“cron.d”dizini
içinde yeralan“anacron” dosyasınıniçine gözatıyoruz.Daha sonra “cd” komutunayine relative olarak
“cron.d” dizininiparametre olarakveriyoruzve budizine geçtiktensonraüstdizinde (yani/etcdizininin
içinde) bulunanbirdosyanıniçeriğinegözatıyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
49
Yukarıdaki örnekte ise “/etc”dizini altındabulunan“hosts”dosyasınıniçeriğine“/root”dizinininaltından
göz atabilmekiçinabsolute pathyönteminikullanıyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
50
“cd” komutununsıkkullanılanimkanlarındanbirisi de dizinismi yazmadankullanıcınınHOME dizinine
hızlıca dönmesini sağlamasıdır.Bunuyapmakiçinherhangi birparametre vermedensadece“cd”
komutunuişletmemizyeterlidir.
HOME dizini shellortamındastartupscript’lerini barındırması,kullanıcınınshell tarihçesininbulunduğu
dosyayıbarındırması ve kullanıcınınloginolduğundailkdüştüğüdizinolmasıgibi çeşitli nedenlerden
dolayıkullanıcılariçinönemli birdizindir.Buyüzdendosyaerişimleriile ilgili işlemlerdepratikbiçimde
HOME dizine işaretedebilmekiçintildayani “~” işareti kullanılır.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
51
Yukarıdaki örnekte dizinimizi “/etc”diziniolarakdeğiştiriyoruzve budizininaltındaykensadecetilda
işaretini kullanarakHOMEdizinimizaltındaki dosyalarılisteleyebiliyoruz.
Linux’tabirdizinoluşturmakiçin“mkdir”komutunukullanıyoruz.Dizinsilmekiçinse dosyalariçinde
kullandığımız“rm” komutunukullanıyoruz,yalnızbirfarkla.Linux bizi silmekistediğimizşeyinbirdosya
değil birdizinolduğuhakkındauyarıyor.Birdizini silebilmekiçin“rm”komutunu“-r”switch’i ile birlikte
kullanmamızgerekiyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
52
Dosyamanipülasyonuileilgilitemelişlemlerdenbirisi de dosyakopyalamaişlemi “cp”komutuile
yapılıyor.Dosyaismininbasitbirbiçimde değiştirilmesi ile ilgili komut“mv”yani “move”komutu.
“rename”komutuise birperl deyimi iledosyaisimdeğişikliğiiçinkullanılıyor.“rm”komutudatahmin
edilebileceği dosyasilmekiçinkullanılıyor.
*Dosya arama*
Shell ortamındaönemli olanbirbaşkakonudabir çalıştırılabilirdosyanınismi yazılarakçalıştırıldığında
aslındahangi dosyanınçalıştırıldığı konusudur.Windows’abenzerşekilde Linux’tadabirPATHçevresel
değişkenibulunmaktadır.Budeğişkenstartupscript’leri ileherkullanıcıiçinatanır.
Linux’taPATHdeğişkeninidiğerlokal veyaçevresel diğerdeğişkenleri görüntülediğimizgibi
görüntüleyebiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
53
Bir başkayöntemde “env”gibi birkomutlatümçevresel değişkenleri listeleyerekiçinde PATHkelimesi
geçenleri listelemekolabilir.
Bizherhangi birkomutçalıştırdığımızda (örneğin“ls”komutu) bukomutPATHçevresel değişkeni
içindeki dizinleriçinde budeğişkende belirtilensıraylaaranırve ilkbulunançalıştırılabilirkomutdosyası
çalıştırılır. Herhangi birkomut çalıştırdığımızda bu komutunaslındahangi dizinaltındabulunduğunu
“which”komutuylainceleyebiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
54
PATH çevresel değişkeniiçindearananisimdeki tümçalıştırılabilirdosyalarıtespitetmekiçin“-a”
switch’ini kullanabiliriz.
PATH çevresel değişkenive “root”kullanıcısıile ilgilibahse değerbirbaşkakonuda “.” yani mevcutdizin
konusudur.Normalde sıradanUnix /Linux kullanıcılarınınPATHçevresel değişkenininiçinde“.”,yani
mevcutdizinbulunur.Bunagöre örneğinbirshell scriptçalıştırılacağızamanshell’de içinde bulunulan
diziniçinde de buscriptaranır. Unix’inilkdönemlerinde yaşananbazısosyal mühendisliksaldırıları
nedeniyle budizinöntanımlıolarka“root”kullanıcılarınınPATH değişkeniiçindeyeralmaz.Unix
bildiğinizgibi çokkullanıcılıbirsistem(herne kadarKali böyle biramaç içinhazırlanmamışolsada).
Böyle birsistemüzerindeçalışankullanıcılaryardımamacı ile sistemyöneticisiniyanlarına
çağırdıklarında sistemyöneticisi kendi kullanıcısınageçmekiçin“su”,yani switchuserkomutunu
kullanır.Ancakshell ortamınakendisi interaktif logonolarakgirişyapmadığıiçinhalenkendisiniçağıran
kullanıcınıniçinde bulunduğudizinde bulunmayadevametmektedir.Eğersistemyöneticisiniçağıran
kullanıcı“ls” komutuile aynıismi taşıyanbir shell scriptyazmışve bu dizininiçineyerleştirmişise ve
“root” kullanıcısınınPATH çevresel değişkeniiçinde“.”var ve “/bin”dizinindenönce geçiyorsaozaman
çağıran kullanıcınınyazdığı script“root” kullanıcıhakları ile çalışır.İşte bu basitsaldırı nedeniyle
öntanımlıolarak “.” dizini “root”kullanıcısınınPATHdeğişkeni içinde bulunmaz.
PATH değişkeni mevcutdizini işaretetmediğiiçin“root”kullanıcısıylakendi dizininizdeki biruygulama
veyascript’i çalıştırmakistediğinizde dosyaadınınbaşına“./” karakterlerini koymanızgerekir.
Bir başkadosyabulmakomutuda “locate”komutudur.Bukomut“which”komutugibi ne çalıştırılabilir
dosyalaraözeldirne de sadece PATHdeğişkenindegeçendizinleri arar. “locate”komutubirveritabanı
içinde dosyaisimlerini arar.Buveritabanıbir“cron” işiyle periyodikolarakgüncellenir.“cron”ve zamanlı
işlerkonusunadahasonradeğineceğiz.Eğerveritabanınımanuel olarakgüncellemekisterseniz
“updatedb”komutuyladabuişlemi yapabilirsiniz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
55
“locate”komutubirveritabanıkullandığıiçinçokhızlı yanıt döndürür.Yukarıda “updatedb”komutunun
güncellediği veritabanıdosyasınınadını ve bulunduğudizini de görebilirsiniz.
Bir başkadosyabulmakomutuda “find”komutudur.Bukomuther çalıştığında hedef dizinleri tarayarak
dosyaismini arar.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
56
“find”komutununbirözelliği de eğerbirisimhedefiverilmemişsehedef dizininiçindekitümdizinlerve
bu dizinleriniçindeki tümdosyalarınisimlerini listeler.Buözellik“find”komutununarşivkomutlarıile
birlikte kullanılmasınıdasağlamaktadır(arşivişlemlerine dahasonradeğineceğiz).
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
57
IV. Shell Scripting
*Shell Scripting*
Shell scriptingkonusubirUnix/Linuxsistemyöneticisi içinvazgeçilmezbirkonu.Çünküscriptlerher
defasındaaynıkomutlarıdefalarcayazmaktankurtardığı gibi aynı zamandauygulamaortamına benzer
bir ortamsunarak farklıdurumlardafarklıişlemleri otomatikolarakgerçekleştirmeyide mümkün
kılıyorlar.Aynınedenlerdendolayıbizpentestuzmanlarıiçinde bazı testadımlarımızı otomatikleştirme
imkanısağlıyorlar.Bununlabirliktebirpentestaracı geliştirmekistediğinizde ilktercihinizgenellikle
python,ruby,perl gibi dahagelişmişAPI’lerle desteklenen,hemesnekhemde kontrol edilebilirscript
dilleri olacaktır.Ancakne varki,Linux işletimsistemininstartupve shutdownsüreçleriile pekçokservis
yönetimscript’i Shell Scriptolarakgeliştirilmiştir.Dolayısıylaciddi birsistemyönetimihtiyacınızvarsa
shell scripting’denkaçamazsınız.
Shell scriptingkonusubaşlıbaşınaderinbirkonu,buyüzdenbumakale kapsamındamutlakadeğinilmesi
gerekentemel konularadeğineceğiz.Dahadetaylıihtiyaçlariçinelbette internette bulunabilecekpek
çok kaynaktanfaydalanılabilir.
Örneğimiziçinbirihtiyaçsenaryosugeliştirelim,böylece dahailginçbirscriptoluşturabiliriz.Ayrıca
örneğimizdeKali ilebirlikte gelengüvenlikaraçlarındanbazılarınıda kullanmaimkanımızolur.
Diyelimki;hedef tespiti adımındaICMPEcho Request,Timestamp Requestve NetmaskRequestistekleri
ile tarama yapacakbir scriptgeliştirelim.Buistekleriüretmeküzere “hping3”aracını kullanalım.Buaraç
ile sözkonusuistekleri yapmakiçinkullanmamızgerekenkomutyapısıaşağıdaki gibi:
# hping3172.16.0.10 –c 1 -1 –C 8
Yukarıdaki komutla“172.16.0.10” IPadresine 1 adet(-c1) ICMP (-1) paketini Type 8(-C8) yani Echo
isteği gönderiyoruz.
Scriptyazmak istememizinnedeni genişbirIPbloğunaistekte bulunmakiçinbukomutuherdefasında
tekrartekrar yazmakistemememiz.AyrıcaherIP adresi içinEchoRequestpaketininyanısıra
“TimestampRequest”ve “NetmaskRequest”isteklerinide göndererektespitihtimalimizi artırmaya
çalışacağız. Elbette hedef tespiti içindahapekçokyöntemvar,ama buradaki amacımız çok ihtiyaç
duyduğumuzbirdurumdanasıl scriptyazabileceğimizinüzerindengeçmek.
Uzatmadan hemenscriptkodumuzuaçıklamayabaşlayayım:
#!/bin/bash
echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: "
read SUBNET
function scan {
local YANIT="0"; local IP=$1.$2.$3
local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0"
hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
ECHO="echo-1"; YANIT="1"
fi
fi
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
58
hping3 $IP -c 1 -1 -C 13 >& aradosya.$IP # TS Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
TIMESTAMP="timestamp-1"; YANIT="1"
fi
fi
hping3 $IP -c 1 -1 -C 17 >& aradosya.$IP # ADD. MASK Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
if ! grep "Host Unreachable" aradosya.$IP >& /dev/null; then
ADDRESSMASK="addressmask-1"; YANIT="1"
fi
fi
if test "$YANIT" == "1" ; then
echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK
fi
rm aradosya.$IP
}
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j
done
done
exit 0
Script’inilksatırındagörülen“#!/bin/bash” (#!karakterlerishebang olarakokunur) ifadesiiçinde
bulunulanshell’densözkonususcriptçalıştırılırken hangi interpreter’inkullanılacağınıbelirtmekiçin
kullanılır.Buifadeyi kullanmazsanıziçinde bulunduğunuzshellöntanımlıshell’iinterpreterolarak
kullanır.
echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: "
read SUBNET
Bundansonra gelenbölümdekullanıcıdanbirgirdi alıyoruz.“echo”komutuile kullanıcıyı
yönlendiriyoruzve “read”komutuile yanındayazdığımızdeğişkenebudeğeri aktarıyoruz.Değişkeni
daha önce declare etmemizegerekyok,hemenilkkullanıldığıandatanımlayabiliriz.Veri tipi ile ilgili de
sıkı kurallaryok,ama veri tipi karşılaştırmanoktalarındamutlakaönemli.
function scan {
Bu bölümdensonrabirfonksiyontanımıgeliyor.Fonksiyonumuzunadı“scan”. Uygulamadillerinde
olduğugibi shell scriptiçindeyazılanfonksiyonlardaparametre alabiliyorve birdeğerdöndürebiliyorlar.
Ancakalınan parametrelerinsayısınıve veri tiplerini tanımlamakgerekmiyor.Fonksiyonlardiğerdillerde
de olduğugibi çokdefakullanılacakscriptbölümlerinitanımlamakve script’inbakımınıkolaylaştırmak
içinkullanılıyor.Ancakönemlibirkural,fonksiyonlarınkullanılmadanönce tanımlanmışolması.
Interpreterscript’inherbirsatırını yorumladıktansonrabusatırın gereğini yerine getirmeyeçalışıyor,bu
nedenle birfonksiyonuçağırdığımızdabunuöncedentanımlamışolmamızlazım.
Fonksiyoniçeriğinidahasonraaçıklayacağım, şimdi script’intemel fonksiyonalitesinintanımlandığı
bölüme ilerleyelim:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
59
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j
done
done
Buradaki algoritmayıanlatmadanönce kullanıcıdantaranacakolansubnet’inilk2octet’ini aldığımızı
hatırlatalım.Elbette dahaiyi birkodkullanıcınınyapabileceği tümhatalarıhesabakatmalıve bunlarıele
almalı,ancak kodukalabalıklaştıracağıiçinbukontrolleri kodlamaktankaçındım.
İki adet“for” döngüsüile taranacakher birIP adresininson2octet’ini de bizoluşturacağız.“for”ifadesi
“i” değişkenineherdefasındahemensonragelendizidenbirdeğeratayaraktümdizi değerlerini
kullanmamızısağlayacak.Shell’in“commandsubstitution”imkanınadahasonradeğineceğimizi
söylemiştik.Değineceğimizalanburası.Normalde pekkullanmadığımızve tırnak işaretine benzeyenolan
terskesme (backquote) işareti sayesinde shell terskesmeişaretleri arasındabulunankomutuçalıştırıyor
ve bu komutunçıktısını içinde bulunduğusatırdaüreterekkullanıyor.Tabi interpreterbunuyaparken
eğerbircommand substitutiondurumuvarsaönce buişlemi gerçekleştirmeli,dahasonrabukomutun
ürettiği çıktıyı da dikkate alaraksatırın tamamını yorumlamalı.
Bizimihtiyacımız1 ile 254 arasındaki sayılardanoluşanbirdizi oluşturmakki “seq”komutudatam olarak
bu işlemi yapıyor.“seq”komutununnormaldenasıl çalıştığını şuşekilde görebiliriz:
Bu örnekte 1 ve 5 arasındaki değerleri ürettik.Biliyorsunuzpekçokdilde birsatırınbir komutunbittiğini
ifade etmekiçin“;”işareti kullanılır.Scriptyazarkenbunagerekyok,hersatırsonuo komutunbittiği
anlamınagelir.Ancaksıralı (batch) komutçalıştırma bölümünde de bahsettiğimizgibi teksatırdabirden
fazlakomutuda aralarına “;” işaretini koyarakscriptdosyasıiçinde de aynısatırda birdenfazlakomutu
yazabiliriz.“for”döngüsününsonundagördüğünüz“do”kelimesinormaldefarklı birkomutve ayrı bir
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
60
satırda yazılmalıydı.Fakatshell’inbizesağladığıbatchkomutçalıştırma imkanısayesinde ve benim
kodunokunabilirliğini satırsayısını azaltarakartırma niyetimnedeniyle “for”ifadesi ve “do”ifadesini
aralarına “;” koyarakaynı satırda yazdım.
İç içe 2 “for” döngüsüile IPadresininson2octet’ini de oluşturuyoruzdemiştik.HerbirIPadresi için
“scan” fonksiyonunuçağırıyoruz.“scan” fonksiyonuna3parametre veriyoruz.
scan $SUBNET $i $j
Bunlardanilki “SUBNET”değişkeni,yani kullanıcıdangirmesini talepettiğimizilk2octet.Değişkenin
başındaki “$” işareti yine shell ortamınınsağladığıdeğişkenyerinegeçme (variable substitution)
imkanınıbize sağlıyor.Yani shell interpreter’içalışırkensatırdaki komutuişletmedenönce başında“$”
işaretini gördüğüdeğişkenindeğerini satırdabudeğişkeninadınıngeçtiği yere yerleştiriyor,ondansonra
komutubütünolarakçalıştırıyor. Yukarıda bahsettiğimizcommandsubstitutionfonksiyonalitesine çok
benzerbirdurum.
Aynı şey“i”ve “j” değişkenleri içinde geçerli,içinde bulunduğumuz“for”döngüleri içinde bu
değişkenlerinaldığıdeğerlerher“scan”fonksiyonuçağırılacağındasatırda variable substitution
sayesinde kullanılıyor.
exit 0
Son satırdaki bu komutscript’inreturnkodunun “0”olmasını sağlayarakshell’inscript’içalıştırırken
başlattığı (spawnettiği) prosesi sonlandırıyor. Bukomutagerekyokaslında,amabir uygulamayıveya
scripti çalıştırdığınızda genellikle “0”başarılı, bunundışındaki tümtamsayı (integer) dönüşdeğerlerise
bir sorunolduğuanlamınagelir.Budönüş(return) kodunukontrol edenve buuygulamayıçağırankod
da bu şekilde tersgidenbirşeyolduğunakararverebilir.Örneğinbiziyi birprogramcıolarakkullanıcının
verdiği girdileri kontroledecekkodlarıyazsaydık,hatalıbirgirişyapıldığında“exit”komutuile script’i
sonlandırırkenaynızaman da uygulama,scriptveyahattashell’indeğerlendirmesi için“0”dan farklıbir
hata kodudönebilirdik.
Shell’debirkomutçalıştıktansonradönüş(return) koduna“?” değişkeninindeğeri ileulaşabiliriz.Tabi
yine variable substitutionyapmakiçinbaşına“$” işaretini eklememizlazım.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
61
Artık fonksiyonumuzageçebiliriz:
function scan {
local YANIT="0"; local IP=$1.$2.$3
local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0"
Scriptdili içinde fonksiyontanımıiçindahaönce de söylediğimizgibiparametrelerinve veri tiplerinin
tanımlanmasınagerekyok.Fonksiyonuniçindense budeğişkenlere parametrelerinverildiği sırayagöre
$1, $2, $3, ..şeklinde ulaşabiliriz.“scan”fonksiyonumuzahatırlarsanızbirinci parametreolarak
kullanıcıdanaldığımız “SUBNET” değerini,ikinci parametreolarakilk“for”döngüsününürettiği “i”
değerini,üçüncüparametre olarakdaikinci “for”döngüsününürettiği “j”değerini kullanmıştık.Bu
değerleri kullanarakIPadresini oluşturuyorve “IP”adlı değişkeneatıyoruz.Burada“local”ibaresine
aslındaihtiyacımızyok,ancak daha sonra script’i “scan”fonksiyonunubackground’daparalel olarak
çalıştıracak, böylelikleçokdahahızlı tarama yapacak şekildedeğiştireceğim.Ancakbudurumda
karşımıza bir “thread”güvenliği problemi çıkıyor.Eğerfonksiyonuniçindekibirdeğişkeni“local”olarak
tanımlamazsambackground’daçalışandiğerkanallar(shell bununasıl uyguluyortamolarakbilmiyorum
ama mantıkenthread’lerolarakyapmasılazım, çünküprosesolarakyapsaydıbu problemimizolmazdı)
bu değişkenindeğerini bozuyorve farklıbirthread’inbozduğudeğeri okuyarakişlemyapmaya
çalışıyorlar.“local”tanımı bu değişkeni gerçektenbirlokal fonksiyondeğişkenihaline getiriyor,aksi
halde fonksiyoniçinde tanımlanmışolsadaglobal birdeğişkenolarakdavranıyor.
Yukarıda gördüğünüztümdeğişkenlerfonksiyonuniçindedeğiştiğive kullanıldığıiçin de “local”olarak
tanımlandı.
hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request
if grep "1 packets received" aradosya.$IP >& /dev/null; then
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
62
if ! grep "Unreachable" aradosya.$IP >& /dev/null; then
ECHO="echo-1"; YANIT="1"
fi
fi
Daha sonra gelenbölümaslındatemelişlevi yerinegetiriyor,“hping3”uygulamasınıgerekli
parametrelere “EchoRequest”paketiüretmesi içinçağırıyoruz.“hping3”uygulamasının
fonksiyonalitesinikısacaaçıklamakgerekirse buuygulamabirpaketüretme (packetcrafting)
uygulaması.“hping3”uygulamasınınçıktısını stderrdahil olmaküzere birdosyayayönlendiriyoruz.Daha
önce sıralı işçalıştırma imkanımızolduğunuve teksatırda “;” ile ayrılmışbirdenfazlakomut
çalıştırabileceğimizisöylemiştim.Amascriptiçinde biraradosyakullanmayıdahauygunbuldum.
“hping3”üçağırdığımız satırın sonunda“#” işareti ile başlayanbölümbiryorumbölümü.“#”işaretinden
sonra yazdıklarımızyorumlayıcı(interpreter) tarafındankodolarakyorumlanmıyor.
“hping3”işlevini yerinegetirdiktenve tümçıktısını birara dosyayayönlendirdiktensonra,“grep”
komutuyladosyaiçinde “1packetsreceived”ifadesini arıyoruz.“grep”komutundandahaönce de
bahsetmiştik,özetle parametreolarakaldığıbirdosyaveyakendisine yönlendirençıktınıniçinde eğer
aranan ifade geçiyorsa,busatırıntamamını döndürenbirkomuttur.Ancakbizburada“grep”in
çıktısından ziyade “grep”indönüş(return) koduylailgileniyoruz.Eğer“grep”arananifadeyi bulabilirse
“0” döndürüyor,bulamazsa“1”değerini döndürüyor.Budeğerde “if”koşuluiçin“true”veya“false”
anlamınageliyor.Biliyorumdiğerdillere göre birazkafakarıştırıcı çünkü uygulamadillerinden“false”
genellikle “0”olur,“0” dışı tüm değerlerde “true”anlamına gelir.
Yukarıda da gördüğünüzgibi shell için“true”durumu“0” ile ifade ediliyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
63
Biz“grep”indöndürdüğüdeğerle ilgilenmediğimiziçinde çıktısını “/dev/null”dosyasınayönlendiriyoruz.
Bu dosyanınözel birdosyaolduğunuve buamaçla kullanıldığını dahaönce de belirtmiştik.
“hping3”aracını script’le kullandığımızdagördükki,bazençokfazlaisteklekarşılaşanağcihazlarıhedef
IP adresine ulaşılamadığınailişkin“HostUnreachable”veya“NetworkUnreachable”yanıtıüretiyorlar.
Bu durumdada bizim ICMPyanıtı alındığını anlamakiçinkullandığımız“grep”komutuolumlusonuç
dönüyor,halbuki dönenyanıtbizimisteğimizleilgilideğil.Buhatadankurtulmakiçindosyanıniçinde bir
de “Host Unreachable”ifadesini arıyoruz.Ancakbudefa“!” işareti ile “değil”mantıksal işlemini
yapıyoruz,yani “if”koşuluancakbu ifade yoksaiçindeki koduçalıştırıyor.
Eğer “Echo Request”isteğimizebiryanıtaldıysakve bu yanıtın içinde de “HostUnreachable”ifadesi
geçmiyorsa“ECHO” değişkenimize “echo-1”değerini, “YANIT”değişkenimize de “1”değerini atıyoruz.
if test "$YANIT" == "1" ; then
echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK
fi
rm aradosya.$IP
}
Diğeriki bölümde farklıICMP isteklerini aynışekildegönderdiğive yanıtlarıişlediği içinatlıyorum.
FonksiyonunsonbölümündeherhangibirICMPisteğine yanıtalındığıanlamınagelen“YANIT”
değişkeninindeğerinin“1”olupolmadığınabakıyoruz,eğerbirveyadaha fazlayanıt almışsakda ilgili IP
adresini ve hangi isteğimize yanıtaldığımızıraporluyoruz.Buradaki “if”koşulundabelirtmektefayda
gördüğümbirkonuvar, bu da shell scripting’inilginçdurumlarındanbirisi.“YANIT”değişkeninin
değerinin“1”olupolmadığınıkontrol ederkensadece $YANITifadesini kullanamıyoruz.Çünkübu
değerinatanmamasıveyatamsayıolmasıdurumundakarşılaştırmayapılanve birstringgibi işlemgören
“1” ifadesiyle uyumsuzlukoluşuyor.Budurumdada shell hataüretiyor.Bundankurtulmakamacıyla
$YANIT ifadesini çifttırnakiçine alıyoruzki budeğişken atanmasadaiçeriği tamsayıolsada birstringgibi
muamele görsün.
Bu raporlamaadımından hemensonrada ara dosyamızı siliyoruz.
Şimdi script’imizi birdeneyelim(dürüstolmakgerekirse eğersürekliscriptyazmıyorsanızzatenscript’i
geliştirirkendefalarcadenemekve hataayıklamakgerekiyor):
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
64
Alacağınız sonuçlarilgili ağbölümünde ne kadarcihazbulunduğunabağlıolacaktır,ancak bu haliyle
script’imizkullanılamayacakkadaryavaş.Bununiçinkodumuzdaaşağıdaki gibi birdeğişiklikyapıyoruz.
for i in `seq 1 254`; do
for j in `seq 1 254`; do
scan $SUBNET $i $j &
sleep 0.2
done
done
Yukarıdaki koddafarklı olan2 noktavar, birincisi “scan”fonksiyonunuçağırdığımız satırın sonuna“&”
karakterini ekledik.Bukarakterbildiğiniz gibi birkomutshell’de buşekildeçalıştırıldığındabuişlemin
arka planda(background) çalıştırılmasınanedenoluyor.Şimdi budeğişikliğiyaptıktansonrascript’imizi
çalıştıralım.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
65
Bu kezçok daha kısa birsürede çok genişbirağ’danyanıt alabilmeye başladık.
Shell scriptingkonusuylailgili sonolarakscriptdosyasınınçalıştırılabilirolmasıihtiyacınadeğinelim.
Dosyaerişimhaklarınındüzenlenmesi bölümünde “chmod”komutundan,dosyaerişimhaklarınınneler
olduğundanve “umask”konusundansözetmiştik.
Scriptdosyamızı ilkoluşturduğumuzdadosyaüzerinde tanımlıolanhaklaraşağıdaki gibiydi:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
66
Bu haliyle script’imizi çalıştırmakistediğimizdeaşağıdaki hatayıalıyoruz:
Yukarıda gördüğünüzgibi sadece dosyaisminikullanarakonuçalıştırmakistediğimizde yetki hatası
veriyor.Ayrıcaçalıştırılabilirdosyaolmayanbirdosyaadı bu şekilde kullanıldığındashell’indosyaadını
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
67
tamamlamadesteğindende (yani dosyaadınınbirkısmını yazdıktansonra TAB tuşunabasarakadın geri
kalanını otomatikolaraktamamlama) faydalanamıyoruz,çünküböyle birkullanımmantıklıdeğil.
Hemensonra“bash” uygulamasınıçalıştırıp bu defascriptdosyasınıparametre olarakverdiğimizde
script’imizçalışıyor.Ancakbunaihtiyaçduymadandoğrudanscriptdosyamızınadını kullanarak
script’imizi çalıştırmakistersekdosyanınerişimhaklarınaçalıştırma(execute) hakkınıdaeklememiz
gerekir.
Bu örnekte sadece dosyanınsahibi kullanıcıolanrootkullanıcısınabu hakkıverdik,sadece “chmod+x”
diyerektümkullanıcılariçin de buhakkı tanımlayabilirdik.Buişlemiyaptıktansonrayetki hatasıalmadan
script’imizi başlatabildik.
Script’imizinçıktılarını“;” karakteri ile birbirindenayırmamızdahasonra işimize yarayabilir.Örneğin
“cut” filtresi ile buçıktılardansadece istediklerimizi listeleyebiliriz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
68
Yukarıdaki örnekte script’imizinçıktılarının“;” delimiter’i ileayrıldıklarınıbelirtiyoruz,“-f 1,3” ifadesi ile
bunlardan1. ve 3. sırada olanlarınılistelemekistediğimizi ve bunlarılistelerkende “ “, yani boşluk
karakterleri ile birbirlerindenayırmakistediğimizi belirtiyoruz.Böylece listelenenIPadreslerive sadece
bunlarınTimestampRequestisteklerimize yanıtveripvermediklerinigörmüşoluyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
69
V.Shell History
Shell Tarihçesi (History)
“bash” diğershell’lerde de olduğugibi,kullanıcıyıdahaönce girilmişolankomutlarıtekrartekrar
yazmaktankurtarmakiçinbir historyimkanısunar.Kullanıcıdaha önce yazdığı komutlarıtekrar
yazmadankullanabilmekiçinoktuşlarıile önceki komutlararasındagezinebilir(oktuşunabastıkça
komutsatırında daha önce yazılmış olankomutlargörüntülenir).
Bu imkankullanışlılığıartırmasınınyanı sıra eğersistemele geçirilmişsehassasolabilecekbilgilerin
sızdırılması amacıyla da kullanılabilir.Örneğinkomutsatırındaçalıştırılan birkomutkullanıcıadı ve
parolagibi bilgileriçeriyorolabilir.Pekidahaönce yazılmışolankomutlarısistemnasıl hatırlar?
Çevresel değişkenlere birgözattığımızda HISTFILE adlıbir değişkenindeğerinin“/root”dizini altında(bu
dizin“root”kullanıcısı için“home”dizinidir) “.bash_history”dosyasıolduğunugörürüz.Bildiğinizgibi “.”
ile başlayandosyalarınadlarıancak “ls”komutuna“-a” switch’ini verdiğimizdegörülebiliyor.Eğer
sistemimizdebaşkakullanıcılardaolsaydıve bukullanıcılarinteraktif olarakshellortamınıkullansalardı
muhtemelenonların“home”dizinlerinde de historydosyalarınıgörecektik.
Peki içinde “HIST”geçendiğerçevreseldeğişkenlerne anlamageliyor.Önceliklebudeğişkenler
“.bashrc” scriptininiçindegeçiyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
70
Bu script’te belirlenendeğerleri açıklarsak:
 HISTFILESIZEdeğeri “.bash_history”dosyasınıntaşıyabileceği maksimumsatırsayısını belirtiyor.
 HISTSIZE ise aktif oturumiçinhafızadatutulan(ve shell’dençıkışyapmadandiske yazılmayacak
olan) maksimumkomutsatırsayısını belirtiyor.
 HISTCONTROLdeğişkeniise şudeğerleri alabilir:“ignorespace” –boşlukkarakteri ile başlayan
komutlarınhatırlanmasınıengelliyor,“ignoredup” –bir önce kullanılankomutlaaynıolan
komutlarınhatırlanmasınıengelliyor.Eğerbudeğeryukarıdada görüldüğügibi “ignoreboth”ise
hemboşlukkarakterleri ile başlayansatırlarınhemde bir önceki satırlaaynı olansatırların
hatırlanmasınıengelliyor.Eğer“erasedup”değerikullanılırsabukaydedilecekolankomut
kaydının aynısındandosyanınönceki bölümlerinde bulunanlarıntamamınınsilinmesigerektiği
anlamınageliyor.
Yukarıdaki HISTFILESIZEve HISTSIZEparametreleri birazkafakarıştırıcı. Bununetleştirmekiçinaşağıdaki
örneğe gözatın:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
71
Yukarıda gördüğünüzdurumşuşekilde gelişmiştir;“wc.bash_history”komutuile budosyaiçindeki satır
sayısının 999 olduğunugörüyoruz.Dahasonrabudosyanınson 3 satırını görüntülediğimizde ise“wc
.bash_history”komutunugöremiyoruz.Tekrar“wc”komutuile satır sayısını görüntülediğimizdebu
dosyanıniçeriğinindeğişmediğinigörüyoruz(kaldıki maksimumsatırsayısı2000 idi).Ancakyukarıok
tuşunabastığımızda bir önceki komuttekrargörüntüleniyor.Çünküişletimsistemi açıkolanoturumda
daha önce kullanılmışolankomutlarıshell “exit”komutuylaveyaçarpıişaretindenkapatılmadanson
kullanılankomutlarıdosyayayazmıyor.İşte HISTSIZEhafızadasaklananancakhenüzdiske yazılmamış
olanbu kayıtlarınsayısını sınırlandırıyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
72
VI. Manuel Dosyaları
Manuel Dosyaları(man pages)
Man page’leri Unix ve Unix’inmirasçısıolanLinux’unengüzel yanlarındanbirisi.Biraztarihçesinden
bahsetmekgerekirse ilkiki yıl Unix projesi ile ilgili hiçbirdokümantasyonyapılmamış.İlkmanpage’leri
proje ekibi yöneticisinin(Doug McIlray) zorlamasıylaUnix’inilkgeliştiricilerindenDennisRitchie ve Ken
Thompsontarafındanyazılmış.Bu tarihtenitibarende Unix üzerinde geliştirilentümuygulamalarve
diğerkaynaklariçinmanpage’leri geliştirilirolmuş.
Manuel sayfalarındagenellikle bulunanbölümlereşunlarörnekverilebilir:
 NAME: Komutveyafonksiyonunadıve teksatırlık tanımıdır.
 SYNOPSIS:Komutlariçinkomutunnasıl çalıştırılacağıve hangi komutsatırı opsiyonlarıile
çalıştırılabileceğininaçıklandığıalandır.Program fonksiyonlarıiçinfonksiyonlarınaldığı
parametrelerinlistesi ve fonksiyontanımınıiçerenbaşlık(header) dosyasınınadınıiçerir.
 DESCRIPTION:Komutveyafonksiyonhakkındaki detaylıaçıklamametnidir.
 EXAMPLES: Her komutiçinbulunmamaklabirlikte komutunkullanımıhakkındaörnekler
barındıran bu bölümkullanıcınınkomutuhızlıbiçimde kullanmayabaşlamasınıkolaylaştırır.
 SEE ALSO: Komutlaveyafonksiyonlailgili diğerkomutlar,fonksiyonlar,dosyalarv.d.bilgileri
içerir.
Manuel dosyalarınınbaşlık alanının yanındaparanteziçinde birrakamgörünür:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
73
Yukarıdaki 2 örnektenbirincisinde “passwd”adınınyanında(1) ikincisinde ise (5) rakamıgörünüyor.
Bununnedeni “passwd”adınınhembirkomutadı olması,hemde bir dosyaadı olması ve man page’lerin
farklıkategorileraltındasınıflandırılması.Bugörülenrakamlardailgili kategorilerinnumaraları.
Man page kategorileriaşağıdaki gibidir:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
74
 1 – Genel komutlar
 2 – Sistemçağrıları (systemcalls)
 3 – C standartkütüphanesinde bulunanfonksiyonlar
 4 – Özel dosyalar(genellikle /devdizinialtındabulunancihazdosyaları) ve sürücüler
 5 - Dosyaformatları
 6 – Oyunlarve ekrankoruyucular
 7 – Çeşitli kaynaklar
 8 – Sistemyönetimkomutlarıve işletimsistemi servisleri(daemons)
Eğer birdenfazlakategorilerdebulunanbirkelime aranırsa“man3 printf”formatında,manuel dosyası
kategori bilgisi de belirtilerekgörüntülenmelidir.
“man” komutuayrıca biranahtar kelime ilearamayıda destekler.“man –karamakelimesi”formatında
kullanılanbudurumdaarama kelimesi komutadıve kısa açıklamasatırında görünentümbaşlıklar
listelenir:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
75
VII.Kullanıcı Yönetimi
Kullanıcıyönetimi
Unix / Linux sistemlerde kullanıcıveritabanı“passwd”dosyasındabulunur:
Bu dosyadaki kayıtlarınformatışu şekildedir:
[KullanıcıAdı]:[ParolaHashi]:[KullanıcıIDsi]:[GrupIDsi]:[HomeDizini]:[ÖntanımlıShell]
Kullanıcıadı kullanıcıylailgili işlemlerdekullanılır,ancakişletimsistemi içinkullanıcıyıifade edenasıl bilgi
“KullanıcıID” bilgisidirve erişimhaklarıbuIDdeğerine göre değerlendirilir.AynıIDdeğerinebirdenfazla
kullanıcısahipolabilir.Bunagöre IDdeğeri “0” olanbir başkakullanıcı adı da bulunabilirve “root”
kullanıcıadıyla kullandığımızkullanıcıile aynıerişimhaklarınasahipolacaktır.Buözellikgenellikle Unix
sistemyöneticileri tarafından“root”kullanıcısınınşifresininunutulmasınakarşıyedekyönetici hesabı
amacıyla kullanılır.
Kali üzerinde pekçoköntanımlıkullanıcıgelir.Ancakbunlardansadece “root”kullanıcısısisteme
interaktif shell bağlantısıkurabilir.BudaUnix sistemyöneticilerinineskidenberi uyguladığıgeçersiz
öntanımlıshell ayarı ile sağlanır.“/etc/passwd”dosyasındatanımlıöntanımlıshell uygulamalarını
incelediğimizde aşağıdaki listeyi görüyoruz:
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
76
Görüneno ki root kullanıcısıdışında “couchdb” ve “postgres”kullanıcılarıiçinöntanımlıshell olarakbash
tanımlanmış.Ayrıca “arpwatch” ve “speech-dispatcher”kullanıcılarıiçinde “/bin/sh”shell’i tanımlanmış.
Bu durum“root” dışında yukarıda sayılankullanıcıların da sisteme shell erişimiyapabileceği anlamına
geliyorolabilirmi?Bununcevabınıverebilmekiçinbirde “/etc/shadow”dosyasınagözatmamız
gerekiyor.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
77
“/etc/passwd”dosyasındaki kayıtlarınformatınıaçıklarken2.alanda parolahash’ininbulunduğunu
söylemiştik.Ancakbudosyadaki bualantümkullanıcılariçin“x”karakteri ile tanımlanmış.Bunun
nedeninibirazdanaçıklayacağım.Parolahash’lerieğer“/etc/passwd”dosyasındabuşekilde
tanımlanmışsaasıl “hash”değerleri “/etc/shadow”dosyasındatanımlanmaktadır.
Yukarıda geçerli biröntanımlıshell’esahipolankullanıcılararasındasadece “root” kullanıcısınınbir
parolahash’ine sahipolduğunugörebilirsiniz.Hiçbirhashdeğeri “!”veya“*” olamayacağınagöre diğer
kullanıcıhesaplarınaloginolmakmümkündeğildir.(“*”hiçparolaoluşturulmamış,“!”ise hesap
kilitlenmişanlamınagelmektedir.) DolayısıylaKali dağıtımıöntanımlıolaraksadece “root” kullanıcısıile
loginolabilecekşekilde dağıtılmaktadır.
“/etc/shadow”dosyasınınvarlıkamacını açıklayabilmekiçinöncelikle “/etc/passwd”ve “/etc/shadow”
dosyalarınınerişimhaklarınıinceleyelim.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
78
Yukarıda gördüğünüzgibi “/etc/passwd”dosyasınınerişimhaklarıtümkullanıcılarınbudosyayı
okuyabileceği biçimdeayarlanmıştır.Bununnedeni tümkullanıcılarınkullandığıkomutlarınbirkısmının
passwddosyasındaki bilgileri kullanmaihtiyacıdır,örneğinkomutuçalıştırankullanıcınınhome dizininin
bilme ihtiyacı,dosyaerişimizinlerinianlamasıgerekenkomutlarınkullanıcıID’si ve kullanıcıadı
arasındaki dönüşümüyapabilmesiihtiyacıgibi.Eğerparolahashdeğerleri budosyaiçinde tutulursa
sisteme erişebilentümkullanıcılarkendikullanıcılarınınve diğertümkullanıcılarınparolahash’lerini elde
edebilirler.Parolahash’leri elde edildiktensonraçevrimdışıparolakırmasaldırılarına tabi tutulabilirler.
İşte bu nedenleparolahash’leri sadece “root”(yani userID’si “0”olankullanıcı veyakullanıcılar)
tarafındanerişilebilecekolan“shadow”dosyasındasaklanırlar.
Bununlabirlikte herkullanıcınınkendi parolasınıdeğiştirebilmesigerekmektedir.“passwd”komutuyla
yapılanbu işlemingerçekleştirilebilmesi içinbukomutunerişimhaklarınınçalışmaanında“root”
kullanıcıseviyesine yükselmesigerekmektedir.Buhakkın“s” bittanımı ile yapıldığını dahaönce
açıklamıştık.Bu komutunerişimhaklarındaexecuteyetkisininyerinde “s”harfini görmemizinsebebi
budur,çünkü“passwd”komutu“shadow”dosyasındadeğişiklikyapabilmelidir.
Kullanıcıyönetimi ileilgili birbaşkaönemli dosyada“/etc/group”dosyasıdır.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
79
[GrupAdı]:[GrupParolaHashi]:[GrupIDsi]:[GrupÜyeleriListesi]
Grup parolası nedirderseniz,varolmasebebi “newgrp”komutuile başkabirgrubundahaklarınasahip
olabilmektir.Ancakgrupparolasıpaylaşılanbirparolaolduğundanve pekde kullanımihtiyacı
doğmadığındangenellikle tanımsızolur.
Her kullanıcınınpasswddosyasıkaydındabirgrup ID’si bulunur.Ancakbirkullanıcıbirdenfazlagrubun
üyesi olabilirve butanımlamagroupdosyasındayapılır.Yukarıdaki örnekte sadece “audio”grubuiçin
“pulse”kullanıcısıbelirtilmiş.”pulse”kullanıcısının“passwd”dosyasındaki tanımınabaktığımızdaise bu
kullanıcınıngrup ID’sinin126 olduğunugörüyoruz.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
80
Kali dağıtımının genel amaçlıUnix / Linux sistemlergibi ciddi birkullanıcıve grupyönetimine ihtiyaç
bulunmadığındanneredeysehiçgrupmantığı kullanılmamışkullanıcılariçin.
ÖntanımlıKali dağıtımında shell erişimi mümkünolarakbulunantekkullanıcıolan“root” kullanıcısının
parolahash’ini ve “shadow”dosyasındaki diğerkayıtalanlarınıinceleyelim.
BTRiskBilgi Güvenliğive BTYönetişimHizmetleri
KALİLİNUX HAKKINDA HERŞEY
81
“shadow”dosyasındaki kayıtformatıaşağıdaki gibidir:
 Kullanıcıadı: “root”
 Parolahash’i ve diğerhashbilgileri:
$6$VcS1CHvP$UYi9fhLxsvVB7bVz8E06yPaBkseiJ8UlPHqphUeEgpZnxDqZx5bJFpDw3aM4gnSj007
9Wbj15XFJG6gRHUfBh/
 Parola’nınson değiştirildiği tarih(Unix epoch’tanitibarengüncinsinden): 16925 (4 Mayıs 2016)
 Parola’nındeğiştirilebileceği enyakıngün(0 herhangi birzamandeğiştirilebileceğianlamına
gelir):0
 Parola’nınkaç günsonra değiştirilmeye zorlanacağı(99999 sınırsız süre boyunca
değiştirilmeyebileceği anlamınagelir): 99999
 Kullanıcınınkaç gün öncedenparoladeğişikliğihakkındauyarılacağı: 7
 Parolakullanımsüresi dolduktankaçgünsonrahesabınkilitleneceği: Tanımsız
 Hesabınkilitlendiği tarih(Unix epoch’tan itibarengüncinsinden): Tanımsız
 Rezerve alan(dahasonrakullanılmaküzere ayrılmıştır)
Parolahash’i ve diğerbilgilerise aşağıdaki gibi:
 Hash türü
 $1 = MD5
 $2 =Blowfish
 $2a=eksblowfish
 $5 =SHA-256
 $6 =SHA-512
 Saltdeğeri
 Hash değeri
Hash alanındaki bölümler“$” karakteri ile ayrılmış.İlkbölümhashhesaplamaalgoritmasınıifade ediyor.
Bu bilgiyi yukarıdadagörüldüğügibi /etc/pam.d/common-passworddosyasıiçinde de görebiliyoruz.
İkinci bölümise yine Unix’e hasgüvenlikartırmaönlemlerindenbirisi.HatırlarsanızUnix /Linux sistemler
çok kullanıcılısistemlerve tümkullanıcıların“passwd”dosyasınıgörme ihtiyacıvar demiştik.Bu
durumdasistemi kullananbirbaşkakişinin de benimparolamlaaynıparolayasahipolmasıhalinde hash
değerleri aynıolacaktıve benbu durumugördüğümde diğerkullanıcınınparolasınıöğrenmişolacaktım.
Salt(tuz) değerininhashhesaplamadenklemine parolailebirlikte girmesihembudurumuortadan
kaldırıyor(çünküparolalarımızaynı olsa da saltdeğerleri farklıolacağındanhesaplananhashdeğerleri
farklıolacak) hemde rainbowtablosaldırılarıdediğimizparolahashkırma saldırılarınınetkinliğini çok
azaltıyor.Rainbowtablolarıolasıtüm parolalarınhash’lerininuzunbirzamaniçinde hesaplandığıve bu
değerlerin saklandığıtablolar.Dolayısıylabirhashele geçirdiğinizdeçokkısabir sürede butablolar
sayesinde parolayıkırabiliyorsunuz.Ancaksaltdeğeri devreyegirdiğindeparolanınhash’inin
hesaplanmasıve saklanmasıiçingerekli kaynaklargeometrikolarakartıyor.Bunedenle saltkullanımı
parolahash güvenliğiniçokartırıyor.
Kali’ninöntanımlıolaraksadece “root”kullanıcısınıninteraktif kullanabileceğişekilde geldiğini
söylemiştik.Şimdi yeni birkullanıcıekleyelim.
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey
Kali Linux Hakkında Herşey

More Related Content

What's hot

Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBGA Cyber Security
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ BGA Cyber Security
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6BGA Cyber Security
 
Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Mehmet Ince
 
Hacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziHacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziBGA Cyber Security
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuMehmet Caner Köroğlu
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3BGA Cyber Security
 
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiMetasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiFatih Ozavci
 
Caldera İle Saldırı Simülasyonu
Caldera İle Saldırı SimülasyonuCaldera İle Saldırı Simülasyonu
Caldera İle Saldırı SimülasyonuBGA Cyber Security
 
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı Analizi
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı AnaliziKurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı Analizi
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı AnaliziBGA Cyber Security
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMABGA Cyber Security
 
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriPentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriBGA Cyber Security
 
Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)BGA Cyber Security
 

What's hot (20)

Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders NotlarıBeyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
Beyaz Şapkalı Hacker Eğitimi Yardımcı Ders Notları
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
LINUX, WINDOWS VE AĞ SİSTEMLERİ SIZMA TESTLERİ
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
 
Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101
 
Hacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem AnaliziHacklenmiş Windows Sistem Analizi
Hacklenmiş Windows Sistem Analizi
 
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım KılavuzuNmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
Nmap101 Eğitim Sunumu - Nmap Kullanım Kılavuzu
 
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim SunumuBTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
BTRİSK Web Uygulama Güvenliği Denetimi Eğitim Sunumu
 
Kesif ve Zafiyet Tarama
Kesif ve Zafiyet TaramaKesif ve Zafiyet Tarama
Kesif ve Zafiyet Tarama
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 1, 2, 3
 
Holynix v1
Holynix v1Holynix v1
Holynix v1
 
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim RehberiMetasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
Metasploit Framework - Giris Seviyesi Guvenlik Denetim Rehberi
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 1
 
Caldera İle Saldırı Simülasyonu
Caldera İle Saldırı SimülasyonuCaldera İle Saldırı Simülasyonu
Caldera İle Saldırı Simülasyonu
 
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirmeWeb uygulama açıklıklarından faydalanarak sistem ele geçirme
Web uygulama açıklıklarından faydalanarak sistem ele geçirme
 
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı Analizi
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı AnaliziKurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı Analizi
Kurumsal Ağlarda Log İnceleme Yöntemiyle Saldırı Analizi
 
GÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMAGÜVENLİK SİSTEMLERİNİ ATLATMA
GÜVENLİK SİSTEMLERİNİ ATLATMA
 
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik TestleriPentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
Pentest Çalışmalarında Kablosuz Ağ Güvenlik Testleri
 
EXPLOIT POST EXPLOITATION
EXPLOIT POST EXPLOITATIONEXPLOIT POST EXPLOITATION
EXPLOIT POST EXPLOITATION
 
Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)Tcpdump ile Trafik Analizi(Sniffing)
Tcpdump ile Trafik Analizi(Sniffing)
 

Similar to Kali Linux Hakkında Herşey

windows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over clusterwindows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over clusterÇözümPARK
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma sonBGA Cyber Security
 
Oracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumOracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumAnar Godjaev
 
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıZararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıBGA Cyber Security
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)kyasar
 
Biricikoglu Islsisguv Sunum
Biricikoglu Islsisguv SunumBiricikoglu Islsisguv Sunum
Biricikoglu Islsisguv Sunumeroglu
 
vSphere Integrated Containers
vSphere Integrated ContainersvSphere Integrated Containers
vSphere Integrated ContainersVahric Muhtaryan
 
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...BGA Cyber Security
 
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve YönetimiAçık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve YönetimiBilgiO A.S / Linux Akademi
 

Similar to Kali Linux Hakkında Herşey (11)

windows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over clusterwindows server 2008 r2 hyper-v fail over cluster
windows server 2008 r2 hyper-v fail over cluster
 
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   sonAçık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma   son
Açık kaynak kodlu uygulamalar ile adli bilişim labaratuarı kurma son
 
Oracle 10g Database Server Kurulum
Oracle 10g Database Server KurulumOracle 10g Database Server Kurulum
Oracle 10g Database Server Kurulum
 
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab KitabıZararlı Yazılım Analizi Eğitimi Lab Kitabı
Zararlı Yazılım Analizi Eğitimi Lab Kitabı
 
Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)Linux Sürücü Geliştirme (Linux Device Driver Development)
Linux Sürücü Geliştirme (Linux Device Driver Development)
 
Biricikoglu Islsisguv Sunum
Biricikoglu Islsisguv SunumBiricikoglu Islsisguv Sunum
Biricikoglu Islsisguv Sunum
 
vSphere Integrated Containers
vSphere Integrated ContainersvSphere Integrated Containers
vSphere Integrated Containers
 
linux-enterprise-cluster
linux-enterprise-clusterlinux-enterprise-cluster
linux-enterprise-cluster
 
BTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi EğitimiBTRisk Android Mobil Uygulama Denetimi Eğitimi
BTRisk Android Mobil Uygulama Denetimi Eğitimi
 
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
IstSec'14 - Çağrı ERSEN - Açık Kaynak Sistemlerle Siber Saldırı Gözetleme Sis...
 
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve YönetimiAçık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
Açık Kaynak Sistemlerle Siber Saldırı Gözlemleme Sistemi Kurulum ve Yönetimi
 

More from BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri

More from BTRisk Bilgi Güvenliği ve BT Yönetişim Hizmetleri (20)

BTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale EgitimiBTRisk - Siber Olay Tespit ve Mudahale Egitimi
BTRisk - Siber Olay Tespit ve Mudahale Egitimi
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-3
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-2
 
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-1
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-1BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-1
BTRisk X86 Tersine Mühendislik Eğitim Sunumu - Bölüm-1
 
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 2
 
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
BTRisk Zararlı Yazılım Analizi Eğitimi Sunumu - Bölüm 1
 
Yazıcı Güvenliği
Yazıcı GüvenliğiYazıcı Güvenliği
Yazıcı Güvenliği
 
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMUBTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
BTRISK ISO27001 UYGULAMA EGITIMI SUNUMU
 
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi EğitimiBTRisk iOS Mobil Uygulama Denetimi Eğitimi
BTRisk iOS Mobil Uygulama Denetimi Eğitimi
 
Unix Denetim Dokümanı
Unix Denetim DokümanıUnix Denetim Dokümanı
Unix Denetim Dokümanı
 
BTRisk Yazılım Güvenliği Yönetimi Eğitimi
BTRisk Yazılım Güvenliği Yönetimi EğitimiBTRisk Yazılım Güvenliği Yönetimi Eğitimi
BTRisk Yazılım Güvenliği Yönetimi Eğitimi
 
BTRisk Android Uygulamalara Malware Yerleştirme Sunumu
BTRisk Android Uygulamalara Malware Yerleştirme SunumuBTRisk Android Uygulamalara Malware Yerleştirme Sunumu
BTRisk Android Uygulamalara Malware Yerleştirme Sunumu
 
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi SunumuBTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
BTRisk ISO 27001:2013 Bilgilendirme ve İç Denetim Eğitimi Sunumu
 
Bilgi Güvenliği Farkındalık Eğitimi Sunumu
Bilgi Güvenliği Farkındalık Eğitimi SunumuBilgi Güvenliği Farkındalık Eğitimi Sunumu
Bilgi Güvenliği Farkındalık Eğitimi Sunumu
 
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi SunumuBTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi Sunumu
 
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi EğitimiBTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
BTRİSK Web Uygulama Güvenliği Denetimi Eğitimi
 
BTRWATCH ISO27001 Yazılımı
BTRWATCH ISO27001 YazılımıBTRWATCH ISO27001 Yazılımı
BTRWATCH ISO27001 Yazılımı
 
Jmeter ile uygulama katmanında yük testi gerçekleştirme
Jmeter ile uygulama katmanında yük testi gerçekleştirmeJmeter ile uygulama katmanında yük testi gerçekleştirme
Jmeter ile uygulama katmanında yük testi gerçekleştirme
 
ISO 27001:2013 versiyonu ile gelen değişiklikler
ISO 27001:2013 versiyonu ile gelen değişikliklerISO 27001:2013 versiyonu ile gelen değişiklikler
ISO 27001:2013 versiyonu ile gelen değişiklikler
 
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesiAndroid Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
 

Kali Linux Hakkında Herşey

  • 2. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 1 İçindekiler I. Kali Nedir .............................................................3 II.Linux Shell Ortamı................................................7 III.Dosya Sistemi Temel Bilgiler ...............................38 IV. Shell Scripting .................................................57 V. Shell History.......................................................69 VI. Manuel Dosyaları............................................72 VII. Kullanıcı Yönetimi...........................................75 VIII. Ağ Yönetimi ..................................................90 IX. Kablosuz ağ yönetimi.....................................105 X. Linux bilgisayarı router haline getirme ..............121 XI. Ağ teşhis araçları...........................................126 XII. Ağ paketleri izleme araçları...........................130 XIII. Sistem boot süreci ve servis yönetimi...........135 XIV. Zamanlı İşler................................................166 XV. Log altyapısı.................................................183 XVI. IPTABLES.....................................................202 XVII. Arşivleme...................................................205 XVIII. Uygulama Kurulumu..................................209 XIX. Performans ve Kapasite İzleme ....................234 XX. Mount Etme, Dosya Sistemi ve Dosya Paylaşımları 242
  • 3. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 2 XXI. Komut Satırından Dosya İndirme..................268 XXII. Editörler ve dosya izleme araçları................302 XXIII. BTRİSK Hakkında........................................308
  • 4. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 3 I. Kali Nedir Kali bir(genel amaçlıkonulardaDebianpaketleri bazalınarakoluşturulmuş)Linux dağıtımıdır,ancak genel amaçlıolmayıpözelliklesızmatesti,adli bilişimve tersinemühendislikamaçlarıylakullanılmak üzere özelleştirilmiştir.Bualanlailgilenenhemenherkesinmalumuolmaklabirliktebualanayeni ilgi duyanlariçinenbaşta netleştirmekte faydagördüğümbirkonuKali içinde yeralanaraçlarınkendi geliştiricileriolduğu,Kaliekibininbuaraçlariçinde seçtiklerini (tabilisanshaklarıbunaizinveriyorsa) Kali dağıtımına dahil ettikleridir.Kali tümaraçlarıntekrar incelenmesi ve neredeyse sıfırdanbirsızmatesti platformuolarakgeliştirilmişolmasınarağmenyine aynıgruptarafındangeliştirilmişolanBacktrack dağıtımının mirasçısıdır. Kali’nin araçlaraçısından genel eğilimdenfarklılaştığıbirnoktasadece DOS, DDOS ve anoniminterneterişimine özel araçlarıgenellikle yasal projelerdekullanılmadıklarıgerekçesiyle dışlamışolması ve barındırmamasıdır. Resmi sitesi https://www.kali.orgolankali dağıtımıile ilgili dokümantasyonve indirme linklerine bu sitedenerişebilirsiniz. Debianstandartlarınabağlıkalınarak özelleştirilmişbudağıtımın kernel seviyesinde ve güvenlikaraçları uygulamakodlarıseviyesinde gerekligörülenpekçokirili ufaklıözelleştirme yapılmıştır.Yani herhangi bir linux işletimsistemi alınaraküzerinearaçlarbasitbirşekilde kurulmamıştır.Çoğunluğuaçıkkaynak kodluaraçlardanoluşangüvenlikyazılımpaketleriile ilgili bilgi ve yamalinklerinehttp://tools.kali.org websitesindenulaşabilirsiniz. Kali açık bir platformdur.Kali’ninkernel’ınıve Kali üzerinde kurulugüvenlikaraçlarındankaynakkodu mevcutolanpaketlerinkaynakkodlarınıDebianuygulamaindirme araçlarıile indiripihtiyaçlarınızagöre değiştirerektekrarderleyebilirsiniz.Bunapekihtiyacınızolmazmışgibi görünebilir,ancaközelliklesızma testi bulgularınızınfalse pozitif olduğuiddiaedildiğindetespitinize yol açan aracın nasıl çalıştığını anlamakisteyebilirsiniz.Bazıdurumlardadaaracı özelleştirme ihtiyacınızolabilir.Örneğinkullanıcı tespiti açıklığınıbulanbir araç kısıtlı sayıda kullanıcıyıçekiyorduramasiz dahafazlakullanıcı tespit etmekisteyebilirsiniz. Bununlabirlikte doğasıitibarıylapekçoksaldırı aracı barındıran bu dağıtımın geliştirici kadrosuçokgeniş tutulmamış,tümpaketlergeliştiricilertarafındanve de ekiptarafındanimzalanmakta,paketdağıtım repository’leri de enazdatutulmuştur. Buaçıdan açık platformözelliği,güvenlikihtiyacınedeniyle, kısıtlanmışgibi görülebilir.Ayrıcasource listenize diğerrepository’lerineklenmesihemgüvenlikhemde sistemintopluolarakfonksiyonalitesininbozulmamasıiçinönerilmemektedir.Zirapek çokfarklıgüvenlik aracının farklıkütüphane versiyonlarıkullanmasıve kurulumlarısırasındayapabilecekleri değişiklikler birbirlerini olumsuzetkileyebilir.Kali’yitümbukurulumve birlikteçalışmauyumproblemlerinden arındırılmış bir platformolarakdüşünebilirsiniz.Eğerstandartbirlinux dağıtımı üzerine farklıaraçlar kurmakveyakaynakkodundanderlemekgibi birdeneyiminizolduysabusöylenenlerdahaiyi anlaşılacaktır.Uzun sözünkısası elinizinaltındaKali olsadasıradan biryazılımın denenmesiamacıylabile Kali’ninkullanımıönerilmemektedir.Busadece mevcutyazılımlarınçalışmasınıetkilemesiaçısındandeğil kuracağınız yazılımın da çalışmaması riskininbulunmasındankaynaklanmaktadır. Kali’nindiğerlinux dağıtımlarındanbellibaşlıfarklarışunlardır:  Tekkullanıcı ve “root” kullanıcısıolarakkullanılmaküzere tasarlanmıştır.Buyaklaşımnormal
  • 5. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 4 sunuculariçingüvenlikaçısındansakıncalıdır.Ancakkali’de kullanılanaraçlarınönemli birkısmı root erişimhaklarınaihtiyaçduyurmakta ve herdefasındasudoyapmaktankurtulmakiçinbu yaklaşımkullanılmaktadır.  Kali genel amaçlıbirdağıtım değildirve bunedenleağservisi vermesi de beklenmez.Buyüzden sistembaşlangıçkonfigürasyonlarıtümservislerkapalıolacakşekildedir.Elbette sizservisleri açabilirve bunlarıher rebootişlemindensonraaktif hale gelecekşekildeayarlayabilirsiniz.  Kali kablosuzağtestleri içinözelleştirilmişbirkernel kullanmaktadır.Yani ayrıca özel sürücüler kurma ihtiyacıyoktur. Kali’yi Intel ve ARMişlemci mimarileriiçin derlenmiş,ISO, VMWare ve VirtualBox imajlarıhalinde indirebilirsiniz.Kali’ninde sağladığıimkanlarsayesinde masaüstüözelleştirilmiş,barındırdığıpaketler sınırlanmış,kendi geliştirdiğinizscriptleriiçerenv.d.özelleştirmelerilekendiimajlarınızıda oluşturabilirsiniz.Tabi buözelleştirmeyi yineKali’ninwebsitesindenedineceğinizbilgiler,Kali’nin sağladığı scriptlerve bircross compilertoolchaingkullanarakARMmimarisi içinde yapabilirsiniz. RaspberryPi gibi ARMtabanlıgömülüsistemlere Kali kurulumuiçinşulinktenfaydalanabilirsiniz: http://blog.btrisk.com/2015/09/raspberry-pi-kali-kurulumu.html Kali’yi liveolarakbootableISOimajıile birUSB sürücüdenveyasistemüzerinekurarakkullanabilirsiniz. Tüm bu alternatiflerle ilgili detaylıbilgiyiKali’nindokümantasyonsitesindenbulabilirsiniz. Kali ekibi dağıtımlarınbütünlüğükonusundaüzerine düşeni yerinegetirmişdurumda,imzaların doğrulanmasıise kullanıcılarınüzerine düşüyor.DoğrulamaileilgiliprosedürKali’nindownloadslinkinde dokümante edilmiş. Kali dağıtımı OSCP sertifikasyonununhamisi olanve bireğitimşirketiolanOffensive Securityşirketi tarafındandesteklenmektedir.KALILINUXmarkası Offensive Securityşirketine aittir. Kali’yi öğrenmekne demektir? Hacking’insaldırıaraçları kullanmaktanibaretolduğualgısıçokyaygındır ve Kali gibi birortam bu algıyı güçlendirmektedir.Ancakaraçlarlaoynamak, fonksiyonalitelerineaşinaolmayaçalışmaksadece hızlıbir girişyöntemidir. Aslaunutmayıngerçekbirhacker,Kali gibi birplatformuoluşturabilen,teknolojininnasıl çalıştığını merakedenve endetaylıseviyede inceleyebilen,güvenlikaraçlarıgeliştirerekgeliştirdiği testveya saldırı metodlarınıotomatize edebilenkişidir.Çünküaraçlarbelli biramaçiçinvardırlar,amacı anlamadanaracı geliştiremezsiniz.Hacker’ınamacıvar olanteknolojileri anlayıpbuteknolojilerdeki mimari açıklıkları kullanmak,teknolojilerdekiyetersizkonfigürasyonlarıtestedipbunlarıkullanmakve güvenlikkontrollerini otomatikaraçlarvasıtasıylaaşmayaçalışmaktır. Tabi sosyal mühendislikamacıyla belli araçlargeliştirmekde yineamaçlarahizmetetmekiçinyapılmaktadır.Sadece araçlarıve kabaca ne yaptıklarını anlamaksizi biradım öteye götürür,ancakikinci seviyeyeçıkmakistiyorsanızişletimsistemi, işlemci mimarisi,websunucusu,veritabanısunucusugibi temelteknolojileri,ağprotokollerini öğrenmeli ve mutlakakaynakkodusevmelisiniz. Güvenliksektöründe karşılaştığımpekçokkişiyazılımyapmakistemediği içinbualanıseçtiğini söyler. Gerçekşu ki yazılımı anlamayanbirkişi ancak biraraç operatörüolabilir.
  • 6. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 5 Bu nedenlerle Kali’yi öğrenmekdemekaslındagüvenlikyetkinliği olaraksize zannedildiğikadarçokşey katmaz.Ama işinizi biliyorsanızsize ciddizamankazandırır.Tabi Kali’ningeliştirme ekibi içinde yeralmak istiyorsanız,ozamançok daha farklıbir boyutageçersinizki buboyutdapentestuzmanlığındandaha çok birsistemve yazılımuzmanlığı yoluanlamındadır.Gerçekşuki iyi birhacker’ınaynı zamandaiyi bir sistemve yazılım(ve elbette ağ) uzmanıolmasıgerekmektedir,amabuçok uzunbirsüreç gerektirmektedir. Bunlarlabirlikte Kali’yi etkinbiçimde kullanabilmekiçinmutlakave mutlakaenazındantemel seviyede Linux işletimsistemikullanımve yönetimyetkinliğinesahipolmakgereklidir.Buyüzdenbumakalenin teknikiçeriğininönemlibölümütemellinuxbilgisineyöneliktir.Evet,script kiddie(hacker terminolojisinde araçkullanarakhavaatmayaçalışan kişilereverilenad,birdiğerdeyişlehackerergeni) olmakiçinbile temel linux bilgisine ihtiyaçvar. Kali’ninkurulumu Kali’ninkurulumuile diğerlinux dağıtımlarınınkurulumuve hattaWindowskurulumuarasındapekfark yok.Kali dağıtımı daha önce de belirttiğimizgibi ISO,VMWare ve Virtual Box imajlarıolarakelde edilebilir.Kali ISOimajlarıaynızamandabootable,yani live olarakişletimsistemini başlatabilmeye imkanverenimajlar.DilersenizbuimajlarıDVDveyaUSB belleğe de (WindowsdaWin32DiskImager, linuxdaddgibi araçları kullanarak) kopyalayarakbilgisayarınızılive olarakKali Linux işletimsistemiile başlatabilirsiniz.Live işletimsistemi demekaslındadosyasistemi bellektebulunanve yazdığınızverilerin işletimsistemi kapandığındakaybolacağıbirişletimsistemi demek.Bunundışındanormal birişletim sistemindenhiçbirfarkıyok. Kali’yi diskinize yazarakkalıcıyapmakisteseydinizizleyeceğiniztemel adımlarşunlarolurdu(aynıadımlar bir sanal makine kurulumundadageçerli):  Diskinpartitiontablosununoluşturulması (ve diskinilksektörüneyazılması)  Partition’ların ve üzerlerine kurulacak file system’lerininbelirlenmesi(ve işletimsisteminin kurulacağıpartition’ınbelirlenmesi)  Partition’lariçinfile systemformatlamaişleminingerçekleştirilmesi  Kurulumiçinkernel imaj dosyasınınve diğerişletimsistemi uygulamave kütüphanelerinin formatlanmışfilesystem’e yazılması  İşletimsistemi için zamandilimi yerelleştirme,dil,klavye formatıv.b.konfigürasyonunyapılması  İşletimsistemininbootedilmesi Bu işlemleriçinbirerekrangörüntüsüalmayıpekanlamlıbulmadım, çünküne yaptığınızıbilmemeniz durumundagörüntününpekbirfaydasıyok,ayrıca kurulum işlemi siziyeterince yönlendiriyor.Ekran görüntülerinikoysamdabiryıl içinde aynı işlemleriyapanfarklıekranimajlarıylakarşılaşacağınızfarklı bir versiyonçıkmışolacak. Yukarıdaki işlemlerde sizinmüdahalenizi gerektirecekkısımlarınönemli oranıdiskyapılandırmasıylailgili. Kısaca partitionve file systemkonularınınüzerindengeçelim.Ham(raw) birdisksektörve clusteradı verilenbirimlerlebüyüklüğüifade edilentertemizbirtarlayabenzer.İşletimsisteminindiski anlamlandırabilmesi içingerekliilkveri yapısıpartitiontablosudur.Butablodiskinilksektöründen başlar,partition’ıntipi yine ilkbölümlerde belirtilirki işletimsistemipartitiontablosunudaiçerenveri yapısını doğru yorumlasın.Partitiontablosudiskinhangi bölümlerininhangi partition’larolarak
  • 7. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 6 tanımlandığını / bölümlendiğini,herbirpartitiontablosundahangi filesystembulunduğu(ör:FAT, FAT32, NTFS,ext,v.d.),hangi partition’larınsistempartition’ıolduğu(yani bootable birkernel imajı barındırdığını) v.d.bilgileri içerir.Bilgisayar(donanım) ilkaçıldığındaBIOSkodubootable cihazsırasının üzerindengeçerek(ör:CD,USB, HDD, v.d.) içinde veri bulunanve birpartitiontablosubarındıranilk sürücüye erişereksistempartition’ınıbulmayave bupartition’dakiişletimsistemi kernel’ınıyüklemeye çalışır. İşletimsistemi hafızayayüklendiktensonrapartitiontablosupartition’larınyerlerinintespiti ve içlerinde barındırdıklarıfilesystem’e göre kullanıcıyasunulmasınısağlar.Filesystemtemel olarakkendine ayrılan partitionsınırlarıiçinde dizinve dosyahiyerarşisi ve dosyalarınişgal ettiği alanlarınadreslerini takipetmeye yarayanveri yapılarıbarındırır. Bunlar FATgibi basitbir dosyasistemindenNTFSgibi karmaşık birdosyasistemine kadarfarklıkurallarıolanveri yapılarıolabilir.İşte birişletimsistemini kurarkeneğerhambir diskkullanıyorsanızönce diski yapılandırmaihtiyacınızbusebeplerden kaynaklanmaktadır.İşletimsistemininayağakalkabilmesi ve kullanıcıyadosyalarınıyazabileceğive okuyabileceği biralansunabilmesi içinönce diskinyapılandırılmışolmasıgereklidir. Aynı bilgisayarüzerindebirdenfazlabootable işletimsistemi kurmakonusunaburadagirmeyeceğim, ancak bu işlemDOSpartitiontablosundabirdenfazlapartition’ınınsistempartition’ıolarak işaretlenmesive birloaderuygulamasıile mümkün. Linux hakkında temel bilgi Kali birlinux dağıtımı olmaklabirlikte Linux’uöğrenmekiçindoğrubirplatformolduğusöylenemez. Linux hakkındatemel deneyimleri edinmekiçin Ubuntu,Debian,Mintgibi dağıtımlartercihedilebilir. Bununlabirlikte Kali’yi etkinolarakkullanmakiçintemel linux kullanıcıve sistemyönetici bilgisine sahip olmakgereklidir. Linux hakkındahakimiyetinizienüstdüzeye taşımakistiyorsanızLinux FromScratch (http://www.linuxfromscratch.org/) projesiherhalde endoğruyerlerdenbirisi olacaktır.Amabaşlangıç olarakgenel işletimsistemi işlemlerininLinux üzerindenasıl yapıldığındanve Linux’aözel bazıtemel bilgileri belirterekbirgirişyapabiliriz. Kali Linux hakkındaki bundansonraki makalelerdeDebianpaketlerindenfaydalanılarakoluşturulmuş olanKali dağıtımı hakkındadetaylıbilgiyeulaşabileceksiniz.
  • 8. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 7 II.Linux Shell Ortamı Shell ortamı Linux işletimsistemleri ilebirliktemasaüstüortamlarıdageliyor,amalinux’un(vetabi Unix’in) başından itibarenve halenengüçlükullanımpaneli shell ortamıdır.BirUnix sistemyöneticisinintümişlerini GUI ortamlarındahalletmesiçokzordur.Bunedenle shell ortamınıiyi tanımamızlazım. Shell nedirdersenizkısacabirkomutişleyici (commandprocessor) diyebiliriz.Shell komutları kullanıcıdankomutsatırından alabileceği gibi birdosyadandaalabilir.Butürdosyalarascript(betik) dosyasıdiyoruz. Kali’de shell arayüzünüTerminal uygulamasıile başlatabiliriz. Veyasol uygulamaçubuğununenaltındaki seçeneğetıkladıktansonrauygulamaisminiarayabiliriz.
  • 9. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 8 Daha önce de belirttiğimizgibi,normalde genelamaçlıLinux işletimsistemlerine ilk erişimroothaklarına sahipolmayanbirkullanıcıile bağlanılmasıönerilir.Sebebi gayetbasitaslında,süperkullanıcıhaklarıile ne kadar uzunsüre geçirirsenizhatayaptığınızdasisteme zararverme potansiyelinizde artar.Ancak Kali’de özel birkullanımihtiyacımızvarve neredeysesürekli rootkullanıcıhaklarınaihtiyacımızvar.Bu nedenle başlangıçtanitibarenrootkullanıcısıolaraksistemi kullanıyoruz. Root kullanıcıprompt’u“#” işareti ile biter,normal kullanıcılardaise buişaret“$” işaretidir.Elbette bu bir sistemsel kural değilve buişaretçevreseldeğişkenleraracılığıile (ör:PS1 çevresel değişkeni ile) ayarlanabilir.Ancakbuişaretlergeleneksel olarakbuşekilde kullanılır.Çevresel değişkenkonusuna ayrıca değineceğiz.Yukarıdaki şekildende görebileceğinizgibi shell prompt’urootolduğumuzuhem kullanıcıadını prompt’unbaşındabelirterekhemde #işareti ile belli ediyor. Unix ve linux işletimsistemleri üzerinde birdenfazlashell uygulamasıbulabilirsiniz,bunlaracsh(Cshell ), Bourne shell,bash(Bourne shell’inyerini alanuygulama,aynızamandaBourne-againShell’inkısaltması), ksh(Kornshell) örnekolarakverilebilir.Shell uygulamalarıarasındafarklarnelerdirderseniz, fonksiyonaliteleri benzerolsadaheruygulamagibi kendilerine hasayarfarklılıklarıve kullanım kolaylıklarıbulunmaktadır.Bazıtemel komutlarve işlemlertümshell uygulamalarındaaynıolsada
  • 10. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 9 kullandığınızshell ortamınagöre shell ortamınızıayarladığınız startupscript dosyalarıfarklılaşacaktır.Bu nedenle rutinbirshell kullanıcısıisenizve herseferinde bazıenvironmental değişkenleribelirlideğerlere ayarlamanızgerekiyorsabubilgiye ihtiyacınızolacaktır.Ancaksıradan birkullanıcıiçinshell’lerarasındaki farkı bilme ihtiyacıçokdüşüktür,temel linux bilgisi ileshell’inizikullanabilirsiniz. Kali’de Terminaluygulamasınınaçtığı shell uygulamasınınne olduğunumerakederseniz“echo$0” komutunuçalıştırarakbunu görebilirsiniz. Bu komutlailgili olarakiki konudanbahsetmemizlazım.Birincisi “echo”komutu,adındanda anlaşılabileceğigibi bukomutkendisineparametre olarakverilensabitdeğeri veyadeğişkenindeğerini yazıyor.Böyle söylendiğinde kulağaçokbasitgeliyoramao kadartemel birişlevi yerine getiriyorki bu nedenle shell script’lerinde,debugamaçlıolarak,birdosyayabirşeyyazmakiçinv.b.amaçlarlaçoksık kullanılanbirkomuttur.İkinci konuise $0parametresi.Buparametre özel birparametredirve çalıştırılan uygulamayaverilenilkparametrenindeğeriniiçerir.Pekaklayakıngelmese de çalıştırılanuygulamaya verilenilkparametrebuçalıştırılanuygulamanınadıdır. Sonraki parametreler$1,$2, $3 şeklinde gider. $0 parametresininmantıklıbirkullanımalanınısöyleyeyim,örneğingömülüsistemlerde kaynak kısıtından dolayıuygulamakaynakkodları,kullanılankütüphanelerv.d.pekçoknoktadaoptimizasyona gitme ihtiyacıvardır.Gömülüsistemlerdestandartshellkomutlarınınpekçoğubusybox adlıbir uygulamadabarındırılır. Bu komutlarıntamamıda semboliklink ile (semboliklinkidahasonra açıklayacağım) “busybox”uygulamadosyasıile ilişkilendirilir.Bukomutlarçağrıldığındaaslında “busybox”uygulamasıçalıştırılır.“busybox”uygulamasıbuparametre sayesinde aslındakullanıcının hangi komutukullanmakistediğinianlayabilir. Shell’e interaktif olarakerişebildiğimizdençalışmaanındadinamikolarakshelluygulamasıçağrılırken kullanılanparametreleride tektekinceleyebiliriz.Yukarıdayaptığımız işlemde shell uygulamasını çağırırken kullanılanuygulama adınıgörüntülemekoldu.
  • 11. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 10 Peki işletimsistemi hangi shell uygulamasınıbaşlatacağınıneredenbiliyor.Buayar“/etc/passwd” dosyasıiçinde herbirkullanıcıiçinbelirtilenbirdeğerdir. “cat” komutunuve “pipe”(|) işaretini dahasonraaçıklayacağım. “passwd”dosyasınıda dahasonra açıklayacağım, ancak budosyadaroot kullanıcısıile ilgili satırdaensonda“/bin/bash”ifadesine
  • 12. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 11 dikkatiniziçekmekistiyorum.Buradaki değerhangi kullanıcıiçinhangi shell ortamınınkullanılacağını belirtiyor.İşte işletimsistemibashortamınıbaşlatmasıgerektiğinibudeğere bakarakanlıyor.Diğer kullanıcılariçingenellikle “/usr/bin/nologin”değerini görüyoruz.Budeğersayesindebukullanıcılara parolaatanmışsa ve bu parolakırılmışsa bile bukullanıcılarınshell alamamalarısağlanıyor.Buyöntem Unix ortamlarındagüvenlikiçinkullanılanakıllıcayöntemlerdenbirtanesi. Nologinuygulamasınıçağırdığımızda sadece birmesaj yazarak sonlanıyor.Birshell içindenfarklıbirshell açıp açmadığımızı yine echo$0 komutuile kontrol edebiliriz. *Startup Scriptleri* Her shell uygulamasınınkendisinehasstartupscriptdosyalarıbulunabileceğindenbahsetmiştik.Shell scriptingkonusundandahasonrabahsedeceğiz,ancakstartupscriptlerininnormal scriptlerdenfarkları şunlardır:  Startupscriptlerinde (#!/bin/bashgibi) birinterpreterdirective’i bulunmasınagerekyoktur, normal shell scriptlerinde eğeröntanımlıshell kullanılmayacaksabudirective’inilgili shell uygulamasınaişaretedecekbiçimde bulunmasıgereklidir.  Startupscriptlerininçalıştırılmahaklarınıntanımlanmasınagerekyoktur,shell scriptlerinin mutlakaçalıştırılabilirolmasıgereklidir.Bukonuyadosyaerişimhaklarıbölümünde değineceğiz. Kali’de bash’i kullandığımızagöre bushell ile ilgili startup scriptdosyalarınıinceleyelim. İnteraktif loginshell olarakbaşlatıldığında
  • 13. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 12 Bash,interaktif loginshell olarakbaşlatıldığında(yani diyelimki Kali’yeuzaktansshveyatelnetgibibir protokolle eriştiniz,loginoldunuzve birshell ortamınaulaştınız) “/etc/profile”dosyasındabulunan komutlarçalıştırılır. “/etc/profile”dosyasınıniçeriğinebaktığınızdabirshell scriptbarındırdığını görebilirsiniz.Buradayapılan ilkişlemkullanıcıid’sine göre PATHçevresel değişkenininayarlanması,bunun hemenaltındada commandprompt’unmevcutolupolmamasınagöre bazıişlemleryapılıyor. “/etc/profile”dosyasıokunduktanve çalıştırıldıktansonrabashsırasıylaaşağıdaki dosyalarıarar ve bulduğuilkdosyadaki scripti çalıştırır:  ~/.bash_profile  ~/.bash_login  ~/.profile Nedenhem.profile hemde .bash_profile v.d. dosyalarvarderseniz,budosyalarınkullanıcının$HOME dizinindebulunmasıgerektiğini söylemiştik.Eğerbukullanıcıhesabıiçinloginshell’i basholarak ayarlanmışsaherikisi de,farklıbirshell tanımlanırsasadece .profile dosyasındaki komutlar çalıştırılacaktır. Bu nedenle bash’eözel syntax gerektirenkomutların.bash_profile dosyasınayazılması, farklıbir shell kullanılacaksa.profiledosyasınınkullanılmasıönerilir.Ancakbashkullanılmasıhalinde .bash_profile dosyasıvarsasadece budosyadaki komutlarçalıştırılacak,.profiledosyasıdikkate alınmayacaktır. Yukarıdaki dosyaisimlerinde ilginçolabilecekiki konuvar.Bunlardanbirincisi baştaki “~”yani tilda işareti.Buişaretinshell içinözel biranlamıvardır,o da kullanıcınınHOME dizinini ifade etmesidir.HOME
  • 14. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 13 dizini dahaönce de gördüğünüzpasswddosyasındaherbirkullanıcısatırında sondanikinci alanda belirtilendizinadıdır.Örneğinrootkullanıcısıiçinbudeğerin“/root”olduğunuaşağıdagörebilirsiniz. İkinci ilginçkonuise dosyaisimlerininbaşındaki “.”yani noktaişareti.Shell de özel birswitch kullanmadan“ls”yani listkomutunuçalıştırdığınızdalistelediğinizdizinveyadosyaisimlerininbaşında “.” geçendosyalarlistelenmez.Yani birtürgizlenmişdosyahalinegelirler.Buiyi niyetli olarak düşünürsekgenelliklekritikdosyalarınyanlışlıklasilinmeveyabozulmaihtimalini azaltmakiçin geliştirilmişbiryöntemdir. Loginshell’dençıkıldığında Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:  ~/.bash_logout Interaktif shellolarakbaşlatıldığında(örneğindesktoportamınaloginolduktansonraTerminal uygulamasınıbaşlatarak) Eğer varsa aşağıdaki scriptdosyasıçalıştırılır:  ~/.bashrc Sondaki “rc” harfleri “runcommands”ifadesininkısaltmasıdır. *Çevresel değişkenler(environmentalvariables)* Shell ortamındamevcutolanilginçbirfonksiyonalitede çevresel değişkenler.Yukarıdabahsedilen startupscript’lerinönemli birbölümüde buçevresel değişkenlerindeğerlerininbelirlenmesineyönelik.
  • 15. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 14 Önce çevresel değişkenlerneye benzeronugörelim: Setkomutulokal değişkenlerinoluşturulmasıiçinkullanılır.Herhangi birargümanalmadankullanılırsa mevcutlokal ve çevresel değişkenleri listeler.
  • 16. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 15 Yukarıdaki çevresel değişkenlerelbettebelli biramaçiçinvarlar.Öncelikleçevreseldeğişkenlerinana kullanımalanlarındanbirisindebahsedeyim.Shell scriptingiçinçevresel değişkenlerpratikbirparametre aktarım alanıdır. Bir shell oturumuiçindebirshell script’i çalıştırdığınızdashell prosesine(parent)bağlı bir alt(child) prosesbaşlatılır.Ancakparentproseste tanımlıolantümçevresel değişkenlerchildprosese
  • 17. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 16 de aktarılır. Bu aktarım teknikolarakçevresel değişkenlerdenoluşanbirarray’inadresininbaşlatılan prosese parametre olarakverilmesi şeklindegerçekleşir.Böylece bazıönemli tanımlarınaktarımıiçin başlatılanbirscript’e parametre verilmesigerekmez.Aynıdurumsadece shell script’leriçindeğilbinary uygulamalarve diğerdillerdeki scriptleriçinde geçerlidir.Shell script’lerdışındaki uygulamalardaki tek temel farkçevresel değişkenlere doğrudanerişememeleri,uygulamanınyazıldığıdilinsağladığıbirAPI fonksiyonunukullanmalarıgerektiğidir.Örneğin“C”dilinde bununiçin“getenv”fonksiyonunun kullanılmasıgereklidir. Shell scriptiçinde ise aşağıdaki ifadeile birçevreseldeğişkenindeğerine erişilebilir: Çevresel değişkeninbaşınaeklenecek“$”işareti budeğişkenindeğerine erişmekiçinyeterlidir.Teknik olarakyukarıda gerçekleşenişlemvariable substitutionişlemidir.Bukonuyadahasonradeğineceğiz. Yeni birçevresel değişkentanımlamakiçinse şuişlemlerinyapılmasıgereklidir:
  • 18. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 17 “export”komutuile tanımlananbirdeğişkençevresel değişkenolacak,bushell içindenbaşlatılanbaşka bir prosesbuçevresel değişkenindeğerineerişebilecektir. Değişkendeğeriniaşağıdaki gibi tanımlamışolsaydımbudeğişkensadece içinde bulunduğumuzshell’e özel olacaktıve childproseslertarafındanerişilemeyecekti:
  • 19. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 18 Değişken,variable substitutionve commandsubstitutionkonularınashell scriptingbölümünde daha detaylıdeğineceğiz. *Concurrent(eşzamanlı),batch(sıralı) ve conditional (koşulabağlı) çalıştırma* Shell ortamınınsağladığı birbaşka imkandaeş zamanlı,sıralı ve koşulabağlı çalıştırma imkanlarıdır. Yukarıdaki işlemde birinci komut“&”işareti ile arkaplana(background) atılmakta,ancakçalışmaya devametmekte ve standartoutput(stdout) olarakekranıkullanmayadevametmektedir.(background ve stdoutkonusunubirazdanaçıklayacağız) İkinci komutise önplanda(foreground) çalışmayabaşlamaktave buşekildedevametmektedir.Çıktılara dikkatederseniziki farklıprosesinçıktılarınınbirbirlerininarasınagirdiğini farkedebilirsiniz.
  • 20. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 19 Sıralı çalıştırmada çok ilginçbirdurumyok,önce birinci komutçalışıyor ve çalışmasını tamamlıyor,birinci prosestamamlandıktanhemensonraikinci komutçalışmayabaşlıyor. Buradaki sıralı (batch) çalıştırma script içinde komutçalıştırmayabenzerbirdurum, ancakaynı satırda birdenfazlakomutusıraylaçalıştırmaktanbahsediyoruz.
  • 21. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 20 Koşulabağlıçalıştırmada “&&” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarıile sonuçlandığında(returnkodu0 olduğunda) çalışmaktadır.Eğerbirinci komutbaşarıile sonuçlanmazsa ikinci komutçalışmamaktadır. Yukarıda ilkkomutunhataaldığı durumdaözel değişken“$?”sonçalışan prosesinreturnkodunuiçerir. Bu değere baktığımızda0’dan farklı(1) birdeğertaşıdığını görebiliriz.Budurumprosesinhataile sonuçlandığınaişarettir.
  • 22. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 21 Koşulabağlıçalıştırmada “||” kullanılmasıhalinde ikinci komutancakbirinci komutbaşarısızolduğunda (returnkodu0’dan farklıolduğunda) çalışmaktadır.
  • 23. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 22 *Proses’leri arkaplanve önplandaçalıştırma imkanları* Bazençalıştırmak istediğimizprosesçokuzunsürebilir.Ancakbizaçmışolduğumuzshell’i kapattığımız anda bu shell’denbaşlattığımızproseslerde sonlanacaktır.Böyle birdurumda“nohup”komutunu kullanabiliriz.Bu“nohang up”kelimelerininkısaltmasıolanbirifadedir. Yaptığıişlemshell kapansadahi prosesin(bilgisayar/sunucushutdownedilmediğisürece)çalışmasınadevametmesini sağlamaktır. Nohupkomutuile çalıştırılankomutbizshell’i kapatsaydıkdaçalışmayadevamedecekti.Nohupeğer çıktı (stdout) ve hataçıktısı (stderr) yönlendirmesiyapılmamışsaçalıştırdığıkomutlarınçıktılarını içinde bulunulandiziniçinde oluşturacağınohup.outdosyasınayazar.Eğerbu uyarıyı ve çıktının herhangi bir yere yazılmasınıistemiyorsanızaşağıdaki işlemiyapmanızgerekir.
  • 24. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 23 Bu basitsatırın içinde ağırbir içerikvar.Birincisi inputve outputredirectionkonusu,ikincisi ise /dev/null gibi özel Unix /Linux dosyalarıhakkındabilgi.Bukonulardaörnekleriayrıcavermekkaydıylaözetolarak bir girişyapacağım. Küçüktür(<) işareti ile belirttiğimizdosyanohupkomutuiçinbirinputdosyasıhaline geliyor.Yani komut girdisini komutsatırındandeğil de belirtilendosyaiçeriğindenalıyor. Büyüktürve ampersand(>&) işaretleri hemçalıştırılankomutunçıktısınıhemde hata mesajlarınıbu işaretlerdensonrabelirtilendosyayayönlendiriyor,buyüzdenekrandaherhangi birçıktıgörmüyoruz. Stderrçıktılarının stdoutçıktıları ile birlikte yönlendirilmesi içineski modayol (2>&1) ifadesidir.Farklıbir kaynaktabu şekilde biryönlendirme de görebilirsiniz.2ve 1 rakamlarının geldiği yerise stdinfile descriptor’ının0,stdout file descriptor’ının1ve stderr file descriptor’ının2olmasıdır (Unix’te herşeyin bir dosyaolduğunuhatırlayın).Filedescriptornedirdersenizbu integerdeğerişletimsisteminin üzerinde çalışanuygulamalarabudosyalaraerişimiçinverdikleri “handle”değeridir.Uygulamalarbu değerleri dosyalaraokuma,yazma,silmegibi erişimleriçinkullandıklarıkütüphanefonksiyonlarına parametre olarakverirler. /devdizini filesystemhierarchystandard’agöre device dosyalarınıntutulduğudizin:
  • 25. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 24 Unix’te herşeybirdosyadır./dev/null iseözel birdosyadır.Budosyayıkara delikolarakdüşünebilirsiniz. Bu dosyayayazdığınız herşeyboşluğagider,budosyadanaldığınız girdi ise hiçbirşeydir.Bunabenzer diğerdosyalaraşunlarıörnekverebiliriz:  /dev/zero(süreklisıfırüretir)  /dev/random(rastgele sayıüretir) Bir prosesi baştanarkaplandabaşlatabileceğinizgibiönplandabaşladıktansonradaarka plana gönderebilirsiniz.Ancakbununiçinöncelikleönplandaçalışanprosesi Ctrl+Zkısayol tuşuile duraklatmanız(suspendetmeniz) gerekir.(TeknikolarakproseseSIGTSTPsinyali göndermekten bahsediyoruz).
  • 26. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 25 Yukarıda öncelikletoplam100 defa192.168.163.1 IPadresine pingatacakkomutubaşlattıktanve çıktısını da /dev/null dosyasınayönlendirdiktensonra(evetbiliyorumbirazanlamsızoldu,amaekranı kirletmesinistedim) Ctrl+Zkomutuile buprosesiduraklattım.Dahasonra“bg” komutuile önplanda olanprosesi arkaplana attım.Hemenardından budefa100 adetping(echorequest) işlemini gerçekleştirmeküzere farklıbirkomutçalıştırdım.Bunuda arka plana attıktansonra “jobs”komutuile arka plandaki tümişleri listeledim.“fg%1” komutuile bunlardanbirincisıradaolanınıön planageri aldım. *Proses’lere sinyal gönderme* Şimdi sinyal konusunave bununshell ortamıile ilgiliuygulamasınageçelim.Diyelimki shell’denbir proses’i başlattınızamaçok uzunsürdü,sizde buproses’i sonlandırmakistiyorsunuz.Elbette shell erişiminisağlayanTerminaluygulamasınıçarpı düğmesindenkapatmakbirçözüm, çünküterminal uygulamasındanbaşlatılanshell uygulaması(bash) ve bundanbaşlatılanproses’inizbirbirleri ile parent childprocessilişkisine sahipve bunedenleterminaluygulamasıkapandığındabaşlattığınızproses’de (nohupkomutuylabaşlatmadıysanız) sonlanacaktır.Ancakbupekpratikbiryöntemdeğil.Onunyerine işletimsistemine artıkprosesi sonlandırmakistediğiniziiletmenindahapratikbiryoluolmasılazım.Bu ve benzeri diğerihtiyaçlarnedeniyleLinux (ve diğerişletimsistemleri) sinyal(signal) altyapısınısunuyor. Sinyal altyapısıçalışmaktaolanproses’lere birinterruptgöndermeimkanısunuyor.Yani prosesinkendi iç dinamiklerindenbağımsızbaşkabirproses(veyakullanıcınınyapacağıbir işlemdiyelim) diğerproses’e standartbir mesaj gönderiyor.Buteknikolarakasenkronbirmesaj ve birsoftware interrupt.Hardware interruptkonusudahaçokişlemci mimarisi ile birlikte anlaşılabilecekbirkonu,buyüzdengerekli genel bilgi ihtiyacıdahafazla,ayrıca shell kullanımıile de birilgisiyok.
  • 27. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 26 Kendisinebirsinyal gönderilenbirprosesbusinyale aşağıdaki şekillerdetepki verebilir:  Sinyali bilerekve isteyerekgörmezdengelebilir  Sinyali yakalayarakkendiistediği birbiçimdeyanıtverebilir  Kendi içinde hiçbirdüzenleme yokise sinyale öntanımlıtepkiyi verebilir Yukarıdaki ilkiki işleminnasıl yapılacağıuygulamanıngeliştirildiği dilve budilinkullandığıkütüphane imkanlarıile ilgili birkonu,buyüzdendetayınagirmeyeceğiz.Ancakbirprosesinsinyali yakalamasıve bunaöntanımlı tepkinindışındakendi istediği tepkiyi verenbiruygulamaörneği olarak“hping” uygulamasınıörnekverebiliriz.“hping”uygulamasıCtrl+Ztuşlarıile kendisinesuspend(SIGTSTP) sinyali gönderildiğinde businyali gönderdiği paketlerinTTLdeğerlerini artırmakveyaazaltmakiçin kullanabilmektedir.Aslındabuoldukçaakıllıcabiryöntem, çünkükullanıcıdanuygulamaçalışırkengirdi almakiçinbu asenkronkanal zatenişletimsistemi tarafındansağlanmış. Yukarıdaki örnekte hping’i www.btrisk.com sunucusunayönelikolarakTCPSYN (-S) bayrağıişaretli, başlangıçTTL değeri 0 (-t0), 80 portuna(-p80) yönelikve Ctrl+Ztuşlarıile TTL değeri herseferinde 1 artacak biçimde (-z) paketgöndermeyebaşlıyoruz.HerCtrl+Ztuşlarınabasıldığında TTL değeri 1 artıyor. TTL değeri 2 olduğundanormalde“TTL0 duringtransit”yanıtını görmeye devametmemizlazımçünkü www.btrisk.com sunucusu2hop’tandahauzakta.Ancak görünenoki sanal makine’dençıkanpaketlerin TTL değerleri orijinal değerlerindenfarklılaşarakhostmakineninöntanımlıdeğerinialıyorlar.Bukonu kafanızı karıştırmasın diye açıklamakistedim.
  • 28. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 27 Tekrar sinyal konusunadönersek,normaldebirproses’e komutsatırındanbirsinyal göndermekistersek “kill”komutunukullanabiliriz.
  • 29. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 28 “kill”komutununöntanımlıdavranışıSIGTERMsinyali göndermekşeklinde,amaismi yanıltıcıolabilir, herdurumdaprosesi sonlandırmakamacıylakullanılmasışartdeğil.Sinyal türleriniyukarıda görebilirsiniz,signal.hdosyasındasinyallerinanlamlarınailişkincommentbilgileride görülebilir.
  • 30. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 29 Arka plandaki (background) birprosese sinyal göndermenintekyolu“kill”komutudur.Shell ortamında ise yukarıdagördüğünüzCtrl+Ztuşlarının yanı sıra Ctrl+C tuşları ile de önplandaki (foreground) prosese sinyal gönderme imkanıvardır.Ctrl+C ile gönderilensinyal SIGINTsinyali olupbusinyalinöntanımlıetkisi prosesinterminateedilmesidir,elbette uygulamakoduiçindeelealınabilirveyaihmal edilebilir. Yukarıda pingkomutu100 adetistekgöndermeküzere başlatılmış,ancakbusayı tamamlanmadan Ctrl+C tuşlarıile önplandabulunanbuprosessonlandırılmıştır. Yine shell ortamındankullanılantuşkombinasyonlarındanCtrl+Dtuşlarıdasıklıklakullanılan tuşlardandır.Bu tuşkombinasyonuaktif proses’eEOF(dosyasonu) karakteri gönderir.Bukarakterin prosesüzerinde oluşturacağıetki tamamenprosesle ilgilidir.Butuşkombinasyonugenellikleshell’in “exit”komutuylakapatılmadanCtrl+Dtuşlarıile kapatılmasıiçinkullanılır. *Standard input(stdin),standardoutput(stdout),standarderror(stderr),girdi ve çıktıyönlendirme* Unix’te (ve dolayısıylaLinux’ta) herşeyinbirdosyaolduğundansözetmiştik.Uygulamalarelbette dosyadan,ağdangelenisteklerden,komutsatırından,çevreseldeğişkenlerdenv.d.kaynaklardangirdi alabilirve bukanallaraçıktı iletebilir,ancakkomutsatırındankullanılanpekçokuygulamagirdi olarak klavyedenkomutsatırınayazılanverilerikullanırve çıktılar ile hatamesajlarınıda komutsatırına yazar. Ancakshell ortamınormalde komutsatırından okunangirdileribirdosyadanokumayıve yine çıktılarile hata mesajlarınıda birdosyayayazmayı destekler.
  • 31. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 30 Yukarıda btrisk.txtadlıdosyanıniçeriğini “cat”komutuile görüntülüyoruz.“cat”komutunormalde stdoutve stderr hedefleriolarakshell ortamınıkullanıyor.
  • 32. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 31 Şimdi çıktı yönlendirme yöntemini kullanarakbtrisk.txtdosyasınıniçeriğini cikti.txtdosyasınayazıyoruz. Gördüğünüzgibi buişlemsırasındashell’deherhangi birdosyaiçeriğigörülmüyor.Dahasonracikti.txt dosyamızagöz attığımızda btrisk.txtdosyamızıniçeriğininbudosyayayazılmışolduğunugörüyoruz. Bu denemede“olmayandosya.txt”adlıbirdosyanıniçeriğinilistelemeye ve buçıktıyı da “cikti.txt” dosyasınayönlendirmeye çalışıyoruz.Ancakbudefashell’de birhatamesajıile karşılaşıyoruz.Demekki uygulamahatamesajlarınıstdoutkanalınayazmıyor,stderr halenshell ortamınıişaretediyor.“cikti.txt” dosyamızıniçeriğinde de herhangibirveri göremiyoruz.
  • 33. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 32 Hemhata mesajlarınıhemde standart çıktıyı tekbirdosyayayönlendirmekiçin“>”işareti yerine “&>” karakterlerinikullanabiliriz.Özellikle arkaplanda(background) çalıştırdığınızişlerde önplandayaptığınız çalışmanın etkilenmemesini istiyorsanızarkaplanaattığınız işinhemçıktılarını hemde hata mesajlarını bir dosyayayönlendirmekisteyebilirsiniz. Bu şekilde yönlendirme yaptıktansonrahatamesajınında “cikti.txt”dosyasınayazıldığınıgörebiliriz.Bu kullanımdandahaönce hemUnix hemde Linux ortamlarındakullanılanshell uygulamalarında desteklenenbirdiğeryöntemise çıktıyönlendirmeişlemini yaptıkdansonrakomutsatırınınsonuna “2>&1” karakterlerini kullanmaktır.Bukomutuşöyle anlamlandırabiliriz;birinciyönlendirmeişareti (>) çıktıyı yönlendirirkensatırınsonundaki karakterler(2>&1) stderr’ye (dosyahandle’ı2) yazılançıktıları da stdout’a(dosyahandle’ı1) yönlendirecek,böylecehatamesajlarıdaaynı dosyayayazılacaktır.
  • 34. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 33 Girdi yönlendirmeiçinçokmantıklıbirörnekbulamadım, çünküzaten komutlargenelliklegirdi olarak kendilerineparametre olarakverilendosyaisimlerini kullanabiliyorlar.Ancakyukarıdaki işlemi birörnek olarakverirsek“btrisk.txt”dosyasını“sort”komutunagirdi olarakveriyoruz,buişleminçıktısınıda “sortlubtrisk.txt”dosyasınayönlendiriyoruz.“sortlubtrisk.txt”dosyasınagözattığımızdasatırların sıralı bir şekildesaklandığınıgörebiliriz.
  • 35. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 34 Daha önce yaptığımız yönlendirmelereğerbirdosyayoksabunuoluşturuyorve içeriğiniyazıyor,ancak dosyazatenmevcutsada içeriğini sonoluşturulaniçerikile eziyordu.Eğerdosyaiçeriğini koruyarakyeni çıktıyı da dosyayaeklemekistersenizbununiçinekleme (appendetme) işaretini (>>) kullanabilirsiniz. Appendetme işareti de eğerdosyayoksaoluşturuyor,ancakeğerdosyamevcutsamevcutdosyanın içeriğini ezmiyorve çıktıyıdosyanınsonunaekliyor. Şimdi birsistemyöneticisininenbüyükyardımcılarındanbirisine geliyoruz,“pipe”lar.Pipe işareti (|) kendisindenönce çalışankomutunçıktılarınıkendisindenbirsonraki komutagirdi olarakyönlendiriyor. Bir başkadeyişle çıktılarbirdosyayayönlendirilmekyerine yineshell ortamınayönlendiriliyor,ancakbir çıktılar bir başkakomuttarafından yeni birsatırda yeni birkomutyazmadanhemengirdi olarak kullanılabiliyor.Buyöntembirdenfazlaişlemi herhangi biraradosyakullanmadanteksatırda halletmemizeimkansağlıyor.
  • 36. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 35 Yukarıda “ls” komutuile içinde bulunduğumuzdizindeki dosyave dizinleri listeliyoruz,ancakçıktıyı “wc” komutunaparametre olarak aktarıyoruz.“wc” (wordcount) uygulamasıişlediği girdiveyadosyadaki satır sayısı, kelime sayısıve karaktersayısını hesaplarve bize görüntüler.Pipesayesinde “ls”komutunun çıktısını bir dosyayayönlendiripdahasonrabu dosyayı“wc” komutuylaişlemekyerinetekbirsatırdabu işlemi gerçekleştirebildik.Bunagöre içinde bulunduğumuzdizindetam21 adet dosyaveyadizinvar. Daha önce girdi ve çıktı yönlendirmeişleminedeğinmiştik.Çıktıyönlendirmede çıktılarartıkshell ortamında görünmüyorsadece dosyayayazılıyordu.Pipeişaretive “tee”komutuylabirlikte çıktılarbir dosyayaaktarılırkenaynı zamandashell ortamındada görüntülenebiliyor.
  • 37. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 36 Unix ve linux sistemlerde“wc”ve “tee”gibi dahapekçok kullanışlıuygulamavar,buuygulamalarafilter adı veriliyor.Buuygulamalardosyalarıgirdi olarakalabildiği gibi“pipe”vasıtasıylabirönceki komutun çıktısı olarakshell ortamındandaalabilir.Bunlardanbirkısmınıaşağıda bulabilirsiniz:  sort: Adındanda anlaşılacağı üzere almışolduğugirdiyi sıralayarakçıktıüretir  uniq:Sıralanmış birgirdi dizisindentekrarlayansatırlarıçıkararak satırları tekil biçimde tekrar üretir  grep: En sık kullanılanfiltrelerdenbirisi olan“grep”komutugirdileriniçindebelirli birveri yapısını arar ve bu veri yapısının bulunduğusatırıntamamını çıktı olaraktekrarlar.Yani veri yapısının görülmediğisatırlarıeler.Veri yapısısabitbirmetinolabileceğigibi bir“regular expression”daolabilir.  head: Genellikle büyükbirdosyainceleneceği zamansadece ilkbirkaçsatırınıgörmekiçin kullanılır.  tail: Genellikle büyükbirdosyainceleneceği zaman(örneğinbirlogdosyasıgibi) dosyanın sadece sonbirkaç satırını görmekiçinkullanılır.Tail komutuözellikle logdosyalarıgibi sık değişendosyalarınsonunaeklenensatırlarınsürekliizlenmesiiçin“-f”switch’i ile birlikte kullanılır.  sed:Adı “stream editor”ünkısaltmasıolan“sed”komutualdığıgirdi içinde gereklideğişiklikve dönüşümleri yaparakçıktıüretir.Örneğinbirdosyanıniçindeki “2015” tarihini “2016”ya dönüştürmekve yeni birdosyayayazmakiçinşukomutkullanılabilir:“sed‘s/2015/2016’ < girdi.txt>cikti.txt”.Tabi sed’inözellikleribununlakısıtlıdeğil,kendikaraktereşleşmeve regular expressiondesteği de var.  awk: awk hakkındakısaca birtanımlamayapmakkolaydeğil,amaawk’ıgirdi işleme ve dönüştürme içinbirprogramlamadili de içerenbiraraçolarakdüşünebilirsiniz.Girdi işlemeve dönüştürme ihtiyaçlarınızkarmaşıklaştığında“perl”programlamadilindenönce
  • 38. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 37 değerlendirilebilecek birkomuttur. Shellshock Bash ile ilgilibelirtilmesi gerekenkonulardanbirisi de bushell’insağladığıfonksiyonexportetme imkanı. Öncelikleshell içindenkullanabileceğinizbirfonksiyonukomutsatırındantanımlayabiliyorsunuz.Bu işleminsyntax’ınagirmeyeceğimamakabacaaçıklayacağım.Bu fonksiyonutanımladıktansonraexport ederekartıkbir çevresel değişken(fonksiyonubirdeğişkenolarakdüşünebilirseniz)olaraktanımlıyoruz. Daha sonra mevcutshell’iniçindenveyabushell’iniçindeykençağırdığınızdiğerchildshell’lerden(yine bash komutuylayeni birshell dahaaçabilirsinizve bubirchildprocessolaraküstteki parentprocess’e bağlı olarakçalışır) bu fonksiyonukullanabilirsiniz.Burayakadargüzel ve diğershell’lerden(csh,ksh, v.d.) farklıbirfonksiyonalite.Ne yazıkki bufonksiyonalitekötüye kullanıldıve shellshockadıylameşhur olanaçıklığa imkantanıdı. Konuylailgili detaylıaçıklıkve yamabilgilerineinternettenulaşabilirsiniz.Bu açıklık çevresel değişkenleriuzaktanetkileyebildiğinizbiruygulamaaçıklığıile birlikte kullanıldığındaçok etkili sonuçlardoğurabiliyor,buaçıdanbash’tenbahsederkenatlanmamasıgerekenbirkonu.
  • 39. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 38 III. Dosya Sistemi Temel Bilgiler *Dosya listeleme,erişimhaklarıyönetimi,dosyave dizinmanipülasyonişlemleri* MuhtemelenbirUnix /Linux sistemüzerinde ençokkullanılankomutlardanbirisi “ls”komutudur. Diğerkomutlargibi “ls”komutunundapekçok switch’i var.Bazıları diğerlerindendahaçokihtiyaç duyacağınız switch’ler.Bunlardan birisi“-a”switch’i (“all”kelimesininilkharfi).
  • 40. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 39 “-a” switch’i ismininbaşında“.”olandosyave dizinlerinde listelenmesini sağladı.Budosyalardan bazıları daha öncedenbahsi geçenstartupscript’leri,çünküşuanda“root” kullanıcısının“home” dizinindeyiz.Hangi dizininiçinde olduğumuzu“pwd”yani “presentworkingdirectory”komutuile görebiliriz.
  • 41. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 40 Adı “.” ile başlayandosyalardanbiriside “.bash_history”dosyası.Budosyayadahasonra değineceğiz. Dosyaadı tamamlama Shell ortamınınsağladığı imkanlardanbiriside dosyaadıtamamlamaimkanıdır.Herhangi birkomuta parametre olarakdosyaismi vereceğimizzamandosyaadınınbirveyadaha fazlakarakterini yazdıktan sonra tab tuşunabasarakdosya adının tamamlanmasıiçindestekalabiliriz. Yukarıdaki örnekte dosyaismininilkkarakteri olarak“d”karakterini girdiktensonra“tab”tuşuna birinci basışımızda herhangi birtamamlamayapmadı.Bununanlamıadı “d” ile başlayanbirdenfazladosya veyadizinadı bulunduğudur.Bunedenletekrar“tab” tuşunabastığımızda olası tümihtimalleri bize gösterdi.Bunuyaparkenadı“d” ile başlayanlardanbirisininbirdizinolduğunudasonuna“/”karakterini ekleyerekbelirtti.Buaşamadansonra“d” karakterindensonra“o”karakterini de yazdımve “tab” tuşunabastım. Bu durumdatekalternatif olduğundanshell dosyanınadınıtamamladı. Dosyaerişimhakları Bir başka“ls” switch’i de “-l”yani “longlistingformat”switch’idir.
  • 42. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 41 “-l”switch’i gördüğünüzgibi herbirdosyaiçindahadetaylıbilgilersağlıyor.Bunlararasındaenkayda değerolanlarıdosya/ dizinerişimhakları,dosyanınsahibi olankullanıcıadı,dosyanınsahibi olangrup adı, dosyanınboyutu(byte cinsinden) ve dosyanınsongüncellenmezamanısayılabilir. Dosya/ dizinerişimhaklarınınbulunduğubölümünbaşındaözel erişimbayrağı(specialpermissionflag) bulunur. [-][rwx] [rwx] [rwx] Bu ilkbölümde bulunabilecektümopsiyonlarafarklıbirkaynaktanulaşabilirsiniz.Ancakburadasadece sıklıklakarşılaşılanopsiyonlaradeğineceğim:  “-“ karakteri dosyanınrutinbirdosyaolduğunaişareteder.  “d” karakteri ilgili isminbirdizinismiolduğunubelirtir.  “l” dosyanınaslındafarklı birdosyanınsemboliklinki olduğunubelirtir.Bukonuyuaşağıda açıklayacağız.
  • 43. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 42 Semboliklinkörneği içinönceliklebirsemboliklinkoluşturuyoruz.Buörnekte bulunduğumuzdizin altındaoluşturduğumuzbizim-passwd.txtdosyasını/etc/passwddosyasınabirsemboliklinkolarak tanımlıyoruz. Semboliklinkdosyamızınözelliklerine gözattığımızdailkkarakterin“l”olduğunugörebiliriz.Sembolik linkdosyamızıniçeriğine gözattığımızdaorijinal passwddosyasınıniçeriğini görüyoruz.Semboliklink aslındatahminedebileceğinizgibi yeni birdosyaoluşmasınanedenolmuyor,teknikolarakilgili dizin hiyerarşisi içinde yeni birinode veri yapısıoluşuyorve buveri yapısı da orijinal dosyayaişaretediyor. Semboliklinkile dosyayaerişerekiçeriğindegüncelleme yapabiliriz,ancaksemboliklinki sildiğinizde orijinal dosyasilinmez. Dosyaerişimizinleri 3farklıgrup içinverilir:  Dosyasahibi kullanıcı(u - owner)  Grup (g - group)  Diğer(tüm) kullanıcılar(o - others) Erişimhaklarıise aşağıdaki gibidir:  Okuma(r - read):Dosyalariçindosyanıniçeriğiningörülebilmesi,dizinleriçindiziniçeriğinin listelenmesi anlamınagelir.  Yazma (w - write):Dosyalariçindosyaiçeriğinindeğiştirilebilmesi,dizinleriçindiziniçindedosya oluşturma,diziniçindekidosyalarınadınıdeğiştirme,diziniçindekidosyalarısilmeve dizin özelliklerini (attributes) değiştirebilme anlamınagelir.  Çalıştırma (x - execute):Dosyalariçindosyanın(derlenmişkoddosyasıveyascriptdosyası) çalıştırılabilmesi,dizinleriçindizine giriş,dizininiçindeki dosyave dizinlere erişimhakkıanlamına
  • 44. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 43 gelir. Güvenlikaçısındanbahsetmeyedeğerbir diğererişimhakkıtürüise setuid/setguid(s) erişimhakkıdır. Bu erişimhakkıdosyasahibi (owner) veyagrup(group) erişimalanlarındaçalıştırma(x) bölümünde“s” karakteri ile ifade edilir.Buerişimhakkınıntanımlandığıdosyalarçalıştırıldığında çalıştıran kişinin id’sindenbağımsızolarakdosyanınsahibinin(veyagrubunun) sahipolduğuhaklarlaçalıştırılır.Bu dosyalaraverilebilecekentipikörnek“passwd”uygulamadosyasıdır. Görüldüğügibi “passwd”komutudosyasındadosyasahibi (u) alanındakiçalıştırmahakkı“s” olarak görülüyor.Bumantıklı çünkühersistemkullanıcınınparolasınıdeğiştirebilmesigerekir,ancakbu /etc/passwddosyasındadeğişiklikyapabilmekanlamınagelirki buhakyine yukarıdagörülebileceğigibi sadece rootkullanıcısınaaittir. Setuid/setguidhakkınasahipdosyalargüvenlikdenetimlerindeözellikle incelenir,çünkübu uygulamalaryüksekerişimhakkınasahipolduklarındandüşükkullanıcıhakkınasahipkullanıcılar tarafındankötüye kullanılabilirler.Ayrıcabuuygulamalardaki biraçıklıkyüksekkullanıcıhaklarının herhangi birişlemgerçekleştirilebilmesine de olanaktanıyabilir. Dosya/ dizinerişimhaklarınındüzenlenmesi Erişimhaklarınındüzenlenmesiiçinkullanılanaraç“chmod”uygulamasıdır.Erişimhaklarının düzenlenmesinde aşağıdaki 2yöntemdenbirisi tercihedilebilir:  Numerik:Buyöntemde dosyasahibi(user),grup(group) ve diğerkullanıcılar(others) içinhaklar tekseferde tanımlanmalıdır.  Sembolik(alfabetikkarakterlerle):Buyöntemde istenilenprofile (yani user,groupve/veya others’a) istenilenhak(yani read,write ve/veyaexecute)verilebilirveyaçıkarılabilir.
  • 45. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 44 “touch” komutuile “dosya”isimli birdosyaoluşturdukve budosyanınerişimhaklarınıgözlemledik. “touch” komutuile büyüklüğü0olan bir dosyaoluşturabilirizveyavarolanbirdosyayı “touch” komutunaparametre olarakvererekbudosyanınsonerişimtarihini mevcutzamanlagüncelleriz.Çok kullanışlıgibi görünmesede birshell script’iniçinde hızlıcabirdosyaoluşturmakiçinveyadosyaerişim zamanlarınabakan biruygulamaiçinişimize yarayabilir. Erişimhaklarınabaktığımızda aşağıdaki erişimhaklarınıgörüyoruz:  User (owner):read,write  Group: read  Others:read Yani “root” kullanıcısıolarakbir dosyaoluşturduğumuzdaöntanımlıolarakbudosyanınhaklarıbu şekilde belirleniyor. “umask”komutuise “0022” gibi bir değerüretti.Öntanımlıerişimhaklarıile umaskkomutununçıktısı birbirleri ileilişkili.
  • 46. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 45 “umask”değeri yine “umask”komutuile belirlenebilir.Startupscript’leri içinde bukomutubulamadım, ama /etc dizini altındalogin.defsdosyasıiçindebudeğeri görebiliriz,dolayısıylatahminentüm kullanıcılariçinbudeğerumaskdeğeri olarakatanıyor.Peki budeğerne anlamageliyor: “umask”değeri öntanımlıbaz erişimhaklarıile bitwise NOTişlemine tabi tutularakyeni oluşturulacak dosyanınerişimhaklarıbelirlenir.Bazerişimhaklarışuşekildehesaplanabilir(dosyalariçin):  Read:4  Write:2  Execute:1 Yani numerikgösterimleerişimhakları644 demekşuanlamagelir: - r w - r - - r - - , yani user’ınokumave yazma,group’unokumave others’ınokumahakkı var anlamınagelir. Unix / linux sistemlerde öntanımlıdosyabazerişimhakları666, öntanımlıdizinerişimhaklarıise 777’dir. Kernel yeni birdosyaoluşturulurkenbu değeri alırve umaskdeğerinibudeğerdençıkararakdosyave dizinerişimhaklarınıbelirler.EğerKali ve rootkullanıcısıiçinbu hesaplamayıyaparsak:  Dosyaiçin:666 – 022 = 644, yani “- r w - r - - r - -“  Diziniçin:777 – 022 = 755, yani “d r w x r - x r - x” Bu nedenle birdosyaoluşturulduğundave birdizinoluşturulduğundayukarıdaki erişimhakları atanmıştır. Dikkatli okuyucudikkatetmişolabilir,“ls”komutunuçalıştırırken“-l”switchininyanınabirde “d” switch’ini ekledik.Bununnedeni “dizin”dizinininiçeriğini değil dizinerişimhaklarınıgörüntülemek
  • 47. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 46 istediğimiziçindi.Eğersadece “-l”switchini kullanırsak“ls”komutudizininiçeriğini görüntülemeye çalışıyor. Şimdi yeni oluşturduğumuzdosyamızınerişimhaklarınıbirazdüzenleyelim. Yukarıda “chmod” komutununçeşitlikullanımörneklerini görüyorsunuz.İlkkullanımdasembolik yöntemle group’ayazma(w) hakkınıekliyoruz. İkinci kullanımdaothers’aokumave yazmahaklarınıatıyoruz(rw). Üçüncü kullanımdaothers’danyazmahakkını(w) çıkarıyoruz. Sembolikyöntemdeeğerkullanıcıyailişkinbirbilgiyoksaatamatümkullanıcılariçinyapılır. Örneğin “chmod +w dosya”komutuuser,groupve otherskategorilerininhepsi içinbuatamayıyapar. Dördüncükullanımdanumerikyöntemleerişimhaklarınıatıyoruz.Buörnekte ayrıca ilkdefaexecutable (x) hakkıda ekledik.Linux’un(yadaUnix’in) Windows’dankullanıcıaçısından temel farklarındanbiriside dosyauzantılarının biranlamtaşımamasıdır. Bir dosyanınçalıştırılabilirolupolmadığıo dosyaya executable hakkınınatanıpatanmadığıile ilgilidir.Bubirelf formatındaki çalıştırılabilirdosyadaolabilir, bir shell scriptdosyasıda.Tabi buradaki dosyamızıniçinde çalıştırılabilirbiriçerikbulunmamaktadır. Ancaklistelediğimizdeçalıştırılabilirbirdosyagibi görünmektedir. Dosyasistemi navigasyonu Temel birbilgi olmaklabirlikte dosyasistemi (file system) içinde temel navigasyonişlemlerine de değinmemizdefaydavar.
  • 48. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 47 “cd” (change directory) komutuadındandaanlaşılabileceği gibi içinde bulunulandizini değiştirmekiçin kullanılanbirkomut.Yukarıdaki örnekte içinde bulunduğumuzdizininaltındabulunanbirdizine geçiyoruz.Birsonraki adımdaise “..” karakterlerinikullanarak2üst dizine çıkıyoruz. Herhangi birdosyaadını işaret ederken2tür işaretetme imkanımızbulunmaktadır:  Relative (göreli) dosyaadıile işaretetme  Absolute (tam) dosyaadıile işaretetme
  • 49. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 48 Yukarıdaki örneklerde içinde bulunduğumuzdizine göreli(relative)olarakbelli dosyalaraişaretediyorve içeriklerini inceliyoruz.Birinci örnekte“/etc”dizini içindeykenbudizininaltındabulunan“cron.d”dizini içinde yeralan“anacron” dosyasınıniçine gözatıyoruz.Daha sonra “cd” komutunayine relative olarak “cron.d” dizininiparametre olarakveriyoruzve budizine geçtiktensonraüstdizinde (yani/etcdizininin içinde) bulunanbirdosyanıniçeriğinegözatıyoruz.
  • 50. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 49 Yukarıdaki örnekte ise “/etc”dizini altındabulunan“hosts”dosyasınıniçeriğine“/root”dizinininaltından göz atabilmekiçinabsolute pathyönteminikullanıyoruz.
  • 51. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 50 “cd” komutununsıkkullanılanimkanlarındanbirisi de dizinismi yazmadankullanıcınınHOME dizinine hızlıca dönmesini sağlamasıdır.Bunuyapmakiçinherhangi birparametre vermedensadece“cd” komutunuişletmemizyeterlidir. HOME dizini shellortamındastartupscript’lerini barındırması,kullanıcınınshell tarihçesininbulunduğu dosyayıbarındırması ve kullanıcınınloginolduğundailkdüştüğüdizinolmasıgibi çeşitli nedenlerden dolayıkullanıcılariçinönemli birdizindir.Buyüzdendosyaerişimleriile ilgili işlemlerdepratikbiçimde HOME dizine işaretedebilmekiçintildayani “~” işareti kullanılır.
  • 52. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 51 Yukarıdaki örnekte dizinimizi “/etc”diziniolarakdeğiştiriyoruzve budizininaltındaykensadecetilda işaretini kullanarakHOMEdizinimizaltındaki dosyalarılisteleyebiliyoruz. Linux’tabirdizinoluşturmakiçin“mkdir”komutunukullanıyoruz.Dizinsilmekiçinse dosyalariçinde kullandığımız“rm” komutunukullanıyoruz,yalnızbirfarkla.Linux bizi silmekistediğimizşeyinbirdosya değil birdizinolduğuhakkındauyarıyor.Birdizini silebilmekiçin“rm”komutunu“-r”switch’i ile birlikte kullanmamızgerekiyor.
  • 53. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 52 Dosyamanipülasyonuileilgilitemelişlemlerdenbirisi de dosyakopyalamaişlemi “cp”komutuile yapılıyor.Dosyaismininbasitbirbiçimde değiştirilmesi ile ilgili komut“mv”yani “move”komutu. “rename”komutuise birperl deyimi iledosyaisimdeğişikliğiiçinkullanılıyor.“rm”komutudatahmin edilebileceği dosyasilmekiçinkullanılıyor. *Dosya arama* Shell ortamındaönemli olanbirbaşkakonudabir çalıştırılabilirdosyanınismi yazılarakçalıştırıldığında aslındahangi dosyanınçalıştırıldığı konusudur.Windows’abenzerşekilde Linux’tadabirPATHçevresel değişkenibulunmaktadır.Budeğişkenstartupscript’leri ileherkullanıcıiçinatanır. Linux’taPATHdeğişkeninidiğerlokal veyaçevresel diğerdeğişkenleri görüntülediğimizgibi görüntüleyebiliriz.
  • 54. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 53 Bir başkayöntemde “env”gibi birkomutlatümçevresel değişkenleri listeleyerekiçinde PATHkelimesi geçenleri listelemekolabilir. Bizherhangi birkomutçalıştırdığımızda (örneğin“ls”komutu) bukomutPATHçevresel değişkeni içindeki dizinleriçinde budeğişkende belirtilensıraylaaranırve ilkbulunançalıştırılabilirkomutdosyası çalıştırılır. Herhangi birkomut çalıştırdığımızda bu komutunaslındahangi dizinaltındabulunduğunu “which”komutuylainceleyebiliriz.
  • 55. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 54 PATH çevresel değişkeniiçindearananisimdeki tümçalıştırılabilirdosyalarıtespitetmekiçin“-a” switch’ini kullanabiliriz. PATH çevresel değişkenive “root”kullanıcısıile ilgilibahse değerbirbaşkakonuda “.” yani mevcutdizin konusudur.Normalde sıradanUnix /Linux kullanıcılarınınPATHçevresel değişkenininiçinde“.”,yani mevcutdizinbulunur.Bunagöre örneğinbirshell scriptçalıştırılacağızamanshell’de içinde bulunulan diziniçinde de buscriptaranır. Unix’inilkdönemlerinde yaşananbazısosyal mühendisliksaldırıları nedeniyle budizinöntanımlıolarka“root”kullanıcılarınınPATH değişkeniiçindeyeralmaz.Unix bildiğinizgibi çokkullanıcılıbirsistem(herne kadarKali böyle biramaç içinhazırlanmamışolsada). Böyle birsistemüzerindeçalışankullanıcılaryardımamacı ile sistemyöneticisiniyanlarına çağırdıklarında sistemyöneticisi kendi kullanıcısınageçmekiçin“su”,yani switchuserkomutunu kullanır.Ancakshell ortamınakendisi interaktif logonolarakgirişyapmadığıiçinhalenkendisiniçağıran kullanıcınıniçinde bulunduğudizinde bulunmayadevametmektedir.Eğersistemyöneticisiniçağıran kullanıcı“ls” komutuile aynıismi taşıyanbir shell scriptyazmışve bu dizininiçineyerleştirmişise ve “root” kullanıcısınınPATH çevresel değişkeniiçinde“.”var ve “/bin”dizinindenönce geçiyorsaozaman çağıran kullanıcınınyazdığı script“root” kullanıcıhakları ile çalışır.İşte bu basitsaldırı nedeniyle öntanımlıolarak “.” dizini “root”kullanıcısınınPATHdeğişkeni içinde bulunmaz. PATH değişkeni mevcutdizini işaretetmediğiiçin“root”kullanıcısıylakendi dizininizdeki biruygulama veyascript’i çalıştırmakistediğinizde dosyaadınınbaşına“./” karakterlerini koymanızgerekir. Bir başkadosyabulmakomutuda “locate”komutudur.Bukomut“which”komutugibi ne çalıştırılabilir dosyalaraözeldirne de sadece PATHdeğişkenindegeçendizinleri arar. “locate”komutubirveritabanı içinde dosyaisimlerini arar.Buveritabanıbir“cron” işiyle periyodikolarakgüncellenir.“cron”ve zamanlı işlerkonusunadahasonradeğineceğiz.Eğerveritabanınımanuel olarakgüncellemekisterseniz “updatedb”komutuyladabuişlemi yapabilirsiniz.
  • 56. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 55 “locate”komutubirveritabanıkullandığıiçinçokhızlı yanıt döndürür.Yukarıda “updatedb”komutunun güncellediği veritabanıdosyasınınadını ve bulunduğudizini de görebilirsiniz. Bir başkadosyabulmakomutuda “find”komutudur.Bukomuther çalıştığında hedef dizinleri tarayarak dosyaismini arar.
  • 57. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 56 “find”komutununbirözelliği de eğerbirisimhedefiverilmemişsehedef dizininiçindekitümdizinlerve bu dizinleriniçindeki tümdosyalarınisimlerini listeler.Buözellik“find”komutununarşivkomutlarıile birlikte kullanılmasınıdasağlamaktadır(arşivişlemlerine dahasonradeğineceğiz).
  • 58. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 57 IV. Shell Scripting *Shell Scripting* Shell scriptingkonusubirUnix/Linuxsistemyöneticisi içinvazgeçilmezbirkonu.Çünküscriptlerher defasındaaynıkomutlarıdefalarcayazmaktankurtardığı gibi aynı zamandauygulamaortamına benzer bir ortamsunarak farklıdurumlardafarklıişlemleri otomatikolarakgerçekleştirmeyide mümkün kılıyorlar.Aynınedenlerdendolayıbizpentestuzmanlarıiçinde bazı testadımlarımızı otomatikleştirme imkanısağlıyorlar.Bununlabirliktebirpentestaracı geliştirmekistediğinizde ilktercihinizgenellikle python,ruby,perl gibi dahagelişmişAPI’lerle desteklenen,hemesnekhemde kontrol edilebilirscript dilleri olacaktır.Ancakne varki,Linux işletimsistemininstartupve shutdownsüreçleriile pekçokservis yönetimscript’i Shell Scriptolarakgeliştirilmiştir.Dolayısıylaciddi birsistemyönetimihtiyacınızvarsa shell scripting’denkaçamazsınız. Shell scriptingkonusubaşlıbaşınaderinbirkonu,buyüzdenbumakale kapsamındamutlakadeğinilmesi gerekentemel konularadeğineceğiz.Dahadetaylıihtiyaçlariçinelbette internette bulunabilecekpek çok kaynaktanfaydalanılabilir. Örneğimiziçinbirihtiyaçsenaryosugeliştirelim,böylece dahailginçbirscriptoluşturabiliriz.Ayrıca örneğimizdeKali ilebirlikte gelengüvenlikaraçlarındanbazılarınıda kullanmaimkanımızolur. Diyelimki;hedef tespiti adımındaICMPEcho Request,Timestamp Requestve NetmaskRequestistekleri ile tarama yapacakbir scriptgeliştirelim.Buistekleriüretmeküzere “hping3”aracını kullanalım.Buaraç ile sözkonusuistekleri yapmakiçinkullanmamızgerekenkomutyapısıaşağıdaki gibi: # hping3172.16.0.10 –c 1 -1 –C 8 Yukarıdaki komutla“172.16.0.10” IPadresine 1 adet(-c1) ICMP (-1) paketini Type 8(-C8) yani Echo isteği gönderiyoruz. Scriptyazmak istememizinnedeni genişbirIPbloğunaistekte bulunmakiçinbukomutuherdefasında tekrartekrar yazmakistemememiz.AyrıcaherIP adresi içinEchoRequestpaketininyanısıra “TimestampRequest”ve “NetmaskRequest”isteklerinide göndererektespitihtimalimizi artırmaya çalışacağız. Elbette hedef tespiti içindahapekçokyöntemvar,ama buradaki amacımız çok ihtiyaç duyduğumuzbirdurumdanasıl scriptyazabileceğimizinüzerindengeçmek. Uzatmadan hemenscriptkodumuzuaçıklamayabaşlayayım: #!/bin/bash echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: " read SUBNET function scan { local YANIT="0"; local IP=$1.$2.$3 local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0" hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request if grep "1 packets received" aradosya.$IP >& /dev/null; then if ! grep "Unreachable" aradosya.$IP >& /dev/null; then ECHO="echo-1"; YANIT="1" fi fi
  • 59. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 58 hping3 $IP -c 1 -1 -C 13 >& aradosya.$IP # TS Request if grep "1 packets received" aradosya.$IP >& /dev/null; then if ! grep "Unreachable" aradosya.$IP >& /dev/null; then TIMESTAMP="timestamp-1"; YANIT="1" fi fi hping3 $IP -c 1 -1 -C 17 >& aradosya.$IP # ADD. MASK Request if grep "1 packets received" aradosya.$IP >& /dev/null; then if ! grep "Host Unreachable" aradosya.$IP >& /dev/null; then ADDRESSMASK="addressmask-1"; YANIT="1" fi fi if test "$YANIT" == "1" ; then echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK fi rm aradosya.$IP } for i in `seq 1 254`; do for j in `seq 1 254`; do scan $SUBNET $i $j done done exit 0 Script’inilksatırındagörülen“#!/bin/bash” (#!karakterlerishebang olarakokunur) ifadesiiçinde bulunulanshell’densözkonususcriptçalıştırılırken hangi interpreter’inkullanılacağınıbelirtmekiçin kullanılır.Buifadeyi kullanmazsanıziçinde bulunduğunuzshellöntanımlıshell’iinterpreterolarak kullanır. echo "Lütfen taranacak subnet'in ilk 2 octet'ini giriniz ve [ENTER] tuşuna basınız: " read SUBNET Bundansonra gelenbölümdekullanıcıdanbirgirdi alıyoruz.“echo”komutuile kullanıcıyı yönlendiriyoruzve “read”komutuile yanındayazdığımızdeğişkenebudeğeri aktarıyoruz.Değişkeni daha önce declare etmemizegerekyok,hemenilkkullanıldığıandatanımlayabiliriz.Veri tipi ile ilgili de sıkı kurallaryok,ama veri tipi karşılaştırmanoktalarındamutlakaönemli. function scan { Bu bölümdensonrabirfonksiyontanımıgeliyor.Fonksiyonumuzunadı“scan”. Uygulamadillerinde olduğugibi shell scriptiçindeyazılanfonksiyonlardaparametre alabiliyorve birdeğerdöndürebiliyorlar. Ancakalınan parametrelerinsayısınıve veri tiplerini tanımlamakgerekmiyor.Fonksiyonlardiğerdillerde de olduğugibi çokdefakullanılacakscriptbölümlerinitanımlamakve script’inbakımınıkolaylaştırmak içinkullanılıyor.Ancakönemlibirkural,fonksiyonlarınkullanılmadanönce tanımlanmışolması. Interpreterscript’inherbirsatırını yorumladıktansonrabusatırın gereğini yerine getirmeyeçalışıyor,bu nedenle birfonksiyonuçağırdığımızdabunuöncedentanımlamışolmamızlazım. Fonksiyoniçeriğinidahasonraaçıklayacağım, şimdi script’intemel fonksiyonalitesinintanımlandığı bölüme ilerleyelim:
  • 60. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 59 for i in `seq 1 254`; do for j in `seq 1 254`; do scan $SUBNET $i $j done done Buradaki algoritmayıanlatmadanönce kullanıcıdantaranacakolansubnet’inilk2octet’ini aldığımızı hatırlatalım.Elbette dahaiyi birkodkullanıcınınyapabileceği tümhatalarıhesabakatmalıve bunlarıele almalı,ancak kodukalabalıklaştıracağıiçinbukontrolleri kodlamaktankaçındım. İki adet“for” döngüsüile taranacakher birIP adresininson2octet’ini de bizoluşturacağız.“for”ifadesi “i” değişkenineherdefasındahemensonragelendizidenbirdeğeratayaraktümdizi değerlerini kullanmamızısağlayacak.Shell’in“commandsubstitution”imkanınadahasonradeğineceğimizi söylemiştik.Değineceğimizalanburası.Normalde pekkullanmadığımızve tırnak işaretine benzeyenolan terskesme (backquote) işareti sayesinde shell terskesmeişaretleri arasındabulunankomutuçalıştırıyor ve bu komutunçıktısını içinde bulunduğusatırdaüreterekkullanıyor.Tabi interpreterbunuyaparken eğerbircommand substitutiondurumuvarsaönce buişlemi gerçekleştirmeli,dahasonrabukomutun ürettiği çıktıyı da dikkate alaraksatırın tamamını yorumlamalı. Bizimihtiyacımız1 ile 254 arasındaki sayılardanoluşanbirdizi oluşturmakki “seq”komutudatam olarak bu işlemi yapıyor.“seq”komutununnormaldenasıl çalıştığını şuşekilde görebiliriz: Bu örnekte 1 ve 5 arasındaki değerleri ürettik.Biliyorsunuzpekçokdilde birsatırınbir komutunbittiğini ifade etmekiçin“;”işareti kullanılır.Scriptyazarkenbunagerekyok,hersatırsonuo komutunbittiği anlamınagelir.Ancaksıralı (batch) komutçalıştırma bölümünde de bahsettiğimizgibi teksatırdabirden fazlakomutuda aralarına “;” işaretini koyarakscriptdosyasıiçinde de aynısatırda birdenfazlakomutu yazabiliriz.“for”döngüsününsonundagördüğünüz“do”kelimesinormaldefarklı birkomutve ayrı bir
  • 61. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 60 satırda yazılmalıydı.Fakatshell’inbizesağladığıbatchkomutçalıştırma imkanısayesinde ve benim kodunokunabilirliğini satırsayısını azaltarakartırma niyetimnedeniyle “for”ifadesi ve “do”ifadesini aralarına “;” koyarakaynı satırda yazdım. İç içe 2 “for” döngüsüile IPadresininson2octet’ini de oluşturuyoruzdemiştik.HerbirIPadresi için “scan” fonksiyonunuçağırıyoruz.“scan” fonksiyonuna3parametre veriyoruz. scan $SUBNET $i $j Bunlardanilki “SUBNET”değişkeni,yani kullanıcıdangirmesini talepettiğimizilk2octet.Değişkenin başındaki “$” işareti yine shell ortamınınsağladığıdeğişkenyerinegeçme (variable substitution) imkanınıbize sağlıyor.Yani shell interpreter’içalışırkensatırdaki komutuişletmedenönce başında“$” işaretini gördüğüdeğişkenindeğerini satırdabudeğişkeninadınıngeçtiği yere yerleştiriyor,ondansonra komutubütünolarakçalıştırıyor. Yukarıda bahsettiğimizcommandsubstitutionfonksiyonalitesine çok benzerbirdurum. Aynı şey“i”ve “j” değişkenleri içinde geçerli,içinde bulunduğumuz“for”döngüleri içinde bu değişkenlerinaldığıdeğerlerher“scan”fonksiyonuçağırılacağındasatırda variable substitution sayesinde kullanılıyor. exit 0 Son satırdaki bu komutscript’inreturnkodunun “0”olmasını sağlayarakshell’inscript’içalıştırırken başlattığı (spawnettiği) prosesi sonlandırıyor. Bukomutagerekyokaslında,amabir uygulamayıveya scripti çalıştırdığınızda genellikle “0”başarılı, bunundışındaki tümtamsayı (integer) dönüşdeğerlerise bir sorunolduğuanlamınagelir.Budönüş(return) kodunukontrol edenve buuygulamayıçağırankod da bu şekilde tersgidenbirşeyolduğunakararverebilir.Örneğinbiziyi birprogramcıolarakkullanıcının verdiği girdileri kontroledecekkodlarıyazsaydık,hatalıbirgirişyapıldığında“exit”komutuile script’i sonlandırırkenaynızaman da uygulama,scriptveyahattashell’indeğerlendirmesi için“0”dan farklıbir hata kodudönebilirdik. Shell’debirkomutçalıştıktansonradönüş(return) koduna“?” değişkeninindeğeri ileulaşabiliriz.Tabi yine variable substitutionyapmakiçinbaşına“$” işaretini eklememizlazım.
  • 62. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 61 Artık fonksiyonumuzageçebiliriz: function scan { local YANIT="0"; local IP=$1.$2.$3 local ECHO="echo-0"; local TIMESTAMP="timestamp-0";local ADDRESSMASK="addressmask-0" Scriptdili içinde fonksiyontanımıiçindahaönce de söylediğimizgibiparametrelerinve veri tiplerinin tanımlanmasınagerekyok.Fonksiyonuniçindense budeğişkenlere parametrelerinverildiği sırayagöre $1, $2, $3, ..şeklinde ulaşabiliriz.“scan”fonksiyonumuzahatırlarsanızbirinci parametreolarak kullanıcıdanaldığımız “SUBNET” değerini,ikinci parametreolarakilk“for”döngüsününürettiği “i” değerini,üçüncüparametre olarakdaikinci “for”döngüsününürettiği “j”değerini kullanmıştık.Bu değerleri kullanarakIPadresini oluşturuyorve “IP”adlı değişkeneatıyoruz.Burada“local”ibaresine aslındaihtiyacımızyok,ancak daha sonra script’i “scan”fonksiyonunubackground’daparalel olarak çalıştıracak, böylelikleçokdahahızlı tarama yapacak şekildedeğiştireceğim.Ancakbudurumda karşımıza bir “thread”güvenliği problemi çıkıyor.Eğerfonksiyonuniçindekibirdeğişkeni“local”olarak tanımlamazsambackground’daçalışandiğerkanallar(shell bununasıl uyguluyortamolarakbilmiyorum ama mantıkenthread’lerolarakyapmasılazım, çünküprosesolarakyapsaydıbu problemimizolmazdı) bu değişkenindeğerini bozuyorve farklıbirthread’inbozduğudeğeri okuyarakişlemyapmaya çalışıyorlar.“local”tanımı bu değişkeni gerçektenbirlokal fonksiyondeğişkenihaline getiriyor,aksi halde fonksiyoniçinde tanımlanmışolsadaglobal birdeğişkenolarakdavranıyor. Yukarıda gördüğünüztümdeğişkenlerfonksiyonuniçindedeğiştiğive kullanıldığıiçin de “local”olarak tanımlandı. hping3 $IP -c 1 -1 -C 8 >& aradosya.$IP # ECHO Request if grep "1 packets received" aradosya.$IP >& /dev/null; then
  • 63. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 62 if ! grep "Unreachable" aradosya.$IP >& /dev/null; then ECHO="echo-1"; YANIT="1" fi fi Daha sonra gelenbölümaslındatemelişlevi yerinegetiriyor,“hping3”uygulamasınıgerekli parametrelere “EchoRequest”paketiüretmesi içinçağırıyoruz.“hping3”uygulamasının fonksiyonalitesinikısacaaçıklamakgerekirse buuygulamabirpaketüretme (packetcrafting) uygulaması.“hping3”uygulamasınınçıktısını stderrdahil olmaküzere birdosyayayönlendiriyoruz.Daha önce sıralı işçalıştırma imkanımızolduğunuve teksatırda “;” ile ayrılmışbirdenfazlakomut çalıştırabileceğimizisöylemiştim.Amascriptiçinde biraradosyakullanmayıdahauygunbuldum. “hping3”üçağırdığımız satırın sonunda“#” işareti ile başlayanbölümbiryorumbölümü.“#”işaretinden sonra yazdıklarımızyorumlayıcı(interpreter) tarafındankodolarakyorumlanmıyor. “hping3”işlevini yerinegetirdiktenve tümçıktısını birara dosyayayönlendirdiktensonra,“grep” komutuyladosyaiçinde “1packetsreceived”ifadesini arıyoruz.“grep”komutundandahaönce de bahsetmiştik,özetle parametreolarakaldığıbirdosyaveyakendisine yönlendirençıktınıniçinde eğer aranan ifade geçiyorsa,busatırıntamamını döndürenbirkomuttur.Ancakbizburada“grep”in çıktısından ziyade “grep”indönüş(return) koduylailgileniyoruz.Eğer“grep”arananifadeyi bulabilirse “0” döndürüyor,bulamazsa“1”değerini döndürüyor.Budeğerde “if”koşuluiçin“true”veya“false” anlamınageliyor.Biliyorumdiğerdillere göre birazkafakarıştırıcı çünkü uygulamadillerinden“false” genellikle “0”olur,“0” dışı tüm değerlerde “true”anlamına gelir. Yukarıda da gördüğünüzgibi shell için“true”durumu“0” ile ifade ediliyor.
  • 64. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 63 Biz“grep”indöndürdüğüdeğerle ilgilenmediğimiziçinde çıktısını “/dev/null”dosyasınayönlendiriyoruz. Bu dosyanınözel birdosyaolduğunuve buamaçla kullanıldığını dahaönce de belirtmiştik. “hping3”aracını script’le kullandığımızdagördükki,bazençokfazlaisteklekarşılaşanağcihazlarıhedef IP adresine ulaşılamadığınailişkin“HostUnreachable”veya“NetworkUnreachable”yanıtıüretiyorlar. Bu durumdada bizim ICMPyanıtı alındığını anlamakiçinkullandığımız“grep”komutuolumlusonuç dönüyor,halbuki dönenyanıtbizimisteğimizleilgilideğil.Buhatadankurtulmakiçindosyanıniçinde bir de “Host Unreachable”ifadesini arıyoruz.Ancakbudefa“!” işareti ile “değil”mantıksal işlemini yapıyoruz,yani “if”koşuluancakbu ifade yoksaiçindeki koduçalıştırıyor. Eğer “Echo Request”isteğimizebiryanıtaldıysakve bu yanıtın içinde de “HostUnreachable”ifadesi geçmiyorsa“ECHO” değişkenimize “echo-1”değerini, “YANIT”değişkenimize de “1”değerini atıyoruz. if test "$YANIT" == "1" ; then echo $IP";"$ECHO";"$TIMESTAMP";"$ADDRESSMASK fi rm aradosya.$IP } Diğeriki bölümde farklıICMP isteklerini aynışekildegönderdiğive yanıtlarıişlediği içinatlıyorum. FonksiyonunsonbölümündeherhangibirICMPisteğine yanıtalındığıanlamınagelen“YANIT” değişkeninindeğerinin“1”olupolmadığınabakıyoruz,eğerbirveyadaha fazlayanıt almışsakda ilgili IP adresini ve hangi isteğimize yanıtaldığımızıraporluyoruz.Buradaki “if”koşulundabelirtmektefayda gördüğümbirkonuvar, bu da shell scripting’inilginçdurumlarındanbirisi.“YANIT”değişkeninin değerinin“1”olupolmadığınıkontrol ederkensadece $YANITifadesini kullanamıyoruz.Çünkübu değerinatanmamasıveyatamsayıolmasıdurumundakarşılaştırmayapılanve birstringgibi işlemgören “1” ifadesiyle uyumsuzlukoluşuyor.Budurumdada shell hataüretiyor.Bundankurtulmakamacıyla $YANIT ifadesini çifttırnakiçine alıyoruzki budeğişken atanmasadaiçeriği tamsayıolsada birstringgibi muamele görsün. Bu raporlamaadımından hemensonrada ara dosyamızı siliyoruz. Şimdi script’imizi birdeneyelim(dürüstolmakgerekirse eğersürekliscriptyazmıyorsanızzatenscript’i geliştirirkendefalarcadenemekve hataayıklamakgerekiyor):
  • 65. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 64 Alacağınız sonuçlarilgili ağbölümünde ne kadarcihazbulunduğunabağlıolacaktır,ancak bu haliyle script’imizkullanılamayacakkadaryavaş.Bununiçinkodumuzdaaşağıdaki gibi birdeğişiklikyapıyoruz. for i in `seq 1 254`; do for j in `seq 1 254`; do scan $SUBNET $i $j & sleep 0.2 done done Yukarıdaki koddafarklı olan2 noktavar, birincisi “scan”fonksiyonunuçağırdığımız satırın sonuna“&” karakterini ekledik.Bukarakterbildiğiniz gibi birkomutshell’de buşekildeçalıştırıldığındabuişlemin arka planda(background) çalıştırılmasınanedenoluyor.Şimdi budeğişikliğiyaptıktansonrascript’imizi çalıştıralım.
  • 66. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 65 Bu kezçok daha kısa birsürede çok genişbirağ’danyanıt alabilmeye başladık. Shell scriptingkonusuylailgili sonolarakscriptdosyasınınçalıştırılabilirolmasıihtiyacınadeğinelim. Dosyaerişimhaklarınındüzenlenmesi bölümünde “chmod”komutundan,dosyaerişimhaklarınınneler olduğundanve “umask”konusundansözetmiştik. Scriptdosyamızı ilkoluşturduğumuzdadosyaüzerinde tanımlıolanhaklaraşağıdaki gibiydi:
  • 67. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 66 Bu haliyle script’imizi çalıştırmakistediğimizdeaşağıdaki hatayıalıyoruz: Yukarıda gördüğünüzgibi sadece dosyaisminikullanarakonuçalıştırmakistediğimizde yetki hatası veriyor.Ayrıcaçalıştırılabilirdosyaolmayanbirdosyaadı bu şekilde kullanıldığındashell’indosyaadını
  • 68. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 67 tamamlamadesteğindende (yani dosyaadınınbirkısmını yazdıktansonra TAB tuşunabasarakadın geri kalanını otomatikolaraktamamlama) faydalanamıyoruz,çünküböyle birkullanımmantıklıdeğil. Hemensonra“bash” uygulamasınıçalıştırıp bu defascriptdosyasınıparametre olarakverdiğimizde script’imizçalışıyor.Ancakbunaihtiyaçduymadandoğrudanscriptdosyamızınadını kullanarak script’imizi çalıştırmakistersekdosyanınerişimhaklarınaçalıştırma(execute) hakkınıdaeklememiz gerekir. Bu örnekte sadece dosyanınsahibi kullanıcıolanrootkullanıcısınabu hakkıverdik,sadece “chmod+x” diyerektümkullanıcılariçin de buhakkı tanımlayabilirdik.Buişlemiyaptıktansonrayetki hatasıalmadan script’imizi başlatabildik. Script’imizinçıktılarını“;” karakteri ile birbirindenayırmamızdahasonra işimize yarayabilir.Örneğin “cut” filtresi ile buçıktılardansadece istediklerimizi listeleyebiliriz.
  • 69. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 68 Yukarıdaki örnekte script’imizinçıktılarının“;” delimiter’i ileayrıldıklarınıbelirtiyoruz,“-f 1,3” ifadesi ile bunlardan1. ve 3. sırada olanlarınılistelemekistediğimizi ve bunlarılistelerkende “ “, yani boşluk karakterleri ile birbirlerindenayırmakistediğimizi belirtiyoruz.Böylece listelenenIPadreslerive sadece bunlarınTimestampRequestisteklerimize yanıtveripvermediklerinigörmüşoluyoruz.
  • 70. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 69 V.Shell History Shell Tarihçesi (History) “bash” diğershell’lerde de olduğugibi,kullanıcıyıdahaönce girilmişolankomutlarıtekrartekrar yazmaktankurtarmakiçinbir historyimkanısunar.Kullanıcıdaha önce yazdığı komutlarıtekrar yazmadankullanabilmekiçinoktuşlarıile önceki komutlararasındagezinebilir(oktuşunabastıkça komutsatırında daha önce yazılmış olankomutlargörüntülenir). Bu imkankullanışlılığıartırmasınınyanı sıra eğersistemele geçirilmişsehassasolabilecekbilgilerin sızdırılması amacıyla da kullanılabilir.Örneğinkomutsatırındaçalıştırılan birkomutkullanıcıadı ve parolagibi bilgileriçeriyorolabilir.Pekidahaönce yazılmışolankomutlarısistemnasıl hatırlar? Çevresel değişkenlere birgözattığımızda HISTFILE adlıbir değişkenindeğerinin“/root”dizini altında(bu dizin“root”kullanıcısı için“home”dizinidir) “.bash_history”dosyasıolduğunugörürüz.Bildiğinizgibi “.” ile başlayandosyalarınadlarıancak “ls”komutuna“-a” switch’ini verdiğimizdegörülebiliyor.Eğer sistemimizdebaşkakullanıcılardaolsaydıve bukullanıcılarinteraktif olarakshellortamınıkullansalardı muhtemelenonların“home”dizinlerinde de historydosyalarınıgörecektik. Peki içinde “HIST”geçendiğerçevreseldeğişkenlerne anlamageliyor.Önceliklebudeğişkenler “.bashrc” scriptininiçindegeçiyor.
  • 71. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 70 Bu script’te belirlenendeğerleri açıklarsak:  HISTFILESIZEdeğeri “.bash_history”dosyasınıntaşıyabileceği maksimumsatırsayısını belirtiyor.  HISTSIZE ise aktif oturumiçinhafızadatutulan(ve shell’dençıkışyapmadandiske yazılmayacak olan) maksimumkomutsatırsayısını belirtiyor.  HISTCONTROLdeğişkeniise şudeğerleri alabilir:“ignorespace” –boşlukkarakteri ile başlayan komutlarınhatırlanmasınıengelliyor,“ignoredup” –bir önce kullanılankomutlaaynıolan komutlarınhatırlanmasınıengelliyor.Eğerbudeğeryukarıdada görüldüğügibi “ignoreboth”ise hemboşlukkarakterleri ile başlayansatırlarınhemde bir önceki satırlaaynı olansatırların hatırlanmasınıengelliyor.Eğer“erasedup”değerikullanılırsabukaydedilecekolankomut kaydının aynısındandosyanınönceki bölümlerinde bulunanlarıntamamınınsilinmesigerektiği anlamınageliyor. Yukarıdaki HISTFILESIZEve HISTSIZEparametreleri birazkafakarıştırıcı. Bununetleştirmekiçinaşağıdaki örneğe gözatın:
  • 72. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 71 Yukarıda gördüğünüzdurumşuşekilde gelişmiştir;“wc.bash_history”komutuile budosyaiçindeki satır sayısının 999 olduğunugörüyoruz.Dahasonrabudosyanınson 3 satırını görüntülediğimizde ise“wc .bash_history”komutunugöremiyoruz.Tekrar“wc”komutuile satır sayısını görüntülediğimizdebu dosyanıniçeriğinindeğişmediğinigörüyoruz(kaldıki maksimumsatırsayısı2000 idi).Ancakyukarıok tuşunabastığımızda bir önceki komuttekrargörüntüleniyor.Çünküişletimsistemi açıkolanoturumda daha önce kullanılmışolankomutlarıshell “exit”komutuylaveyaçarpıişaretindenkapatılmadanson kullanılankomutlarıdosyayayazmıyor.İşte HISTSIZEhafızadasaklananancakhenüzdiske yazılmamış olanbu kayıtlarınsayısını sınırlandırıyor.
  • 73. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 72 VI. Manuel Dosyaları Manuel Dosyaları(man pages) Man page’leri Unix ve Unix’inmirasçısıolanLinux’unengüzel yanlarındanbirisi.Biraztarihçesinden bahsetmekgerekirse ilkiki yıl Unix projesi ile ilgili hiçbirdokümantasyonyapılmamış.İlkmanpage’leri proje ekibi yöneticisinin(Doug McIlray) zorlamasıylaUnix’inilkgeliştiricilerindenDennisRitchie ve Ken Thompsontarafındanyazılmış.Bu tarihtenitibarende Unix üzerinde geliştirilentümuygulamalarve diğerkaynaklariçinmanpage’leri geliştirilirolmuş. Manuel sayfalarındagenellikle bulunanbölümlereşunlarörnekverilebilir:  NAME: Komutveyafonksiyonunadıve teksatırlık tanımıdır.  SYNOPSIS:Komutlariçinkomutunnasıl çalıştırılacağıve hangi komutsatırı opsiyonlarıile çalıştırılabileceğininaçıklandığıalandır.Program fonksiyonlarıiçinfonksiyonlarınaldığı parametrelerinlistesi ve fonksiyontanımınıiçerenbaşlık(header) dosyasınınadınıiçerir.  DESCRIPTION:Komutveyafonksiyonhakkındaki detaylıaçıklamametnidir.  EXAMPLES: Her komutiçinbulunmamaklabirlikte komutunkullanımıhakkındaörnekler barındıran bu bölümkullanıcınınkomutuhızlıbiçimde kullanmayabaşlamasınıkolaylaştırır.  SEE ALSO: Komutlaveyafonksiyonlailgili diğerkomutlar,fonksiyonlar,dosyalarv.d.bilgileri içerir. Manuel dosyalarınınbaşlık alanının yanındaparanteziçinde birrakamgörünür:
  • 74. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 73 Yukarıdaki 2 örnektenbirincisinde “passwd”adınınyanında(1) ikincisinde ise (5) rakamıgörünüyor. Bununnedeni “passwd”adınınhembirkomutadı olması,hemde bir dosyaadı olması ve man page’lerin farklıkategorileraltındasınıflandırılması.Bugörülenrakamlardailgili kategorilerinnumaraları. Man page kategorileriaşağıdaki gibidir:
  • 75. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 74  1 – Genel komutlar  2 – Sistemçağrıları (systemcalls)  3 – C standartkütüphanesinde bulunanfonksiyonlar  4 – Özel dosyalar(genellikle /devdizinialtındabulunancihazdosyaları) ve sürücüler  5 - Dosyaformatları  6 – Oyunlarve ekrankoruyucular  7 – Çeşitli kaynaklar  8 – Sistemyönetimkomutlarıve işletimsistemi servisleri(daemons) Eğer birdenfazlakategorilerdebulunanbirkelime aranırsa“man3 printf”formatında,manuel dosyası kategori bilgisi de belirtilerekgörüntülenmelidir. “man” komutuayrıca biranahtar kelime ilearamayıda destekler.“man –karamakelimesi”formatında kullanılanbudurumdaarama kelimesi komutadıve kısa açıklamasatırında görünentümbaşlıklar listelenir:
  • 76. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 75 VII.Kullanıcı Yönetimi Kullanıcıyönetimi Unix / Linux sistemlerde kullanıcıveritabanı“passwd”dosyasındabulunur: Bu dosyadaki kayıtlarınformatışu şekildedir: [KullanıcıAdı]:[ParolaHashi]:[KullanıcıIDsi]:[GrupIDsi]:[HomeDizini]:[ÖntanımlıShell] Kullanıcıadı kullanıcıylailgili işlemlerdekullanılır,ancakişletimsistemi içinkullanıcıyıifade edenasıl bilgi “KullanıcıID” bilgisidirve erişimhaklarıbuIDdeğerine göre değerlendirilir.AynıIDdeğerinebirdenfazla kullanıcısahipolabilir.Bunagöre IDdeğeri “0” olanbir başkakullanıcı adı da bulunabilirve “root” kullanıcıadıyla kullandığımızkullanıcıile aynıerişimhaklarınasahipolacaktır.Buözellikgenellikle Unix sistemyöneticileri tarafından“root”kullanıcısınınşifresininunutulmasınakarşıyedekyönetici hesabı amacıyla kullanılır. Kali üzerinde pekçoköntanımlıkullanıcıgelir.Ancakbunlardansadece “root”kullanıcısısisteme interaktif shell bağlantısıkurabilir.BudaUnix sistemyöneticilerinineskidenberi uyguladığıgeçersiz öntanımlıshell ayarı ile sağlanır.“/etc/passwd”dosyasındatanımlıöntanımlıshell uygulamalarını incelediğimizde aşağıdaki listeyi görüyoruz:
  • 77. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 76 Görüneno ki root kullanıcısıdışında “couchdb” ve “postgres”kullanıcılarıiçinöntanımlıshell olarakbash tanımlanmış.Ayrıca “arpwatch” ve “speech-dispatcher”kullanıcılarıiçinde “/bin/sh”shell’i tanımlanmış. Bu durum“root” dışında yukarıda sayılankullanıcıların da sisteme shell erişimiyapabileceği anlamına geliyorolabilirmi?Bununcevabınıverebilmekiçinbirde “/etc/shadow”dosyasınagözatmamız gerekiyor.
  • 78. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 77 “/etc/passwd”dosyasındaki kayıtlarınformatınıaçıklarken2.alanda parolahash’ininbulunduğunu söylemiştik.Ancakbudosyadaki bualantümkullanıcılariçin“x”karakteri ile tanımlanmış.Bunun nedeninibirazdanaçıklayacağım.Parolahash’lerieğer“/etc/passwd”dosyasındabuşekilde tanımlanmışsaasıl “hash”değerleri “/etc/shadow”dosyasındatanımlanmaktadır. Yukarıda geçerli biröntanımlıshell’esahipolankullanıcılararasındasadece “root” kullanıcısınınbir parolahash’ine sahipolduğunugörebilirsiniz.Hiçbirhashdeğeri “!”veya“*” olamayacağınagöre diğer kullanıcıhesaplarınaloginolmakmümkündeğildir.(“*”hiçparolaoluşturulmamış,“!”ise hesap kilitlenmişanlamınagelmektedir.) DolayısıylaKali dağıtımıöntanımlıolaraksadece “root” kullanıcısıile loginolabilecekşekilde dağıtılmaktadır. “/etc/shadow”dosyasınınvarlıkamacını açıklayabilmekiçinöncelikle “/etc/passwd”ve “/etc/shadow” dosyalarınınerişimhaklarınıinceleyelim.
  • 79. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 78 Yukarıda gördüğünüzgibi “/etc/passwd”dosyasınınerişimhaklarıtümkullanıcılarınbudosyayı okuyabileceği biçimdeayarlanmıştır.Bununnedeni tümkullanıcılarınkullandığıkomutlarınbirkısmının passwddosyasındaki bilgileri kullanmaihtiyacıdır,örneğinkomutuçalıştırankullanıcınınhome dizininin bilme ihtiyacı,dosyaerişimizinlerinianlamasıgerekenkomutlarınkullanıcıID’si ve kullanıcıadı arasındaki dönüşümüyapabilmesiihtiyacıgibi.Eğerparolahashdeğerleri budosyaiçinde tutulursa sisteme erişebilentümkullanıcılarkendikullanıcılarınınve diğertümkullanıcılarınparolahash’lerini elde edebilirler.Parolahash’leri elde edildiktensonraçevrimdışıparolakırmasaldırılarına tabi tutulabilirler. İşte bu nedenleparolahash’leri sadece “root”(yani userID’si “0”olankullanıcı veyakullanıcılar) tarafındanerişilebilecekolan“shadow”dosyasındasaklanırlar. Bununlabirlikte herkullanıcınınkendi parolasınıdeğiştirebilmesigerekmektedir.“passwd”komutuyla yapılanbu işlemingerçekleştirilebilmesi içinbukomutunerişimhaklarınınçalışmaanında“root” kullanıcıseviyesine yükselmesigerekmektedir.Buhakkın“s” bittanımı ile yapıldığını dahaönce açıklamıştık.Bu komutunerişimhaklarındaexecuteyetkisininyerinde “s”harfini görmemizinsebebi budur,çünkü“passwd”komutu“shadow”dosyasındadeğişiklikyapabilmelidir. Kullanıcıyönetimi ileilgili birbaşkaönemli dosyada“/etc/group”dosyasıdır.
  • 80. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 79 [GrupAdı]:[GrupParolaHashi]:[GrupIDsi]:[GrupÜyeleriListesi] Grup parolası nedirderseniz,varolmasebebi “newgrp”komutuile başkabirgrubundahaklarınasahip olabilmektir.Ancakgrupparolasıpaylaşılanbirparolaolduğundanve pekde kullanımihtiyacı doğmadığındangenellikle tanımsızolur. Her kullanıcınınpasswddosyasıkaydındabirgrup ID’si bulunur.Ancakbirkullanıcıbirdenfazlagrubun üyesi olabilirve butanımlamagroupdosyasındayapılır.Yukarıdaki örnekte sadece “audio”grubuiçin “pulse”kullanıcısıbelirtilmiş.”pulse”kullanıcısının“passwd”dosyasındaki tanımınabaktığımızdaise bu kullanıcınıngrup ID’sinin126 olduğunugörüyoruz.
  • 81. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 80 Kali dağıtımının genel amaçlıUnix / Linux sistemlergibi ciddi birkullanıcıve grupyönetimine ihtiyaç bulunmadığındanneredeysehiçgrupmantığı kullanılmamışkullanıcılariçin. ÖntanımlıKali dağıtımında shell erişimi mümkünolarakbulunantekkullanıcıolan“root” kullanıcısının parolahash’ini ve “shadow”dosyasındaki diğerkayıtalanlarınıinceleyelim.
  • 82. BTRiskBilgi Güvenliğive BTYönetişimHizmetleri KALİLİNUX HAKKINDA HERŞEY 81 “shadow”dosyasındaki kayıtformatıaşağıdaki gibidir:  Kullanıcıadı: “root”  Parolahash’i ve diğerhashbilgileri: $6$VcS1CHvP$UYi9fhLxsvVB7bVz8E06yPaBkseiJ8UlPHqphUeEgpZnxDqZx5bJFpDw3aM4gnSj007 9Wbj15XFJG6gRHUfBh/  Parola’nınson değiştirildiği tarih(Unix epoch’tanitibarengüncinsinden): 16925 (4 Mayıs 2016)  Parola’nındeğiştirilebileceği enyakıngün(0 herhangi birzamandeğiştirilebileceğianlamına gelir):0  Parola’nınkaç günsonra değiştirilmeye zorlanacağı(99999 sınırsız süre boyunca değiştirilmeyebileceği anlamınagelir): 99999  Kullanıcınınkaç gün öncedenparoladeğişikliğihakkındauyarılacağı: 7  Parolakullanımsüresi dolduktankaçgünsonrahesabınkilitleneceği: Tanımsız  Hesabınkilitlendiği tarih(Unix epoch’tan itibarengüncinsinden): Tanımsız  Rezerve alan(dahasonrakullanılmaküzere ayrılmıştır) Parolahash’i ve diğerbilgilerise aşağıdaki gibi:  Hash türü  $1 = MD5  $2 =Blowfish  $2a=eksblowfish  $5 =SHA-256  $6 =SHA-512  Saltdeğeri  Hash değeri Hash alanındaki bölümler“$” karakteri ile ayrılmış.İlkbölümhashhesaplamaalgoritmasınıifade ediyor. Bu bilgiyi yukarıdadagörüldüğügibi /etc/pam.d/common-passworddosyasıiçinde de görebiliyoruz. İkinci bölümise yine Unix’e hasgüvenlikartırmaönlemlerindenbirisi.HatırlarsanızUnix /Linux sistemler çok kullanıcılısistemlerve tümkullanıcıların“passwd”dosyasınıgörme ihtiyacıvar demiştik.Bu durumdasistemi kullananbirbaşkakişinin de benimparolamlaaynıparolayasahipolmasıhalinde hash değerleri aynıolacaktıve benbu durumugördüğümde diğerkullanıcınınparolasınıöğrenmişolacaktım. Salt(tuz) değerininhashhesaplamadenklemine parolailebirlikte girmesihembudurumuortadan kaldırıyor(çünküparolalarımızaynı olsa da saltdeğerleri farklıolacağındanhesaplananhashdeğerleri farklıolacak) hemde rainbowtablosaldırılarıdediğimizparolahashkırma saldırılarınınetkinliğini çok azaltıyor.Rainbowtablolarıolasıtüm parolalarınhash’lerininuzunbirzamaniçinde hesaplandığıve bu değerlerin saklandığıtablolar.Dolayısıylabirhashele geçirdiğinizdeçokkısabir sürede butablolar sayesinde parolayıkırabiliyorsunuz.Ancaksaltdeğeri devreyegirdiğindeparolanınhash’inin hesaplanmasıve saklanmasıiçingerekli kaynaklargeometrikolarakartıyor.Bunedenle saltkullanımı parolahash güvenliğiniçokartırıyor. Kali’ninöntanımlıolaraksadece “root”kullanıcısınıninteraktif kullanabileceğişekilde geldiğini söylemiştik.Şimdi yeni birkullanıcıekleyelim.