İçeriğe atla
0 XP 0
12 dkderinleşmeyle 13 dk45 XP6 etkinlik

Dosya sisteminde gezinmek

Bu derste
  • Linux dizin ağacında mutlak ve göreli yolla gezinir, gizli dosyaları listeler ve bir incelemede ilk hangi dizinlere bakacağını öğrenirsin.
  • Sonunda stat ve file ile bir dosyanın künyesini çıkarır, belge kökünde unutulan .env dosyasının nasıl sızdığını görürsün.

Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +45 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.

Bir Linux sunucusuna ilk kez bağlandığında elinde çoğu zaman yalnız bir komut satırı olur. Grafik arayüz yoktur, pencere yoktur.

Dosyayı bulmak, okumak ve iznini görmek için kabukla konuşursun. Bu derste dizin ağacında nasıl gezineceğini, dosyaları nasıl listeleyip inceleyeceğini ve bir güvenlik incelemesinde ilk hangi dizinlere bakacağını öğrenirsin. Komutları ezberlemek yerine mantığını kavra; aynı dört komutla hem kendi makineni yönetir hem de başkasının ele geçirdiği bir sunucuda ilk izleri ararsın.

Tek ağaç ve dört komut

Windows her diske ayrı harf verir: C:, D:, E:. Linux bunun yerine tek bir dizin ağacı kurar. Ağacın kökü eğik çizgiyle yazılır ve adı kök dizindir.

İkinci disk, USB bellek ya da ağ paylaşımı bu ağaçta bir dala bağlanır. Bu işleme bağlama (mount) denir. Sonuçta makinedeki her dosyanın kökten başlayan tek bir tam adresi olur. Bir dosyayı ararken onun hangi diskte olduğunu düşünmezsin; yalnız ağaçtaki yerini bilmen yeter.

Gezinmenin temelinde dört komut durur: pwd, cd, ls ve cat. pwd o an bulunduğun dizinin tam adresini yazar. cd seni başka bir dizine taşır.

ls bir dizinin içindekileri listeler. cat ise küçük bir dosyanın içeriğini ekrana basar. Terminalde yönünü kaybettiğinde önce pwd yaz; kabuk sana tam konumunu söyler. Bu dört komut bütün dağıtımlarda aynı çalışır, bu yüzden uzak bir sunucuda da kendi makinende de ilk refleksin bunlar olur.

Bir yolu iki biçimde yazarsın. Mutlak yol kökten başlar ve hep eğik çizgiyle açılır: /var/log/auth.log. Göreli yol bulunduğun dizinden başlar; /var içindeysen log/auth.log yazman yeter. Tek nokta bulunduğun dizini, çift nokta bir üst dizini gösterir.

Tilde ev dizininin kısaltmasıdır. Argümansız cd seni eve döndürür, cd - ise bir önceki dizine geri götürür. Yol yazarken Tab tuşuna basarsan kabuk adı kendiliğinden tamamlar ve yazım hatasını baştan önler.

$ pwd
/home/ege
$ cd /var/log
$ pwd
/var/log
$ cd nginx
$ pwd
/var/log/nginx
$ cd ~
$ pwd
/home/ege
Mutlak ve göreli yolla gezinme. Her pwd o anki konumu yazar.

Örnekteki cd /var/log mutlak yoldur; nerede olursan ol seni aynı yere götürür. cd nginx ise göreli yoldur ve yalnız /var/log içindeyken çalışır. Her adımdan sonra pwd yazmak başta iyi bir alışkanlıktır, çünkü komutun seni doğru yere götürdüğünü gözünle görürsün.

Uzak bir sunucuda yanlış dizinde iş yapmak pahalı hatalara yol açar: dosyayı yanlış yere kopyalar, yanlış dizini silersin. Konumundan emin olmak hız kaybı değil, güvenliktir.

Etkinlik 1 / 6

/var/log/nginx dizinindesin. Göreli yolla /var/log dizinine dönmek için cd ____ yazarsın.

Dosyaları listelemek ve incelemek

ls tek başına yalnız adları basar; bayraklar çıktıyı zenginleştirir. -l uzun biçimi açar ve izin, sahip, grup, boyut ile değişim tarihini yan yana dizer. -h boyutu 4,0K ya da 12M gibi okunur birime çevirir. -t listeyi değişim zamanına göre sıralar ve en yeni dosyayı başa koyar.

-a adı nokta ile başlayan gizli dosyaları da gösterir. Bayrakları birleştirebilirsin: ls -lh ile ls -l -h aynı işi yapar. Bir incelemede en çok ls -lat yazarsın, çünkü en son değişen dosyayı en üstte görürsün.

Adı nokta ile başlayan dosya varsayılan listede görünmez. Buradaki gizlilik bir güvenlik önlemi değildir, yalnız ekranı sadeleştirir. Oysa bu dosyalar incelemede çok şey anlatır. .bash_history kullanıcının yazdığı komutları tutar.

.ssh dizininde özel anahtarlar ve authorized_keys listesi durur. Bir web projesindeki .env dosyası çoğu zaman veritabanı parolasını taşır. Bu yüzden bir dizini ls -la yazmadan gördüm sayma; en kritik ipuçları çoğu zaman gizli dosyalardadır.

Bir dosyayı açarken boyuta göre araç seçersin. cat kısa dosyada iş görür, ama binlerce satırlık bir kaydı ekrana dökmek işe yaramaz. less dosyayı sayfa sayfa açar: ok tuşlarıyla gezer, eğik çizgiyle içinde arar, q ile çıkarsın.

head dosyanın baştaki satırlarını, tail ise sondaki satırlarını basar. Bir kayıt dosyasında en yeni olay en sonda durur, bu yüzden tail -n 50 çoğu incelemenin ilk adımıdır. tail -f ise dosyayı açık tutar ve yeni satırlar geldikçe ekrana döker; bir saldırıyı canlı izlerken bunu kullanırsın.

Tek bir dosyayı daha yakından tanımak istersen iki komut işini görür. stat bir dosyanın boyutunu, inode numarasını, sahibini ve zaman damgalarını verir.

Access son okumayı, Modify içeriğin son değişimini, Change ise izin ya da sahiplik gibi bilgilerin son değişimini gösterir. file ise dosyanın türünü söyler, ama uzantıya bakmaz; içeriğin ilk baytlarını okur ve gerçek biçimi oradan anlar. fatura.pdf adıyla duran bir kabuk betiğini çoğu zaman file ile yakalarsın, çünkü uzantı yalan söyleyebilir, baytlar söylemez.

$ stat notlar.txt
  File: notlar.txt
  Size: 1024      	Blocks: 8      IO Block: 4096   regular file
Device: 8,1	Inode: 1835019    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ ege)   Gid: ( 1000/ ege)
Access: 2026-09-19 10:05:40 +0300
Modify: 2026-09-19 10:02:11 +0300
Change: 2026-09-19 10:02:11 +0300
$ file fatura.pdf
fatura.pdf: Bourne-Again shell script, ASCII text executable
stat dosyanın künyesini, file gerçek türünü verir. Uzantı pdf olsa da içerik bir betik.

stat çıktısındaki (0644/-rw-r--r--) ifadesi izni hem sekizli hem harfli biçimde bir arada gösterir; izinler dersinde bu iki biçimi ayrıntısıyla çözeceksin. Modify satırı içeriğin en son ne zaman değiştiğini söyler ve incelemede olay zamanıyla bu damgayı karşılaştırırsın. file çıktısı ise açık konuşur: uzantısı pdf olan dosya aslında bir kabuk betiğidir. Bir e-posta ekinde böyle bir dosya görürsen, açmadan önce file ile türünü doğrula.

Etkinlik 2 / 6

Ev dizinindesin. Gizli dosyalar dahil her şeyi uzun biçimde listele.

ogrenci@lab

Dosya sistemi hiyerarşisi

Dizin düzeni rastgele değildir. Dosya Sistemi Hiyerarşi Standardı, kısa adıyla FHS, her ana dizinin işini tanımlar. /etc makineye özel yapılandırma dosyalarını tutar. /home kullanıcıların kişisel dizinlerini barındırır, root kullanıcısının evi ise ayrıca /root altındadır.

/var zamanla değişen veriyi taşır ve kayıtlar /var/log altında birikir. /usr kurulu programları tutar ve normal işleyişte pek değişmez. /tmp geçici dosyalar içindir; çoğu sistem onu açılışta ya da düzenli aralıkla temizler.

Birkaç dizinle de erkenden tanış. /bin ve /sbin temel komutları içerir; bugün çoğu dağıtımda bu iki dizin /usr altındaki karşılıklarına giden birer sembolik bağlantıdır. /opt kurumun elle kurduğu ek yazılımlar içindir.

/dev aygıtları dosya gibi gösterir. /lib paylaşılan kütüphaneleri tutar. Bir dizinin işini bilmek arama alanını baştan daraltır: bir parola dosyasını /tmp altında değil /etc altında, bir servis kaydını /home altında değil /var/log altında ararsın.

/etc içinde üç dosyayı erkenden tanı. /etc/passwd kullanıcı listesini tutar ve herkes okuyabilir; adı yanıltıcıdır, çünkü içinde parola yoktur. Her satır iki nokta ile ayrılmış alanlardan oluşur: kullanıcı adı, bir yer tutucu, kullanıcı numarası, grup numarası, açıklama, ev dizini ve giriş kabuğu.

Örneğin ege:x:1000:1000:Ege:/home/ege:/bin/bash satırını soldan sağa okursan kullanıcıyı tanırsın. Parola özetleri ise /etc/shadow dosyasında durur ve normal kullanıcı onu açamaz. /etc/ssh/sshd_config ise SSH sunucusunun kurallarını yazar.

/etc/shadow satırındaki özet, parolanın nasıl saklandığını da ele verir. Başındaki etiket algoritmayı söyler: $6$ ile başlayan özet SHA-512, $y$ ile başlayan özet ise yescrypt algoritmasını gösterir. Güncel dağıtımlar artık varsayılan olarak yescrypt kullanır, çünkü sözlük saldırısına karşı daha dayanıklıdır.

Bir incelemede $1$ gibi eski ve zayıf bir etiket görürsen, hesabın yıllardır dokunulmamış olabileceğini not edersin. Aynı dosyada boş parola alanı ya da /etc/passwd içinde kullanıcı numarası 0 olan ikinci bir hesap da alarmdır: numarası 0 olan her hesap root yetkisi taşır.

Etkinlik 3 / 6

Dizini tuttuğu içerikle eşleştir.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.

Aramak ve süreç dizinleri

Adını tam bilmediğin dosyayı find ile bulursun. find /home -name "*.env" bütün ev dizinlerindeki .env dosyalarını listeler. Deseni tırnağa al; yoksa kabuk yıldızı find'a ulaşmadan kendisi genişletir.

-type f yalnız dosyaları seçer, -mtime -1 son 24 saatte değişenleri getirir, -perm izne göre süzer. Kök dizinden tararken izin verilmeyen dizinler hata basar; bu gürültüyü 2>/dev/null ile sessize alır, yalnız gerçek sonuçları görürsün.

$ find / -name "*.env" -type f 2>/dev/null
/var/www/site/.env
/home/ege/proje/.env
$ find /var/log -name "*.gz" -mtime -7
/var/log/auth.log.2.gz
/var/log/nginx/access.log.3.gz
find ağacı gezer; tırnak ve 2>/dev/null çıktıyı temiz tutar.

Etkinlik 4 / 6

Sunucuda son 24 saatte değişen bütün dosyaları, alt dizinler dahil bulmak istiyorsun. Hangi komutu yazarsın?

/proc gerçek bir disk dizini değildir; çekirdek onu bellekte üretir ve çalışan her süreç için numarasıyla bir klasör açar. /proc/4312/cmdline o sürecin başlatıldığı tam komut satırını tutar, ama alanları görünmez bir karakterle ayırır.

tr '\0' ' ' < /proc/4312/cmdline yazarsan satırı okunur hâle getirirsin. /proc/4312/exe ise çalışan dosyanın gerçek yolunu gösteren bir bağlantıdır. Modülün son dersinde bu iki yolu şüpheli bir süreci çözerken kullanacaksın.

/tmp herkesin yazabildiği ortak alandır. Saldırgan indirdiği aracı çoğu zaman buraya ya da /dev/shm altına koyar, çünkü yazma hakkı için kimseye sormaz. Savunan taraf da bu yüzden /tmp ve /dev/shm altında beklenmedik çalıştırılabilir dosya arar.

find /tmp -type f -executable gibi bir komut, orada durmaması gereken bir ikili dosyayı hızla ortaya çıkarır. Normal bir sistemde /tmp altında çalıştırılabilir dosya nadiren bulunur.

Derinleş:Bağlama ve sanal dosya sistemleri

Linux'ta her şey tek ağaçta görünür, ama ağacın her dalı gerçek bir diskten gelmez. mount komutu hangi aygıtın nereye bağlandığını listeler. df -h ise her bağlama noktasının doluluk oranını gösterir.

Bazı dizinler hiçbir diske karşılık gelmez. /proc ve /sys çekirdeğin canlı durumunu dosya gibi sunan sanal dosya sistemleridir; makineyi kapattığında içerikleri kaybolur. /dev/shm ve /run bellekte tutulan tmpfs alanlarıdır.

Bir dosyanın gerçekten diske mi yoksa belleğe mi yazıldığını bilmek incelemede önemlidir, çünkü bellekteki iz makine kapanınca silinir. Şüpheli bir dosyanın hangi dosya sistemine düştüğünü df /yol komutuyla saniyeler içinde görürsün. lsblk komutu ise diskleri ve bölümleri ağaç olarak çizer, böylece hangi aygıtın nereye bağlandığını tek bakışta anlarsın; bir USB belleğin ya da ağ paylaşımının sonradan eklendiğini de buradan fark edersin.

Etkinlik 5 / 6

Aşağıdaki üç find komutundan biri desenini tırnağa almadığı için beklenmedik çalışır. Hatalı satırı seç.

Zafiyetli satıra tıkla.

Savunma: belge kökündeki sızıntı

Aynı bilgiyi web tarafına taşı. Bir web sunucusu, belge kökündeki dosyaları adresleriyle ziyaretçiye verir. /var/www/site dizini belge köküyse, oradaki iletisim.html dosyası /iletisim.html adresinden açılır.

Sorun şu ki geliştiriciler .env dosyasını, yedek dosyalarını ya da bir .git dizinini de bazen aceleyle bu köke bırakır. Dosyanın adı nokta ile başlasa bile, bu yalnız dosyayı ls listesinde gizler; web sunucusu dosyayı adresi istenince gönderir ve veritabanı parolası dışarı sızar.

Korunma üç katmanlıdır. Önce .env dosyasını belge kökünün dışına, uygulamanın okuyabildiği ama web ile sunulmayan bir dizine taşırsın. Sonra sunucu yapılandırmasında nokta ile başlayan dosyalara erişimi kapatan bir kural eklersin.

Son olarak dosyanın iznini daraltırsın; dosyayı yalnız uygulamayı çalıştıran hesap okuyabilir. Üç katman birden olunca tek bir hata açığa dönüşmez. Dosya izinlerini nasıl kuracağını modülün üçüncü dersinde göreceksin.

Etkinlik 6 / 6

Doğru mu, yanlış mı?

Sitenin belge kökünde duran .env dosyasını, adı nokta ile başladığı için ziyaretçi indiremez.

Bu derste bir hata mı gördün? Bildir