İyi günler Türk Hack Team ailesi.
Bugün Linux'un üzerindeki kök dosya sistemini inceliyeceğiz.
Gömülü bir işletim sistemini oluşturan toplamda 4 ana parça vardır. Bunlardan birisi de kök dosya sistemidir. Klasik bir kök dosya sisteminde 3 adet dosya dizin bulunur. Bunlar genelde /lib, /bin ve /etc gibi dizinlerden oluşur. Bu dizinler içerişinde çeşitli program ve betikler bulunur. Tabi benim suanda göstericeğim dosya sistemi klasik bir kök dosya sistemini gibi dosyalar barındırmayacaktır. Bunun yerine 'initramfs' şekilde çok ama çok basit bir şekilde kök dosya sistemi göstericeğim. Size göstereceğim kök dosya sistemi içerisinde tek bir dosya çalışabillir. İlk kök dosya sistemimiz olduğu için bu kadar'ı kafi.
Simdi söyle bir mantık düşünmenizi istiyorum. Kök dosya sistemini ve içindeki hiç bir uygulamaya gerek duymadığımızı ve kendi linux sistemimizin projesine ait bütün ama bütün kodları, C dilini kullanarak kendimiz'in yazdığını düşünüyorum. Peki bu işlemlerin tamamını hatasız bir şekilde gerçekleştirdik diyelim. Bu durumda kendi yazdığımız C kodlarını nasıl derleyip initramfs'ın içerisine aktarıcağız?
Simdi bir sistemin nasıl çalıştığına bakalım. İlk başta sistem açılırken çekirdeğin yüklenmesinin tamamlanması gerekmektedir. Bu işlem sonuç bulduğunda, ardından initramfs dosyası belleüe yüklenir. Ardından sisteme biner yani mount edilir. Ardından çekirden /init programını arar çünkü initramfs sistemleri için ana giriş /init dizinidir.
Eğer initramfs içinde, normal ve tıkırında çalışan bir sistem kurmuş olşaydık, /init programını /sbin/init'e sembolik olarak bağlamış olurduk. /sbin/init program'ı muhtemel sistemimizi hazır hale getirmiş olurdu. Ya da /init'e /bin/sh gibi bir kabuk programını sembolik olarak bağlardık. Bu durumda açılışta ekrana doğrudan prompt gelirdi. Bu örnek uygulamada, init programını kendimiz yapacağız. Başlangıc seviyesinde olduğundan çok kasmaya gerek yok. Oyuzden ekrana mesaj yazdırmak veya 2 tane sayıyı toplamak yeterli olucaktır. Fakat ben ekrana 'iyi günler' yazdıracağım.
Örnek olarak bu kod. Bu dosyanın ismini kokdosyasistemi.c yaptım. Simdi bu programı derliyelim. Bu işlemi aşağıdaki kod ile yapabillirsiniz.
Bu yaptığımız derleme ile yarım saat dinamik olarak çalışacak bir kütüphanelerle uğraşmak için, tıkır tıkır çalışan bir statik derleme işlemini gerçekleştirdim. Bunun sayesinde gerekli bütün kütüphaneler, kodun altına eklendi. Bunun sayesinde istediğimiz zaman bu kodu çalıştırmak için sadece kendisini taşımamız yeterli olucaktır. Ama görücek olucaksınız ki 3 satırlık kod toplamda 560 bayt uzunluğuna erişmektedir. Bunu kısmak için kodu strip yaparak boyutunu kısabillirsiniz. Eğer bu programı çalıştırmak isterseniz file komut'unu kullanabillirsiniz.
Simdi bir önceki anlatıklarım gömülü bir sistemin içerişinde bulunan en basit sistem olabillirdir. Burada anlatıcaklarım olan ikinci sistem ise busybox destekli klasik fakat son derece küçük bir kök dosya sistemi bulunacaktır. Ayrıca bir açılış betiği bulunacak ve bütün gömülü sistemi adım adım login promptuna taşıyacaktır.
1 inci bölümün sonu. 2 inci bölüm biraz daha detaylı bir anlatım olucağından Linux sistemleri hakkında bilgi edinmeniz tavsiye edilir.
İkinci bölüm en geç haftaya cumaya kadar açılacaktır.
Bugün Linux'un üzerindeki kök dosya sistemini inceliyeceğiz.
Gömülü bir işletim sistemini oluşturan toplamda 4 ana parça vardır. Bunlardan birisi de kök dosya sistemidir. Klasik bir kök dosya sisteminde 3 adet dosya dizin bulunur. Bunlar genelde /lib, /bin ve /etc gibi dizinlerden oluşur. Bu dizinler içerişinde çeşitli program ve betikler bulunur. Tabi benim suanda göstericeğim dosya sistemi klasik bir kök dosya sistemini gibi dosyalar barındırmayacaktır. Bunun yerine 'initramfs' şekilde çok ama çok basit bir şekilde kök dosya sistemi göstericeğim. Size göstereceğim kök dosya sistemi içerisinde tek bir dosya çalışabillir. İlk kök dosya sistemimiz olduğu için bu kadar'ı kafi.
Simdi söyle bir mantık düşünmenizi istiyorum. Kök dosya sistemini ve içindeki hiç bir uygulamaya gerek duymadığımızı ve kendi linux sistemimizin projesine ait bütün ama bütün kodları, C dilini kullanarak kendimiz'in yazdığını düşünüyorum. Peki bu işlemlerin tamamını hatasız bir şekilde gerçekleştirdik diyelim. Bu durumda kendi yazdığımız C kodlarını nasıl derleyip initramfs'ın içerisine aktarıcağız?
Simdi bir sistemin nasıl çalıştığına bakalım. İlk başta sistem açılırken çekirdeğin yüklenmesinin tamamlanması gerekmektedir. Bu işlem sonuç bulduğunda, ardından initramfs dosyası belleüe yüklenir. Ardından sisteme biner yani mount edilir. Ardından çekirden /init programını arar çünkü initramfs sistemleri için ana giriş /init dizinidir.
Eğer initramfs içinde, normal ve tıkırında çalışan bir sistem kurmuş olşaydık, /init programını /sbin/init'e sembolik olarak bağlamış olurduk. /sbin/init program'ı muhtemel sistemimizi hazır hale getirmiş olurdu. Ya da /init'e /bin/sh gibi bir kabuk programını sembolik olarak bağlardık. Bu durumda açılışta ekrana doğrudan prompt gelirdi. Bu örnek uygulamada, init programını kendimiz yapacağız. Başlangıc seviyesinde olduğundan çok kasmaya gerek yok. Oyuzden ekrana mesaj yazdırmak veya 2 tane sayıyı toplamak yeterli olucaktır. Fakat ben ekrana 'iyi günler' yazdıracağım.
Örnek olarak bu kod. Bu dosyanın ismini kokdosyasistemi.c yaptım. Simdi bu programı derliyelim. Bu işlemi aşağıdaki kod ile yapabillirsiniz.
Bash:
arm-linux-gcc -static -o init kokdosyasistemi.c
Bu yaptığımız derleme ile yarım saat dinamik olarak çalışacak bir kütüphanelerle uğraşmak için, tıkır tıkır çalışan bir statik derleme işlemini gerçekleştirdim. Bunun sayesinde gerekli bütün kütüphaneler, kodun altına eklendi. Bunun sayesinde istediğimiz zaman bu kodu çalıştırmak için sadece kendisini taşımamız yeterli olucaktır. Ama görücek olucaksınız ki 3 satırlık kod toplamda 560 bayt uzunluğuna erişmektedir. Bunu kısmak için kodu strip yaparak boyutunu kısabillirsiniz. Eğer bu programı çalıştırmak isterseniz file komut'unu kullanabillirsiniz.
Simdi bir önceki anlatıklarım gömülü bir sistemin içerişinde bulunan en basit sistem olabillirdir. Burada anlatıcaklarım olan ikinci sistem ise busybox destekli klasik fakat son derece küçük bir kök dosya sistemi bulunacaktır. Ayrıca bir açılış betiği bulunacak ve bütün gömülü sistemi adım adım login promptuna taşıyacaktır.
1 inci bölümün sonu. 2 inci bölüm biraz daha detaylı bir anlatım olucağından Linux sistemleri hakkında bilgi edinmeniz tavsiye edilir.
İkinci bölüm en geç haftaya cumaya kadar açılacaktır.