process etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
process etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

20 Mart 2013 Çarşamba

ulimit komutu

Unix tabanlı sistemlerde,sistemin hangi ölçülerle kullanıldığının istatistiğini veren ve kullanıma göre ince optimizasyonlar yapılarak kullanıcının kaynakları kullanımında sınırlamalar getirilebilir.Olası DOS saldırıları bu şekilde engellenebilir.
terminale
ulimit -a
yazarak sistemde kullanılan kaynaklar hakkında daha ayrıntılı bilgi edinebilirsiniz.

Görüldüğü gibi max user process dediğimiz kullanıcının bir oturumda açabileceği process sayısı unlimited olarak ayarlanmış.Bu sebeple olası bir DOS tipi saldırı olan fork bombinge ortam hazırlamaktadır.

ulimit -u <girmekIstediğinizSayi>
ornek : ulimit -u 30


Gördüğümüz gibi max process sayısı 30 ile sınırlandırıldı.
Şimdi bir fork bombing scripti olan
 :(){ :|:& };:
komutu terminale yazarak sistemin vereceği cevabı görelim.

İşte sonuç :
Resource temporarily unavailable
Yani kaynak geçici olarak uygun değil.Bu ayarlama yapılmamış olsaydı yani siz konsolu açtığınızda direk
 :(){ :|:& };:
girdiğinizde makineniz kilitlenecek ve sistemi yeniden başlatmanıza sebep olacaktı.Bir sistemin yeniden başlatılması küçük boyutlu işlerde maliyet açısından gideri elle tutulur ölçülerde olmayabilir lakin büyük ölçekli sistemlerde(banka serverları,devlet kurumlarının kullandığı sistemler) bir sistemi yeniden başlatmak demek ana haber bültenlerinde son dakika haberi olmak demektir.

19 Mart 2013 Salı

Fork Bombing ve Korunumu

İsminden de anlaşılacağı gibi,bir process in kontrol dışı çoğalması ve kaynakların hunharca tüketilip sistemi dondurup,devre dışı haline getirmesidir.
Bir DOS(denial of service) saldırısıdır.Prosesler geometrik bir şekilde(1,2,4,8,16,32....) artacağı için memoryde akıl almaz bir kaynak tüketimi ve cpu nun işlem gücünü çalarak sistem üzerinde çalışan diğer hizmetlerin,programların çalışmasını engeller.
Şematize Fork Bombing

Fork Bombing den nasıl korunuruz ?

Unix türü işletim sistemlerinde kullanıcının bir oturumda açabileceği process sayısı önceden belirlenmiştir.Kullanıcı bu process sayısını kesinlikle aşamaz.unix te ulimit shell komutuyla bu sınırlama gerçekleştirilebilir.

Windows türü işletim sistemlerinde bu işlem process sayısı olarak değil de cpu kullanımı olarak ele alınmıştır.
kullanıcıların cpu kullanımı sınırlandırılır.

Basit bir Fork Bombing
Unix tabanlı işletim sisteminize aşağıdaki kodu yazıp çalıştırarak ne kadar çaresiz kalabileceğinizi öğrenebilirsiniz :)

#include <stdio.h>
#include <unistd.h>
void main(){
while(1){
fork();}
}
NOT:Derleyip çalıştırmadan önce açık kalan kayıt edilmemiş programlarınızı kapatın.

7 Mart 2012 Çarşamba

fork() komutu ve C diliyle network e giriş

Bildiğimiz gibi çalıştırdığımız programların arkaplanda nelerin döndüğünü baktığımızda karşılaştığımız kavramlardan biride processlerdir.Process tam olarak program değildir.Programlar processlerin işlemesiyle çalışır.Processlerde çalıştırılan programın kodları,değişkenleri,işlemcinin bayraklarının durumları gibi işletim sisteminin programla çalıştırılan programla haberleşmesini sağlayan durumlar bulunur. fork() komutu ise bir process ten başka bir process kopyalamak için üretilmiştir
 Öncelikle her processin unique dediğimiz nev-i şahsına münhasır id leri bulunur.Bunu c dilinde şu komutlarla gösterebilir.
#include <stdio.h>
#include <unistd.h>
int main() 
{ 
 printf("process id : %d\n",(int)getpid()); 
 }
Gelelim fork() komutuna.fork() komutu process kopyalamaya yarar.Kopyalanan process e child process,kopyalandığı process e parent process denir.Child process,parent process id sinden bir fazlası verilecek şekilde kopyalanır.
Burada dikkat etmemiz gereken husus return nun iki defa gerçekleşmesidir.  Parent process e ve child process e aynı anda dönüş yapılır.
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int forkResult;
printf("process id = %i\n",getpid());
forkResult=fork();
printf("process id = %i - result %d\n",getpid(),forkResult);
return 0;
}






Gördüğümüz gibi 2289 parent processimizn id sidir(PPID) 2290 ise child processimizin id sidir.
process id:2289 - result 2290(parent process)
process id:2289 - result 0(child process)