---- Turkish Scene SayI - 7 - http://www.trscene.org ----

banner.gif (7583 bytes)

Turkish Scene V.07
20-06-1999

Bu Gazetenin yayın hakları:
1- Gazetenin herhangi bir bölümü kaynak gösterilmek şartıyla kullanılabilir.
2- HTML, DOC, TXT vs olarak her türlü ortamda serbestçe kullanılabilir, istenildiği kadar çoğaltılabilir.
3- Turkish Scene hiç bir suretle parayla satılamaz.
4- Sadece Turkish Scene'nin yazarları içerik üzerinde değiştirme yapma hakkına sahiptir.
5- Döküman üzerinde değişiklik yapıp yeniden yayınlanması yazarların yazılı izniyle mümkün olabilir.
6- Bu döküman kaynak gösterilmek şartıyla 3.parti dökümanlarda kullanılabilir.Alıntılarda Turkish Scene'nin hangi sayısından alındığı, yazarın adı, dökümanın orijinalinin nereden bulunacağı açık olarak belirtilmelidir.
7- Dökümanlarda var olabilecek her türlü hatadan, yazılanlar uygulandığında doğabilecek maddi/manevi zararlardan dolayı yazarlar, web author, hosting herhangi bir sorumluluk kabul etmez.
8- Verilen bütün bilgiler eğitim amaçlıdır.
9- Bu gazeteyi okuyanlar bu şartları aynen kabul etmiş sayılırlar.


Turkish Scene Sayı-7-İçeriği : (Turkish Scene Sayı-7- .zip paketi)

Editörden

       Turkish Scene ekibi olarak 7. sayımızla yeniden tüm okurlarımıza merhaba demenin zevkini yaşıyoruz. Bu ay içerisinde üniversiteli arkadaşlarımızın final sınavları, üniversiteye hazırlananların ÖSS’ye girmeleri ve sektörümüzdeki yoğun tempoya rağmen gazetemizi bu ay da çıkartabilmek bizim için zor ama keyifliydi yine her ayki gibi..

      Neler mi yaptık, yeni köşeler açtık, iki yeni arkadaşımız takıma katıldı, mevcut yapımızı koruduk.. Tüm bunlara ilave olarak, bilgi alışveriş listemizi canlandırdık ve bilgi adına güzel tartışmaların yapıldığı bir liste oluşturduk, gün geçtikçe listemize üye olanların sayısı artıyor ve bilgi alışverişlerimiz yoğunlaşıyor, siz de bilgi paylaşımına katılmak istiyorsanız imailsrv@desibel.net  adresine içeriğinde subscribe trscene isim soyad geçen bir mesaj atıp sisteme üye olabilir ve bizlerle bilgi paylaşımına katılabilirsiniz..

      Geçen ay pek çok arkadaş ekibe katılmak istediklerini belirttiler attıkları maillerde, Turkish Scene ekibine dahil olmak için, en az bir konuda uzman ya da çok araştırmacı olmanız gerekli, gazetemizde en az 6 ay yazabilmelisiniz, grup ahengi içinde çalışabilmelisiniz, en başta kendinizi herşeyi biliyor görmemeli ve bilgi paylaşımını içinize sindirmiş olmalısınız. Özellikle hangi konuda yardım istiyorsunuz diye sormadan önce ben şu konuları iyi biliyorum ya da size şu konularda yardımcı olabilirim diyebilmelisiniz. Bu şartları sağlayabilmişseniz gerisi çok kolay, projman@trscene.org adresine bir mail atarak benimle irtibata geçebilirsiniz..

      Turkish Scene’den yeni bir çalışma, oluşturacağımız Tükçe Döküman Bankası Projesi (TDBP) ni yakında hayata geçireceğiz. TDBP bir sistem olacak, sisteme dahil olabilmek için en az 3 üngilizce dökümanı Türkçeleştirip sisteme katılabileceksiniz, o zaman kadar çevirilen tüm dökümanları görebilecek, doküman bankamızdan istifade edebileceksiniz. Şu anda dökümanlar belirlenme ve sistem oluşturulma aşamasında. Kapsamımız Bilgisayar’la ilgili herşey olacak, gazetemizdeki konuların yanında daha farklı konularda da dökümanlar bulunabilecek. Türkiye’nin en büyük Türkçe Bilgi Bankası proje aşamasında, proje için önerilerinizi çekinmeden bana gönderebilirsiniz. Amacımız klasik, bizden sonrakilere birşeyler bırakabilmek, bizden sonra gelenler ya bize teşekkür edecek ya da küfür edecek, seçiminizi yapın ve TDBP çalışmasında yer alıp almayacağınıza karar verin.

      Turkish Scene var olduğu sürece yeniliklerimiz hiç bitmeyecek, yazın bu daha boş, daha rahat çalışmalar yapabileceğimiz günlerinde olabildiğince verimli olarak yeni birşeyler üretip Türk Bilişimine hediye edeceğiz, çalışmak bizden.....

     Hepinize Turkish Scene Ekibi adına üretken ve keyifli bir yaz tatili diliyorum, güneşe ve BSA’ya çarpılmayın :)

Turkish Scene Ekibi Adına:
          Projman
“Knowledge is Power”


Virüsler: New Exe Virüsleri

Virüsler ile ilgili olarak devam eden yazımıza bu ay NE (New Exe) tipi dosyalara bulaşan virüsler ile devam ediyoruz.

Bu tür dosyalara bulaşabilmek için öncelikle DOS EXE tipi dosyalara nasıl bulaşıldığını iyice anlamış olmak gerekir. DOS EXE tipi programlara bulaşma konusunu daha önceki sayılarda anlatmıştım. Bu yazıyı okumadan önce o yazıya bir kez okursanız daha iyi olur.

Pek çok kullanıcı New Exe tipi dosyalarla Windows 3.1x ile birlikte karşılaştı. New Exe tipi dosyalar yapı itibarıyle DOS Exelerinden farklı oldukları için exe programın ilk başında bir DOS EXE header ve DOS kodu yeralmaktadır. Bu sayede bir new exe programı DOStayken çalıştırdığımızda 'This program requires Windows - Bu program Windows gerektirir' türünden mesajlarla karşılaşabiliyoruz.

Şimdi New Exe başlığının ne olduğuna bakalım

Ofset Uzunluk Açıklama
00h 2 bayt 'NE' imzası (4Eh 45h)
02h 2 bayt Linker sürümü (Major, Minor)
04h 1 word New exe başlıktan giriş tablosuna olan ofset
06h 1 word Giriş tablosunun uzunluğu
08h 1 dword Dosya yükleme CRC değeri (Turbo Pascal for Windows ile derlenen programlarda=0)
0Ch 1 bayt Program işaretleri (flags)
0Dh 1 bayt Uygulama işaretleri
0Eh 1 word Otomatik data segmenti indeksi
10h 1 word initial local heap size
12h 1 word initial stack size (data segmentine eklenir, SS<>DS ise 0000h değeri alır)
14h 1 dword CS:IP adresi, CS is index into segment table
18h 1 dword SS:SP adresi, SS segment indeksini gösterir
1Ch 1 word Segment sayacı
1Eh 1 word Modül referans sayacı
20h 1 word Bellekte yerleşik kalmayan isim tablosu uzunluğu
22h 1 word Bu başlığın segment tablosuna göre ofseti
24h 1 word Bu başlığın Resource tablosuna göre ofseti
26h 1 word Bu başlığın kalıcı isim tablosuna göre ofseti
28h 1 word Bu başlığın Modül referans tablosuna göre ofseti
2Ah 1 word Bu başlığın import tablosuna göre ofseti
2Ch 1 dword Bu başlığın kalıcı olmayan isim tablosuna göre ofseti
30h 1 word Giriş tablosunda listelenen taşınabilir giriş noktası sayısı
32h 1 word file alignment size shift count
34h 1 word Resource tablosu giriş sayısı
36h 1 bayt Hedef işletim sistemi
00: Bilinmiyor
01: OS/2
02: Windows
03: European MS-DOS 4.x
04: Windows 386
05: Borland Operating System Services
37h 1 bayt Diğer EXE işaretleri
38h 1 word offset to return thunks or start of gangload area
3Ah 1 word offset to segment reference thunks or length of gangload area
3Ch 1 word Minimun kod takas alanı boyutu
3Eh 2 bayt Beklenen Windows sürümü (Minor+Major)

(Not: Bazı kısımların tercümelerini beceremedim :( Bu arada tablolar M$'dan alınma)

New Exe program bayrakları;

Bit Açıklama
0-1 DGROUP tipi
0 : none
1 : single shared
2 : multiple (unshared)
3 : null
2 global initialization
3 Sadece korunumlu mod
4 8086 komutları
5 80286 komutları
6 80386 komutları
7 80x87 komutları

New Exe uygulama bayrakları;

Bit Açıklama
0-2 Uygulama tipi
001 :Tam ekran
010 :Windows uyumlu
011 :Windows kullanır
3 OS/2 uygulamasıdır
4 ???
5 0: çalıştırılabilir, 1:hatalı
6 non-conforming program (valid stack is not maintained)
7 DLL veya uygulamadan çok bir sürücü
(SS:SP geçersizdir, CS:IP yazmaçları AX=modul handle ile çağrılan FAR init rutinini gösterir. Hata varsa AX=0 döner)

New Exe segment tablosunun yapısı;

Ofset Uzunluk Açıklama
00h 1 word Dosyadaki ofset (shift left by align shift to get bytes)
02h 1 word Dosyadaki görüntü uzunluğu (0000=64K)
04h 1 word Segment öznitelikleri
06h 1 word Segment için yeniden yerleştirilecek bayt sayısı (0000=64K)

Segment Özellikleri;

Bit Açıklama
0 Data segmenti
1 Kullanılmıyor
2 Gerçek mod
3 iterated
4 Taşınabilir
5 Paylaşılabilir
6 Preloaded rather than demand loaded
7 Sadece çalıştır (Kod) veya sadece oku (data)
8 Yeniden konumlandırmalar (Bu segment için direkt izleyen kod)
9 Debug info hazır
10-11 80286 DPL bitleri
12 Gözardı edilebilir
13-14 Öncelik gözardı edilebilir.

New Exe yeniden konumlandırılabilir Veri Yapısı;

Ofset Uzunluk Açıklama
00h 1 word Yeniden konumlandırılabilir öğe sayısı
02h 8x? bayt Yeniden konumlandırılabilir öğeler

Yeniden konumlandırılabilir öğeler;

Ofset Uzunluk Açıklama
00h 1 bayt Konumlandırma tipi
00h: LOBYTE
02h: BASE
03h: PTR
05h: OFFS
0Bh: PTR48
0Dh: OFFS32
01h 1 bayt İşaretler - Bit 2: additive
02h 1 word Segment içerisindeki ofset
04h 1 word Hedef Segment adresi
06h 1 word Hedef Ofset adresi

Önce New Exe tipi dosyaların yapılarına bir bakalım.

0000h DOS EXE Başlığı
  DOS Kodu
0400h New Exe Başlığı ve bazı tablolar
  Segment tablosu
  Diğer tablolar
CS:IP Windows kodu ve segmentleri

Şimdi de virüslü bir New Exe programının yapısına bakalım

0000h DOS EXE Başlığı
  DOS Kodu
03F8h New Exe Başlığı ve bazı tablolar
  Segment tablosu
  Virüs segmenti
  Diğer tablolar
  Windows kodu ve tabloları
CS:IP Virüs segmenti (Virüsün kodu+data)
  Yeniden konumlandırma başlangıcı

Of be ne tablo ama ! Tablolarla işimizi bitirdikten sonra şimdi de New Exelere nasıl bulaşıldığına bakalım.

NEW EXE TESTİ

İlk aşamada bulaşılacak programın bir DOS EXE'mi yoksa New Exemi olduğuna karar vermek gerek. Bunu DOS EXE başlığının 18h ofsetine bakarak, buradaki değerin 40h veya daha yukarısı bir değer alıp almadığını kontrol ederek anlamak mümkün. Bunun yanısıra yukarıdaki New Exe headerda da göreceğiniz gibi başlığın ilk iki karakterinin 'NE' olup olmadığını kontrol edilerek de bu olay halledilebilir.

(NOT: Bu alanda eğer PE bulursanız, bu o programın Portable Executable olduğu anlamına gelir. Bu tip programlarda PE header denen ayrı bir tablo kullanılır.İleride bu konuya da değinicem)

DOS BAŞLIĞINDAKİ DÜZENLEMELER

Dos başlığında düzeltmeler yapılırken DOS kodunun çalıştığında set edilecek olan SP yazmacı değeri 8 azaltılmalıdır. SP yazmacı bir new exe programda DOS kodunun sonunu yada bir başka deyişle new exe başlığının başlama konumunu gösterir.Ancak gerçekte New Exe başlık göstergeci 3Ch adresinde yer alır.

NEW EXE BAŞLIĞINDAKİ DÜZELTMELER

14h ofsetinde yeralan CS:IP ikilisi programa giriş noktasını göstermektedir. Bu ikiliden CS, segment tablosundaki ilk segment numarasını gösterir. Bu değer virüsün kontrolü programa devredeceği anda kullanılmak üzere saklanmalıdır. Tabi CS:IP ikilisi de virüs segmentine ayarlanmalıdır ki öncelikle virüs çalışsın.

Segment sayacı, ofset 1Ch konumunda yeralan bir worddür. Programa ekleyeceğimiz virüs kodunu ayrı bir segment olarak düşünmemiz gerekir. Bu yüzden 1Ch ofsetindeki wordu 1 arttırmak gerekir.

Segment tablosu pointeri NE başlıkta da görecebileceğiniz gibi 22h ofsetinde bulunan bir worddür. Eğer 4h, 24h, 26h,28h,2Ah ofsetlerindeki değerler 22h ofsetindeki değerden büyük ise büyük olan ofsetteki değerlerin 8 azaltılması gerekecektir. Bu alan virüsün segment başlangıcının hesabında kullanılır.

VİRÜS SEGMENT BAŞLANGICI

Virüs segmentinin başlangıcı segment tablosunun yapısı ile aynıdır. Bu yapının 2 ve 6 ofsetlerindeki word değeri virüsün uzunluğuna bağlı olarak değişir. 4 ofserindeki sayı ise segmentin çalışabilir kısmının yeniden konumlandırılabilir olmasını sağlamak için 180h değeri almalıdır.Bu şekilde orjinal programın çalıştırılması sağlanabilir.

VİRÜSÜN EKLENMESİ

Virüsün eklenmesi olayında şimdiye kadar anlattığımdan farklı bir olay yok. Aynı şekilde virüs kodu dosyanın sonuna yazılır.

YENİDEN KONUMLANDIRMA BAŞLANGICI

Bu olay da aslında New Exe yeniden konumlandırılabilir veri yapısı ile aynıdır. Bu yapıdaki ilk word 1 adet yeniden konumlandırma başlangıcı olduğundan (kontrolü orjinal programa devretmek için) 0001 değeri alacaktır.Sonraki bayt ise 3 (PTR) değeri alacaktır.Buradaki 3 değeri 32 bitlik JMP FAR olayını göstermektedir.Sonraki baytın değeri de 4 olmalıdır.Takip eden word, JMP FAR komutundan sonra gelecek olan dword uzunluğundaki adresin segment içindeki konumunu gösterir. Sonraki 2 word sırayla; orjinal programa ait CS ve IP değerlerini gösterir.

Virüsü kodlarken dikkat etmek gereken bir-iki noktayı da böylece geçtikten sonra şimdi de bir new exe çalıştırılmaya başlandığında registerların aldıkları değerlere bakalım

Ax : Ortam segmenti
Bx : Ortam segmentindeki komut kuyruğunun ofseti
Cx : Otomatik data degmentinin uzunluğu (0000h ise bu 64K anlamına gelir)
BP : 0000h
DS : Otomatik data segmenti
ES : Program Segment Prefix
SS:SP : Stack

Bu ay bu kadar virüs muhabbeti yetti sanırım. O tablo senin, bu tablo benim.. ehu.. benim kafam karışmaya başladı yaw..

Gelecek ay bir aksilik olmazsa örnek bir New Exe virüsünün kaynak kodunu inceleyerek virüs mevzuuna devam edeceğiz. Siz bu yazıyı okurken ben finaller sebebiyle soğuk terler döküyor olacağım. Sonrasında da staj var. Bakalım...

Hazırlayan : DarkApocalypse
e-mail: darkapocalypse@trscene.org


Assembly & Win32

    Turbo Assembler 5.0 elimde uzun süredir bulunmasına karşın, paketteki bir sorundan ötürü TASM32.EXE açılmıyordu. Dolayısıyla da Win32 için herhangi bir çalışma yapabilmem mümkün değildi. Geçenlerde tuttum TASM 5'i bir kez daha download ettim. Paketi sorunsuz kurunca tek eksik olan TASM32.EXE de tamamlanmış oldu. Böylece Win32 için kod yazma olayına başladım. Yani, yazdığım bu konuda ben pek deneyimli sayılmam. Win32 için program yazmak isteyen arkadaşlar için en azından bir başlangıç olsun diye bişeyler yazıyorum işte. Yaw Türkiye'de assembly ile win32 kodu yazan biri varmı ?

Gerekli olanlar;

1- Assembly ile Win32 kodu yazma isteği
2- Bir adet Windows 9x ile çalışan bilgisayar
3- Turbo Assembler 5.0 (TASM32.EXE, TLINK.EXE ve Win32 libraryleri yeterli)
4- Bir adet text editörü (Windowsun not defteri bile olabilir)
5- Win32 Programmers' Reference

   Yukarıdaki 5 şey sizde varsa olaya başlayabiliriz. Örnek olsun diye 'marabaa televole' şeklinde bir mesaj kutusu çıkaran bir program yazalım.

   Programı yazarken windows apilerini kullanmamız gerekecek. Geçen sayılardan birinde Melikşah'ın da belirttiği gibi API dediğimiz olay eskiden DOS'ta kullandığımız interrupt servislerine benzer bir olay. API konusunda geniş bilgiyi Win32 Programmers' Ref. de bulabilirsiniz.

   Not: API konusunda bazı APIlerin sonunda ...A harfini görürsünüz. Bu 'A' harfi o APInin 32 bitlik olduğunu gösterir. Mesela MessageBox 16 bitlik iken MessageBoxA 32 bitliktir.

   Amacımız ekrana bir mesaj kutusu çıkarmak olduğuna göre MessageBoxA APIsini kullanmamiz gerekecek (Win32.hlp dosyasında MessageBoxA ile ilgili bilgiyi bulabilirsiniz). Konuyu bulduysanız karşınızda aşağıdaki gibi bir şey göreceksiniz.

int MessageBox(

HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);

Burada hWnd mesaj kutusunu görüntüleyen pencerenin handle numarası, LpText mesaj kutusunda görünecek olan yazının adresini, LpCaption mesaj kutusunun başlık çubuğuna yazılacak yazıyı (caption) ve uType ise mesaj kutusu tipini gösterir (Butonlar + Question, information vs..)

Eğer ortalıkta daha pencere falan yokken bir mesaj kutusu görüntülenecekse haliyle hWnd=0 olacaktır. uType olayında ise mesaj kutusuna konulacak düğmeleri ve mesaj kutusunun iconunu ifade eden bir sayı bulunacaktır. (Ayrıntılı bilgi windows derleyicileri helpinde..)

MessageBox ile ilgili bilmemiz gerekenler bunlar. Şimdi kodlamaya başlayabiliriz.

;MESAJ.ASM
.386P
Locals
Jumps
.Model Flat ,StdCall

Yukarıdaki kısım derleyiciye yönelik olan parçalardır

extrn ExitProcess : Proc
extrn MessageBoxA : Proc

Yukarıda external olarak kullanacağımız API'leri tanımladık.

.Data
baslik db "ho hoyt !",0
yazi db "Marabaa televole",0

Kod özelliği taşımayan bilgileri .Data ile ifade edilen alana yazıyoruz. Burada text yazıların sonunu #0 karakteri belirtir

.Code
Main:
push 0 ;
uType değeri stackte (Sadece Tamam düğmesi gösterilecek)
push offset Baslik ;
Başlık adresi stackte
push offset Yazi ;
Yazi adresi stackte
push 0 ;
Pencere yok, o yüzden hWnd değeri olarak 0 değerini stacke koyduk
call MessageBoxA ;
Mesaj kutusu gösterildi

CALL ExitProcess ;Programın sonu.. (Kernel32.ExitProcess)
End Main ;
Burada da program bitti.

Bu programı aşağıdaki şekilde derleyebilirsiniz.

TASM32.EXE mesaj.asm /mx /m3 /z /q
TLINK32 -x /Tpe /ap /c mesaj,mesaj,, import32.lib

Bu yazı bitti. Hepinize kolay gelsin...

Hazırlayan : DarkApocalypse
e-mail: darkapocalypse@trscene.org


Sistem Programlama #1

Sistem Programlama Nedir ?
            Bana göre sistem programlama, bilgisayarın çalışma sistemine, işletim sistemini es geçerek veya işletim sisteminin olanak tanımadığı noktalarda donanıma direkt olarak müdahale etmek suretiyle belli bir amaca yönelik olarak yapılan programlama olayıdır.

            Anladığım kadarıyla pek çok programcı arkadaş (özellikle KGG grubunun sistem programlama alt grubundakiler) sistem programlama olayının sadece bir OS yazmaktan ibaret olduğunu düşünmekteler. Oysa pek çok demo/introda gördüğümüz Fade In/FadeOut olayları gibi pek çok olay da sistem programlama konusuna girer. Yine Fade olayına baktığımızda olayın VGA registerleri üzerinde döndüğünü görürüz. Dolayısıyla sistem programlamanın temelinde donanıma direkt müdahale vardır.

Sistem Programlama Bize Ne Sağlar ?
            Sistem programlama tekniklerinin kullanılması programlara üstünlük kazandırır. Donanıma direkt olarak erişen program benzerlerine göre çok daha hızlı çalışacaktır. İşletim sisteminin sağlayamadığı kaynaklar kullanılacak dolayısıyla program daha etkin bir duruma gelecektir. Bu iki sebep sistem programlamanın önemini anlatmak açısından yeterlidir. Öte yandan sistem programlama sayesinde programcı donanımı tanıyarak karşılaşabilieceği sorunların giderilmesi bakımından daha kolay çözüm üretecektir.

            Sistem programcılığı için yukarıda da belirttiğim gibi sistemi tanımak gerekir. Bunun yanısıra BIOS ve programın çalışacağı platforma ait Interruptların, sisteme ait portların ve tabiki biraz da olsa assembly dilinin bilinmesi gereklidir. Bunlar, sistem programlama konusunda programcının sıklıkla başvuracağı olaylardır. Internetten tonlarca kaynak bulabilirsiniz. Interruptlar ile ilgili olarak oldukça iyi hazırlamış "Ralph Brown's Interrupt List" adlı dökümanı tavsiye ederim. Arama motorlarını kullanarak daha birsürü kaynak bulabilirsiniz.

            Eğer nedir ne değildir tarzından birşeyler arıyorsanız KGG grubunun sitesinde Sistem programlama bölümüne bakın.(Zaten bu konuda o sitede başka birşey de bulamazsınız :)

Başlıyoruz...

Öncelikle en çok gereksinim duyacağımız alanları şöyle bir tanıyalım. Daha sonra bunları ayrıntılı olarak inceleriz.

1. Interrupt & Interrupt Vektör Tablosu

            Interruptları belleğin herhangi bir yerindeki bir kod parçasına yönlendirme yapan bir kısayol gibi düşünebiliriz. Interruptlar donanım ve yazılım interruptı olarak 2 tiptir. Donanım interruptları, çeşitli donanımı kontrol ederler. Yazılım interruptları ise programcıların kullandıkları interruptlardır. Bir Interrupt çağırıldığında program akışı kesilir ve interrupt adresinin gösterdiği yerdeki kod bir IRET komutuyla karşılaşana dek çalıştırılır. Bu esnada interruptı çağıran program kesintiye uğrar. Program akışı interruptın sonuçlanmasından sonra devam eder.

Interrupt Vektör Tablosu, her interruptın gösterdiği kod parçalarının adreslerini saklayan bir tablodur. Belleğin 0000:0000 adresinden başlar ve toplam (256 adet olan interruptların segment+offsetleri toplamı olan) 1024 byte uzunluğundadır.Buradaki yapı

Int 00h Ofseti Int 00h segmenti Int 01h Ofseti Int 01h Segmenti .... .... Int FFh ofseti Int FFh Segmenti

şeklindedir. Bu tablodan veri okumak ve değişiklik yapmak mümkündür. Bu konuda ayrıntılı bilgiyi daha önceki sayılarda yer alan Virüsler konulu yazılardan bulabilirsiniz.Aşağıdaki şekil olayın anlaşılmasını kolaylaştıracaktır.

            Öte yandan Interrupta yönlendirme istenildiği anda engellenebilir. Bu anda herhangi bir interrupt koduna yönlendirme olmaz. Dolayısıyla program da kesintiye uğramaz.

2. Bellek Yapısı

            Bellek yapısının bilinmesi, sistem programlama açısından önem taşır. Konuyu oldukça basit olarak anlatmaya çalışıcam

En küçük veri taşıma birimi = bit (sadece true/false değeri taşır)
8 bit = 1 byte
16 byte = 1 paragraf
512 byte = 1 sektör (genelde)
1024 byte = 1 KByte
1024 Kbyte = 1 Mbyte
1024 MByte = 1 GByte
1024 GByte = 1 TByte

            Bellek yapısı segment:ofset çiftinden oluşur. Bellek birbiri ardına sıralanan paragraflardan oluşur. Ard arda dizili 256 paragraf 1 segment adını alır. 1 segement içerisinden 65536 bayta diğer bir deyişle 256 paragrafa erişim mümkündür. Bunu bir şekil ile özetlersek;

Segment 0000 Paragraf 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Paragraf 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  .... .....
  Paragraf FE 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Paragraf FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Segment 0001 Paragraf 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Paragraf 01 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  .... ....
  Paragraf FE 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
  Paragraf FF 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
Segment 0002 Paragraf 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

            Ancak dediğim gibi segment:ofset şeklinde erişim mümkündür.Yukarıdaki tabloya dikkat ederseniz 0000:0015 adresindeki verinin aynı zamanda 0001:0005 adresindeki veri olduğunu göreceksiniz.Bu durumda;

            0000:5678 şeklindeki bir adresin 0000 segmenti içerisinde 567.ci paragrafın 8.ci baytı kastedilir. Paragrafı segmente eklersek; 0567:0008 adresini elde ederiz. (Ehuhe karıştı mı ? )

Ok, bu aylık bu kadar yeter. Gelecek ay bu konuya devam ederiz.

Hazırlayan: DarkApocalypse
e-mail: darkapocalypse@trscene.org


Coke Nuke Nedir? Nasıl Yazılır?

Coke nuke'ün ne olduğundan bahsederek yazıma başlıyayım. Coke, Windows Name Servisi veren NT makinaların bir zaafı. WINS veren bir NTye WINS portundan (42) bağlanıp anlamsız bir iki cümle yazarsanız servisi crash ettirmeniz olası. Ayrıca bu işlemle NTnin event logunu da hata mesajlarıyla dolduracağınızdan serverın sistem kaynaklarının azalmasına ve hatta serverin göçmesine sebep olabilirsiniz. 
Bunu teorik olarak sadece telnet kullanarak yapmanız bile olası. Ama ben denemedim. Makinaya 42. porttan bağlanın ve gelişi güzel bir iki harfe ve sonrada entere basın. İşte nukelediniz. Yalnız bir ihtimal  ilk karakterden sonra serverla bağlantınız kesilebilir. Yinede görüldüğü üzere kolay bir nuke. Bu yüzden yazması da çok kolay. Bu nuke'ü teknik bazı olaylardan dolayı delphi'de yazacağız. Türkiye'deki delphicilerin sayısı düşünülecek olursa sanırım bu yazım pirim yapacak gibi gözüküyor ;)
Evet hazırsanız başlayalım: Önce yeni bir application yaratalım. Karşımıza çıkan formun "caption", position, borderstyle vs özelliklerini kafamıza ve zevkimize göre ayarlayalım. İçine bir label, bir editbox bir de button (bitbtn) koyalım. Labelin caption'ını "Hedef:", editbox'ın textini "www.microsoft.com", button'un caption'ını "Coke" olarak değiştirelim. Sonrada boyutlarını ayarlayalım. Evet karşımızda şöyle bir şey olacaktır:

İstiyenler biraz kasıp daha profesyönel görünümlü bir şey de hazırlayabilirler (Ben hafiften kastım!):

Gördüğünüz üzere GUI hazır. Sıra geldi asıl olaya. Nasıl nuke atacağız? Yazının başında söylediğm üzere serverın 42. portuna bağlanmamız gerekiyor. Bu yüzden bize bir "TClientSocket" lazım. Ben delphi 4 kullandığımdan bende "TClientSocket" var. Delphinin önceki sürümlerinde "TSocket" vardı sanırım. Neyse siz elinizin altında ne varsa onu kapıp gelin, sonrada formda herhangi bir yere yerleştirin. Socketimizin portunu 42 olarak değiştirin. Evet şimdi sıra geldi button'a basınca çalışacak code! Düğmenize clickleyin ve karşınıza çıkan code penceresine şunları yazın:

     ClientSocket1.Host := Edit1.Text;     { Burda hedef bilgisayarın adresini sokete söylüyoruz }
     ClientSocket1.Open;                        { Burda ise soketimize bağlan emrini veriyoruz }

Ben bunları anlatıyorum ya, sonradan benden aldıklarınızı ben buldum diye sağa sola satarsanız sizinle görüşürüz! Bu lamerlar'a bir uyarıydı. Siz okumaya devam edin! Socketimizin ayarlarıyla oynamadıysak, soketimizin ClientType özelliği "ctNonBlocking" olmalıdır. Bu ne demek oluyor onuda söyliyeyim. Yani soketimize bir işlem yapmasını söylediğimizde soketimizi o işlemi bitirmesini beklemek zorunda değiliz. Soket işlemleri arka planda yapacak ve bazı eventları çalıştırarak bizimle irtibat kuracaktır. Yazdıkça çenesi açılan biri olarak hemen ilave edeyim, ICQdan tanıdğım "tolkien", bana x bir programla ilgili olarak neden aynı anda 500 bağlantı yapamıyoruz diye soruyor. Sebebi şu: Gördüğünüz üzere profesyönel programlar (bizim program profesyöneldir demek için söylemiyorum :), NonBlocking soketler kullanıyor. Bu da programın her sokete hafıza ayırmasının yanında, bir de thread ayırması demek! Malümunuz windows daha yeni yeni multitaskingi öğreniyor. 500 soketin çalışması, 500 tane küçük çaplı programın arka planda çalışması gibi birşey! Bu da bu yüzden ancak çok iyi konfigürasyonlu makinalarla ya da sağlam işletim sistemleriyle olabilir! Mesela ben win98 ile 100 soket kullanarak bir portscan yaptırırken, windows ara birimi işlem bitene kadar hiç cevap vermiyor. Ama NTde, 300 tane soket, sadece çalıştırılan programın işlem sırasında cevap vermesini engeller. Burda cevap vermekten kastım ekranın veya formun yenilenmesi, mouse eventlarının işlemesi vb şeyler. Burda bilir kişi olarak "NT or Linux" muhabbeti de yapayım. Aynı konfigürasyonlu makinalardan birinde Linux, birin de NT, birinde Win98 olsun. Portscan yaptırın. Linux eğer 400 soketle efektif işlem yapabiliyorsa, NT 200, Win98 50-60 soketle işlem yapar. Hani performans/fiyat olarak Linux iyi diyorlarya işte bu ve benzeri sebeplerden! Neyse bu da coke muhabbetinin içinde linux'a küçük bir övgü oldu.

Evet nerde kaldık? En son sokete bağlan emrini vermiştik. Şimdi de bağlandığında ne yapmasını gerektiğini söyliyelim: Bunun için "ClientSocket1" (veya adı sizde neyse) nesnemizin "OnConnect" event'ına şunları yazalım. Fark ettiğiniz üzere onconnect, bağlanınca demek oluyor.

     ClientSocket1.Socket.SendText( 'MISOSKIAN'+$0D );
     ClientSocket1.Close;

Dikkat edin text "MISOSKIAN" olmalı! Yoksa çalışmaz :o) İlk satırda bağlandığımız makinaya "MISOSKIAN" ve "Enter" yoluuyoruz. İkinci satırda ise işimiz bittiğine göre soketimiz kapatıyoruz. Hadi size kolay gelsin. Bu sefer size code felan yollamıyacam! Oturup yazın! Yazamazsanız bana mail atın. Aslında yazıyı böyle bitirmek vardı ama yarın siz benden programın kodunu yolla felan derseniz ben size nerden kod yollayacam? Bunu düşünerek alın size program kodu:  coke.zip

Gelecek aya kadar kendinize iyi bakın! Bir aksilik olmazsa gelecek sayıda BC++ Builder 3.0 ile yazılmış Land Nuke yazacağız!

Not: Hedefi www.microsoft.com yazdık diye bununla MS'i vuracağınızı sanmayın! Bu nuke ile wins servisi veren NT serverlı ISPleri felan vurabilirsiniz. Size kolay gelsin!

Hazırlayan:
MiSoSkiaN ; misoskian@bigfoot.com ( veya misoskian@trscene.org )


 

LİNUXTA KULLANICI VE GRUP YÖNETİMİ

KULLANICILAR VE SİSTEME LOGİN OLMA

    Bir Linux sistemine her erişim bir kullanıcı hesabı yoluyla olur. Her kullanıcı hesabı da sistem administarator'u tarafından oluşturulup hakları düzenlenmiştir. root olarak adlandırılan bu en güçlü account diğer kullanıcıların hesaplarını düzenlediği için dosya, dizin, kullanıcı ve grup haklarının nasıl ayarlanacağını iyi bilmek gereklidir. Biraz root account'undan bahsedeyim..

    Bir Linux sürümü kurulduktan sonra otomatik olarak bir master login yaratılır ve tahmin edeceğiniz gibi 'root' olarak adlandırılır. Bu kullanıcı hesabı süper kullanıcı olarak adlandırılır çünkü bu kullanıcı hesabının erişemeyeceği hiçbir alan yoktur( tabiki kendi sisteminin içinde ..). Sisteme root olarak girdiğinizde dosya izinlerinden, erişim haklarından ya da yazılıım ayarlarından hiç çekinmenizie gerek yoktur. Çünkü bu hakla bir komutla sistemi çalışamaz hale getirebilecek kadar hakkınız vardır. Bu yüzden kendinize root dan başka bir hesap açıp her zaman bu hesabı kullanmanız ve sadece gerekli olduğu taktirde root hesabını kullanmanız önerilir. Hatta çok kullanıcılı bir sisteme sahipseniz root şifresini düzenli olarak kısa aralıklarla değiştirmeniz de önerilir.

    Önemli bir nokta da bu otomatik olarak yaratılan süperkullanıcı hesabının ismi 'root' olmak zorunda değildir. Teorik olarak bu hesap herhengi bir ismi taşıyabilir, ancak genelde root olarak kullanılır. Süperkullanıcı olmanın sistemde tanımı /etc/passwd dosyasındaki user ID nin 0 (sıfır) olmasında saklıdır. Yani şunu da söyleyeyim user ID sini 0 verdiğiniz bir diğer kullanıcı da superkullanıcının haklarına sahip olacaktır...

KULLANICI HESAPLARI

    Bir sistemin tek kullanıcısı bile olsanız kullanıcı yaratmayı ve haklarını düzenlemeyi bilmelisiniz. Çünkü en azından önerilenleri yerine getirirseniz günlük kullanım için root dan başka bir hesap yaratmanız gerekmektedir. Şayet sisteminize direk olarak ya da modemle erişecek başkaları da varsa o zaman herbiri için bir hesap açmanız gerekecektir. Bu nedenle bu konuya hakim olmanız gerekmektedir.

    Sisteminizi kullanacak herkesin diğerlerinden ayrı bir kullanıcı adı ve şifresi olacaktır. Bazen istisnalar olabilir, yani bir database' e sadece read only erişen programın kullanabileceği guest ya da benzeri bir kullanıcıya ihtiyaç olabilir. Aksi durumda ilk hal geçerlidir. Her kullanıcının kullanıcı isminin farklı olması sistemin güvenliğini arttıracaktır. Mesela siz o anda kimlerin sistemde olduğunu ve ne işler yaptığını izleyebileceksiniz.

    /etc/passwd dosyası kullanıcılar hakkında her bilgiyi içermektedir. Bu dosyanın sahibi root olmalıdır ve group ID olarak da root'un group numarası olan 0 (sıfır) verilmelidir. Biraz ayrıntıya girelim, ve bu dosyanın mantığını anlamaya çalışalım. Bu dosydaki her satır bir kullanıcının bilgisini belirli bir düzende saklar..

username : passwd : user ID : comment : home directory : login command

Bu dizimi anlayabilmek için yeni kurulmuş bir sistemin /etc/passwd dosyasına bir göz atalım:

root::0:0:root:/root:/bin/bash
bin:*:1:1:bin:/bin:
daemon:*:2:2:daemon:/sbin:
adm:*:3:4:adm:/var/adm:
lp:*:4:7:lp:/var/spool/lpd:
sync:*:5:0:sync:/sbin:/bin/sync
shutdown:*:6:0:shutdown:/sbin:/sbin/shutdown
halt:*:7:0:halt:/sbin:/sbin/halt
mail:*:8:12:mail:/var/spool/mail:
news:*:9:13:news:/usr/lib/news:
uucp:*:10:14:uucp:/var/spool/uucppublic:
operator:*:11:0:operator:/root:/bin/bash
games:*:12:100:games:/usr/games:
man:*:13:15:man:/usr/man:
postmaster:*:14:12:postmaster:/var/spool/mail:/bin/bash
nobody:*:-1:100:nobody:/dev/null:
ftp:*:404:1::/home/ftp:/bin/bash

    Bu dosyadaki her satır birbirinden ' : ' ile ayrılmış yedi alandan oluşur. Eğer bu alanların herhangi birine hiçbir bilgi girilmez ise o zaman bu alan boş bırakılır ama yine de ' : ' ile ona ayrılan yeri iptal edilmeden kullanılır. Sırayla bu yedi kolona bakalım:

    username              kullanıcının diğerlerinden farklı olan tanımlayıcı ismi
    password               kullanıcının şifresi (encript edilmiş durumdadır)
    user ID                   kullanıcıyı sisteme tanımlayan ve diğerlerinden farklı olan bir rakam
    group ID              dosya izinleri için kullanıcının grubunu belirler
    comment              genelde kullanıcının gerçek ismi yazılır ama bazen de telefon numarası bölüm  ya da benzeri bilgiler yazılır
    home directory       kullanıcı sisteme girince bulunacaği ve tüm dosyalarını saklayacağı ev dizini
    login command      kullanıcı sisteme girdikten sonra işletilecek komut. genelde bir shell başlatan
komut olmasına rağmen istendiğinde kullanıcının sadece mail programı kullanması istenirse buraya programı işleten komut yazılabilir.

KULLANICI HESABI OLUŞTURMAK

   En genel olarak bir kullanıcı eklemek için gerekli dosyaya bir satırlık bilgi eklemek gerekmektedir. Eğer hangi sistemin hangi dosyada kullanıcı bilgilerini tuttuğunu bilirseniz sadece bu dosyada değişikilik yaparak kullanıcı ekler ya da çıkartabilirsiniz. Normalde kullanıcı eklemek için bazı scripler mevcuttur. Örneğin Slackware Linuxta adduser isimli bir script yaratılacak kullanıcının bilgilerini teker teker alarak bunları uygun şekilde /etc/passwd dosyasına yazar. Redhat gibi diğer sistemlerde de adduser ya da useradd komutları vardır ancak bunları parametreleriyle beraber kullanmadan bir iş yapmazlar. Yani demek istediğim sadece bir satır yazıyı ilgili dosyaya yazarak ve kullanıcıya bir dizin oluşturarak bir kullanıcı yaratabiliriz. Bu sayede en genelini öğrenmiş oluruz. /etc/passwd dosyasına ekleme yapmak için istediğiniz bir editörü kullanabilirsiniz. pico, vi , jed hatta mc kullanarak bile dosyayı değiştirebilirsiniz. Mesela şu satırı ekleyerek sisteme student diye bir kullanıcı ekleyelim :

student::103:50:studnet in school:/home/student:/bin/sh

    Burada dikkat edilmesi gereken kullanıcı isminin diğerlerinden ayrı olması, User ID nin bir öncekini takip etmesi (yine diğerlerinden ayrı olan) , Group ID olarak da 50 (default group) verilmesi (bu şart olmamasına rağmen ileride değişiklik yapılabilir ya da bilinen bir grubun numarası verilebilir), bir kullanıcı ev dizini belirtilmesi ve de sisteme girince kullanacağı shell'in seçilmesi.

    Sanırım şifre kısmının boş olduğunu farketmişsinizdir. Encritp edilmiş bir şifreyi siz yazamayacağınız için burayı boş bırakmalısınız. Yaptığınız değişiklikleri kaydettikten sonra bu yeni hesaba bir şifre verebilirsiniz. Verdiğiniz şifre doğrultusunda encript edilmiş bilgi /etc/passwd dosyasına yazılacaktır. Bunu yapmak için de

# passwd student

yazın ve onaylayarak bir şifre sağlayın. Bundan sonra da studnet kullanıcısının ev dizinini oluşturmanız gerekmektedir. Ardından da bu dizinin sahibini student olarak atamalıyız. Sırasıyla şu komutları işletin:

# mkdir /home/student
#chown student /home/student

    ilk komutla /home/student dizini yaratılır. Ancak root olarak bu yaratıldığı için sahibi de root dur. Bu yüzden bunun sahibini değiştirmek için ikinci satırı kullandık. Yani /home/student dizininin sahibini student olarak değiştir dedik.

    Buraya kadar bir kullanıcı hesabı yaratmayı öğrendik. Şimdi de artık sisteminizde bulunmasını istemediğiniz bir kullanıcının hesabını nasıl sileceğimize bakalım.

BİR KULLANICI HESABINI SİLMEK

    Aynen kullanıcı eklemede olduğu gibi bazı sistemlerde otomatik olarak kullanıcı silen scriptler mevcuttur. Bu scriptler size hangi kullanıcıyı silmek istediğinizi sorarlar ve sizin verdiğiniz yanıta göre bu kullanıcıyı /etc/passwd dosyasından bulup dosyadaki bu satırı silerler.

    Bir kullanıcıyı manuel olarak silmek için aynı şeyi yapmalıyız. /etc/passwd dosyasından ilgili kullanıcının bulunduğu satırı silmeliyiz. Şayet bir kullanıcının hesabını bir sure kaldırmak istiyorsanız sadece /etc/passwd dosyasındaki isminin bulunduğu satırın başına bir diyez karakteri koyabilirsiniz. Bu sayede o kullanıcının sisteme siz izin verene kadar girmesini engellersiniz.

    Eğer sildiğiniz kullanıcının bir daha sisteme eklenme ihtimali yok ise o zaman o kullanıcının dizinlerini de silmelisiniz. Böylece disk tasarrufu yaparsınız. Bir komut ile bu dizini ve altdizinlerini silemek için

# rm -r /home/userdir

    komutunu kullanın. Dikkat edin /home/userdir diye yazılan kullanıcının gerçek dizininin yolu olmalıdır. Yoksa başka dizinleri de silebilirsiniz.

    Daha sonra kullanıcının mail spool dosyasını silin. Genellikle bu dosya /usr/spool/mail/username olarak saklanır. Deminki gibi

# rm /usr/spool/mail/student

komutunu işletirseniz student kullanıcısının mail spool dosyasını silersiniz. Norton Commander kullanmaya alışık olanlar aynı işlemleri mc ile de yapabilirsiniz. Mail temizlemesini bitirmek için kullanıcının /usr/lib/aliases dosyasında bir aliasının olmamasına dikkat edin. Eğer varsa bunu da kaldırın.

GRUPLARI KULLANMAK

    Her Unix sisteminde olduğu gibi her Linux sisteminde de bütün kullanıcılar birer gruba üyedirler. Aynı gruptaki her kullanıcı aynı departmanda çalıştığını varsayın. Bu çalışanların ortak olarak erişmesi gereken datalar ya da aygıtlar olabilir. Mesela baskı bölümünün üyelerinin bulunduğu gruba renkli yazıcıyı kullanma hakkı vermek gibi. Gruplar dosya erişim haklarını ayarlamada kullanıldıkları için bir kullanıcı en az bir gruba üye olmalıdır.

    Genelde küçük sistemler bir tane default gruba sahiptirler. Çünkü bu sistem yönetimini oldukça basitleştirir. Bu durumda her kullanıcının bir aygıta ya da dosyaya erişimi o aygıtların ya da dosyaların kendi erişim haklarına göre sağlanır.

    Grup bilgisi /etc/group dosyasında saklanmaktadır. Bu dosya da aynı /etc/passwd dosyasında olduğu gibi bir dizime sahiptir. Örneğin yeni kurulmuş bir Linux sisteminin defauld /etc/group dosyası aşağıdakine çok benzerdir.

root::0:root
bin::1:root,bin,daemon
daemon::2:root,bin,daemon
sys::3:root,bin,adm
adm::4:root,adm,daemon
tty::5:
disk::6:root,adm
lp::7:lp
mem::8:
kmem::9:
wheel::10:root
floppy::11:root
mail::12:mail
news::13:news
uucp::14:uucp
man::15:man
users::100:games
nogroup::-1:

Burada da her satır birbirinden : ile ayrılmış dört alandan oluşmuştur ve formatı da şöyledir :

group name : group passwd : group ID : users

    Bu dosya içinde her grubun kendine ait bir satırı vardır. Her Linux sisteminin işletim sistemine ait olan birkaç tane grubu vardır. Bu gruplar bin, mail, uucp, sys, ....gibidir. Biraz da sistem gruplarını inceleyelim.

root/wheel/system grubu bir kullanıcının su komutuyla root erişimine izin vermek içindir.
deamon grubu spooling dizinlerinin(mail, printer gibi) sahipliklerini sağlar.
kmem grubu programların kernel hafızasına direct erişim içindir.
sys grubu bazı sistem dosyalarını sahiplenmek içindir. Bazı sistemlerde kmem gibi davranır.
tty grubu terminallerle alakalı bütün özel dosyaların sahipliği içindir.

GRUP EKLEMEK

    Bir grup eklemek için /etc/group dosyasında değişiklikler yapmanız gereklidir. Herhangi bir ASCII editör kullanarak bunu halledebilirsiniz. Ya da groupadd gibi önceden yazılmış scriptleri kullanabilirsiniz. Sonuçta yapılan iş aynıdır. Tabiki her versiyonda bu otomatiklik scriptleri mevcut değildir. Bu yüzden tam olarak yapılması gerekeni öğrenmek en iyisidir. Yeni gruplar eklemeden önce eski dosyanın bir yedeğini almanızı tavsiye ederim. Aksilik halinde geri dönebilmek için faydalı olacaktır. Mesela iki yeni grup eklemek için aşağıdaki satırları /etc/groups dosyasına ekleyin

hesap::51:student
printer::52:teacher

bunları yazıp değişiklikleri kaydettikten sonra gruplar eklenmiş olacaktır. Bir kullanıcının birden fazla gruba üye olabilmesi için kullanıcı ismini ilgili gubun yanına aralarına virgül koyarak yazabiliriz.

hesap::51:student , teacher
printer::52:teacher

    Burada student ve tezcher aynı grubun üyeleridir. Burada aynı gruba ait kullanıcıların sınırı yoktur. Dilediğiniz kadar kullanıcıyı bir gruba dahil edebilirsiniz.

    Kullanıcı aynı anda sadece bir gruba dahil olabilir. Şayet kullanıcı bir başka gruba da üye ise o gruba dahil olmak için komut satırında

# newgrp

komutunu kullanarak üye olduğu gruplardan bir diğerine girebilir.

GRUP SİLMEK

    Eğer bir grubun artık ortadan kalkmasını istiyorsanız o zaman grubun bulunduğu satırı /etc/group dosyasından kaldırmanız yeterli olacaktır. Bunu silmeden önce /etc/passwd dosyasını kontrol edin ve bu grubun mensubları olan kullanıcıların başlangıç grubu olarak bu silinen grup olmamasına özen gösterin. Eğer bunu yapmayı unutursanız ve bir kullanıcının sisteme girdiğinde dahil olması gereken grup ortada yoksa bu kullanıcı sisteme giremeyecektir. Aynı şekilde bütün dosya ve dizinleri kontrol edip bunların silinen grubun sahipliğinde olup olmadığına bakmalısınız. Eğer varsa bunları başka grupla değiştirmelisiniz.

su KOMUTUNU KULLANMAK

    Bazen normal kullanıcı hesabınızı kullanırken root olarak yapabileceğiniz işler vardır. İşte bu zaman su komutuyla çabucak root hakkına ulaşabilirsiniz. Bunu kullanmak yerine ya yeni bir terminalden tekrar login olup root olarak sisteme girmelisiniz ve işiniz bitince bu terminalden logout olup tekrar eski terminalinize dönmelisiniz. İşte bu işi sadece su komutuyla halledebilirsiniz.

    Bir başka kullanıcının hesabını kullanmak isterseniz yine su komutuyla

# su student

yazabilirsiniz. Eğer sadece su yazarsanız o zaman root olmak istediğinizi sanıp sizden root şifresini ister.

 

Predator  a_kucuk@yahoo.com


SERVER OLARAK LINUX

    Geçtiğimiz ay bana gelen eleştirilerinizde iki nokta ön plana çıkıyordu. Birincisi konu bütünlüğünün sağlanması, diğeri ise linux işletim sisteminin uygulama alanlarına yönelik çalışmalardı. Eleştirilerinizi gerek listemize gerekse bana email yoluyla ulaştırabilirsiniz. Arkadaşlarımla birlikte elimizden geleni yaptık, ve bu ay bir linux sunucu kurulumu anlattık, anlayacağınız baştan aşağı bir linux sunucu kurduk. Bunu yaparken zaman darlığı nedeniyle olayların özüne inebildiğimiz söylenemez, ancak gelecek yazilarda bir sunucunun bileşenlerini teker teker ayrıntılarıyla işleyeceğiz.

    Bildiğiniz gibi linux, sunucu olarak grubundaki diğer işletim sistemlerine nazaran daha çok tercih ediliyor. Bunun altında yatan sebepler belki yüzlerce kez açıklanmıştır. Test sonuçlarına göre (M$oftun yaptırdıkları değil) linuxun en az unix kadar başarılı, Windows'lardan ise üstün olduğu açıktır. Nt'nin kurulmasının basit olduğunu düşünenler umut ederim ki bu yazıyı okuduktan sonra linux hakkındaki önyargılarını atacaklardır. Pek çoğunuzun linux kurulumu hakkında yeterince doküman okuduğunuzu varsayıyorum ve bu nedenle bazı basit noktaları geçeceğim. Tesadüfün bu kadarı, ben bu yazı için karar verdiğim sırada Turkuaz 1.2.2 çıktı, anlayacağınız üzere sizlerle birlikte Turkuaz 1.2.2 kuracağız. Diğer linux dağıtımları için de anlatılanlar geçerlidir (ufak değişiklikler muhtemeldir) Yazıya başlamadan amacımızı ve sunucu bilgisayarın donanımını ve istemcileri inceleyelim.

    Amacımız lokal ağımız için bir linux sunucu kurmak, bu sunucu üzerinden lokal ağımızı Internet'e çıkarmak, ve ileride sizin istekleriniz doğrultusunda ağımız ile eğlenmek ;^). Sunucumuz NT sunucuların aksine donanımsal olarak daha ucuza mal oluyor, ama ne kadar para verirseniz o kadar hız alırsınız. Bizim bilgisayarımız (sunucu adayı) şu özelliklerde: P166MMX, 64MB SDRam, 6.4 GB +3.2 GB WDIgital HDD, 24xCDRom, 2MB S3 Virge DX/GX ekran kartı, 10 MB NE34 Ethernet kart1, 33600 Rockwell madem, Q-TR klevye ve 3 tuşlu bir mouse ;-) Linux kurulumu için disk bölümlendirmenin nasıl yapılacağına ilişkin bir hayli döküman mevcut. Bu konuda hatırlatmak istediğim bir şey olacak, diskinizi bölümlendirirken çalıştıracağınız servisleri düşünün, ihtiyacınız olan swap alanını iyi hesaplayın, swap alanının yetmemesi sunucunuzu yavaşlatır hala hizmet veremez duruma getirebilir. Hatta başka bir sabit diskte ikinci bir swap alanınız olsun ;) web servisi, ftp servisi, posta sunucusu, veya benzeri diski yoğun kullanan servisler verecekseniz gerek performansı arttırmak için gerekse diskinizin ömrünü uzatmak için ayrı disklere veya en azından ayrı disk bölümlerini bu servisler için bağlamalısınız. Vereceğiniz servisin kapasitesini ve sistem performansını göz önüne alarak bu bölümlerin büyüklüğünü ayarlamanız oldukça önemlidir. İstemci olarak lokal ağımızda NT alanındaki bilgisayarları kullanıcağız. İstemci olarak ağımızda bir tane öncül alan kontrolcüsü (NT40), NT iş istasyonları, windows 9? makineler kullanıldı. (biri windows ağlarının güvenliğini yazmazsa dergideki son yazım bu konu üstüne olacak ;-) İstemci olarak ille de bu sistemleri kullanmak zorunda değilsiniz, kullanacağımız istemci TCP-IP desteği olan herhangi bir işletim sistemine sahip olabilir.

    İsterseniz linux sistemlerinin ve İnternet'in temelini oluşturan 'TCP-IP' protokolünü kısaca anlatalım (Bu konu bir iki ayda zor işlenir ;)

    Bizim ilgilendiğimzi nokta olan yerel alan ağı içinde iletişimi fiziksel olarak sağlamak için bir kaç seçenek mevcut, bunlardan en çok kullanılanları BUS; RING VE HUB ağlar olarak adlandırabiliriz. Lokal ağımız internete bağlı değilse (=özel ağ) bu ağlarda kullanılmak üzere ayrılmış ip adres bloklarından birini kullanmalıyız. RFC 1918 (request for comments) de belirtilen standartlar doğrultusunda bu bloklar şunlardır:

Ağ adresi Ağ maskesi
10.0.0.0 10.255.255.255
172.16.0.0 172.16.255.255
192.168.0.0 192.168.255.255

Ben c class ip numaraları kullanacağım. buna göre ağ ayarlarımız aşağıdaki gibi olsun:

Makina Adı Alan Adı IP Adresi Ağ Maskesi Yönlendirici Amacı OS
uebermensch federal.net.tr 192.168.1.1 255.255.255.0 192.168.1.254 ağ sunucusu Turkuaz 1.2.2
jini federal.net.tr 192.168.1.10 255.255.255.0 192.168.1.254 PDC NT Server 4.0
masa1 federal.net.tr 192.168.1.11 255.255.255.0 192.168.1.254 Ağ İstemcisi windows98
masa2 federal.net.tr 192.168.1.12 255.255.255.0 192.168.1.254 Ağ İstemcisi NT WS
masa2 federal.net.tr 192.168.1.12 255.255.255.0 192.168.1.254 Ağ İstemcisi windows95
... ... ... ... ... ... ...
masa9 federal.net.tr 192.168.1.10 255.255.255.0 192.168.1.254 Ağ İstemcisi YA(TCP-IP)COS

    Böylece mini bir networkümüz olacak. Buradaki isimler ve ip numaraları tamamen keyfinize kalmış. Turkuazı herzaman olduğu gibi ftp'den kuruyorum :) çeşitli ayarları yapıyorum Ekran kartı, mouse, ethernet, ağ, klevye, dil vs.. Tüm makinalar için Primary domain server olarak uebermensch makinasının (dns server) ip sini veriyorum. Bu bilgileri ağ yöneticinize danışıp yapmanız daha uygun olur. Daha fazla bilgi için dağıtımınızın kullanım klavuzuna başvurun. TEK,MAN,HOWTO hatta RFC okuyun :) Aşağıya kullanacağımı sandığım birtakım yabancı kısaltmalar ve karşıladığı protokolleri ekledim.

KISA ADI TEMSİL ETTİĞİ PROTOKOL
TCP Transmission Control Protocol
UDP User Datagram Protocol
IP Internet Protocol
ICMP Internet Control Message Protocol
RIP Routing Information Protocol
ARP Address Resolution Protocol
RARP Reverse Address Resolution Protocol
DNS Domain Name System
BOOTP Boot Protocol
NFS Network File System
NFS Network Information System
PING Packet Internet Groper
RPC Remote Procedure Call
SNMP Simple Network Management Protocol

>> ILERLEMEK ICIN BURAYI TIKLAYINIZ <<

 

         


KURULUM SONRASI AYARLAR

    Kurulum sonrası yapılması gereken en önemli şey belkide çekirdeğin isteklere cevap verecek şekilde derlenmesidir. Bu yazı hazırlandığı sırada en guncel çekirdek 2.2.10 sürümüydü, bu güvenli bir seçim olacaktır. Çekirdek derlemeyi biliyorsunuz zaten, make dep, clean, modules, modules_install, bzlilo (belki de bir yama ile işinizi halledersiniz, kimdilir?) evet burdaki problem hangi seçeneklerle kernel derleyeceğimizdir. Seçim sırasında yardım almayı unutmuyoruz değil mi?Kerneli fazla şişirmemenizi çin module kullanmalısınız. Boylece sadece sistemin ihtiyacı olduğunda devreye girecek ve kalan zaman yuklenmemiş halde duracak ve performansta bir artış olacaktır. Modul derlerseniz make moduels ve modules install yapmayı unutmayın. Sonra insmod için bazı paremetreler girmek zorunda kalabilirsiniz(bkz. /etc/conf.modules) bu modulleri otomatik olarak yükletebilirsiniz. bkz. kernel module loader ;) Modullerinizi merak ediyorsanız /lib/modules/[kernel sürümü]/ altında sizleri bekliyor olacaklar. Bizim ihtiyaçlarımız doğrultusunda olmassa olmazlar şunlar:


Prompt for development and/or incomplete code/drivers (CONFIG_EXPERIMENTAL) [Y/n/?]YES: Bu seçenek henuz tamamlanmamış veya geliştirilme aşamasındaki kodların seçilebilmesine olanak tanıyor. Bizim kullanacağımız seçenekler için olumlu yanıt şart.

Enable loadable module support (CONFIG_MODULES) [Y/n/?]YES: Bu seçenek kullanacağımız modullerin yüklenebilmesini sağlıyor. Seçmelisiniz.

Networking support (CONFIG_NET) [Y/n/?]YES:Sizce? :)

Packet socket (CONFIG_PACKET) [Y/m/n/?]YES: Hayati önem taşımamakta, ancak ilerki aylardaki uygularımız için gerekli olacak.

Kernel/User netlink socket (CONFIG_NETLINK) [Y/n/?] YES: Olur da ileride firewall yazarsak, kullanacağız, seçelim...

Routing messages (CONFIG_RTNETLINK) [Y/n/?]NO: İşimiz yok böyle şeylerle... :)

Network firewalls (CONFIG_FIREWALL) [Y/n/?]YES: Yazımızın temeli, kabul etmesek mi??

TCP/IP networking (CONFIG_INET) [Y/n/?] YES: TCP-IP ile işimiz var mıydı acaba?? :)

IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [Y/n/?]NO: komplex şeylerle şu an uğraşamayız, baksanıza advanced diyor..

IP: verbose route monitoring (CONFIG_IP_ROUTE_VERBOSE) [Y/n/?]YES: Bir sistem yöneticisi için "verbose" mod herşey demektir!

IP: firewalling (CONFIG_IP_FIREWALL) [Y/n/?]YES: olamzsa olmazlardan bir tane daha

IP: firewall packet netlink device (CONFIG_IP_FIREWALL_NETLINK) [Y/n/?]YES: yazacağımız Firewall için bir kaynak daha ;)

IP: always defragment (required for masquerading) (CONFIG_IP_ALWAYS_DEFRAG) [Y/n/?] YES: Amman es geçmeyin bu olamdan olmuyor;)

IP: masquerading (CONFIG_IP_MASQUERADE) [Y/n/?]YES: Evet

IP: ICMP masquerading (CONFIG_IP_MASQUERADE_ICMP) [Y/n/?]YES:EVET

IP: masquerading special modules support (CONFIG_IP_MASQUERADE_MOD) [Y/n/?]YES: EVET :)

IP: ipautofw masq support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_IPAUTOFW) [N/y/m/?]NO: Kulağa hoş gelsede, eger makinanın bişey yapmasını isteseydim windows kurardım :))

IP: ipportfw masq support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_IPPORTFW) [Y/m/n/?]YES: Evet

IP: ip fwmark masq-forwarding support (EXPERIMENTAL) (CONFIG_IP_MASQUERADE_MFW) [Y/m/n/?]NO: Gereksiz bana kalırsa ama deneyebilrisiniz.

IP: optimize as router not host (CONFIG_IP_ROUTER) [Y/n/?]YES: Belirgin bir performans artışı sağlıyor, size tavsiye ederim ama istemcilerde çalışanlar benden değerli değil :) diyorsanız...

IP: GRE tunnels over IP (CONFIG_NET_IPGRE) [N/y/m/?]NO:Hayır bu bambaşka bir şey ..

IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [Y/n/?]YES: eski kerneller bu kod eklenmediği zaman makinanın başına baya bi bela oluyordu. EKLEYİN

IP: Drop source routed frames (CONFIG_IP_NOSR) [Y/n/?]YES: Güvenlik açısından eklemeniz gereken başka bir kod, EKLEYİN

Network device support (CONFIG_NETDEVICES) [Y/n/?]YES: Elbette ki evet

Dummy net driver support (CONFIG_DUMMY) [M/n/y/?] YES: Buna gerek olmasada ekledim, sizde ekleyin bişi olmaz ;)

/proc filesystem support (CONFIG_PROC_FS) [Y/n/?]YES: Hiç /proc klasörüne bakmışmıydınız?? pppdialup bağlantı kuracağız...

    Neyse kernel derlemek uzun sürüyor demiştim, bu arada işimizin çabuklaştırmak için webmin kuruyoruz (yeni sürümü çıkmış bilgilerinize) makineniz yavaş değilse artık kernel işi bitmiştir. reboot ediyoruz.Herşey yolundaysa bilgisayarınız açılıyor :) startx ile X ortamına geçiyoruz. ~ev klasörünüzdeki .Xclients dosyasında aşağıdaki değişiklikle kde yi çalıştırabilirsiniz. "exec startkde" diğerini silmeyi unutmayın :) evet artık kurulum bitti, 30 dakika olmuş bile hemen webmini çalıştıralım ve ayarlarımıza devam edelim (kim demiş linux zor ayarlanıyor diye).

>> ILERLEMEK ICIN BURAYI TIKLAYINIZ <<

DOMAIN NAME SERVER KURULUMU

    İlk olarak domain name server kurmak istiyorum. (korkmayın özel ağdayız, gerçekte bu gerekli değil ama bilgi olsun. /etc/hosts dosyasıyla da halledilebilir) Webmindeki 'bind8' bölümüne giriyoruz ve create new master zone diyoruz. Şekil için tıklayınızBurada bir tane 'reverse' bir tane de 'forward' zone yaratıyoruz. 'reverse zone' için 192.168.1 'forward zone' için 'federal.net.tr' değerlerini kullanıyorumŞekil için tıklayınız, tabi sizin ağ ayarlarınız böyle olmayacaktır herhalde ;) makinelerimizi kayıt etmeye sıra geldi. Yarattığımız forward zone da address kısmına geçiyoruz.Şekil için tıklayınız Burada 'update reverse' seçeneğinin aktif olması iyi olur aksi takdirde reverse kaydını da ayrıcana yapmanız gerekecektir.Şekil için tıklayınız Neyse sırayla makinelerimizin isimlerini yazıyoruz... kolay değil mi Billy? :) sonra Takma adlarımızı tanımlayalım bunlar berkley diyarlarında CName(alias) olarak bilinirler.Şekil için tıklayınız Ben şöyle bir tanımlama getirdim


www -->www.federal.net.tr>>>uebermensch.federal.net.tr
ftp -->ftp.federal.net.tr>>>uebermensch.federal.net.tr
ftp2--> ftp2.federal.net.tr>>>jini.federal.net.tr
proxy -->proxy.federal.net.tr>>>uebermensch.federal.net.tr

    Madem yazdık squid de ayarlayalım :) Bunları yaparken name yerine www, ftp vs.. alias to yerine de makinenin full domain ismini yazıyoruz. Hazır gelmişken bir de postacı ayarlıyalım, bunlar MX mail exchanger olarak ünlenmişlerdir.Şekil için tıklayınız bir name yazıyoruz birde makine ismi oluyor size pop.federal.net.tr uebermensch.federal.net.tr hayati ayarlar bu kadar geri kalanını bir dahaki aya bırakalım, DNS hakkında ne biliyorsam yazacağım... şimdi bir test yapalım. önce server ı update edelim ve yeniden başlatalım (makineyi değil, bind8 menusunden yapıyoruz.:) konsola geçelim ve bakalım olmuş mu?


[root@uebermensch /root]# nslookup
Default Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

> uebermensch
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
Name:    uebermensch.federal.net.tr
Address:  192.168.1.1

> jini
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
Name:    jini.federal.net.tr
Address:  192.168.1.10

> set querytype=PTR
> 192.168.1.1
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

1.1.168.192.in-addr.arpa        name = uebermensch.federal.net.tr
1.168.192.in-addr.arpa  nameserver = uebermensch.federal.net.tr
uebermensch.federal.net.tr      internet address = 192.168.1.1
> 192.168.1.10
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

10.1.168.192.in-addr.arpa       name = jini.federal.net.tr
1.168.192.in-addr.arpa  nameserver = uebermensch.federal.net.tr
uebermensch.federal.net.tr      internet address = 192.168.1.1
> set querytype=CName
> www
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
www.federal.net.tr      canonical name = uebermensch.federal.net.tr.federal.net.tr
> ftp
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
ftp.federal.net.tr      canonical name = uebermensch.federal.net.tr.federal.net.tr
> ftp2
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
ftp2.federal.net.tr     canonical name = jini.federal.net.tr.federal.net.tr
> set querytype=MX
> pop
Server:  uebermensch.federal.net.tr
Address:  192.168.1.1

Non-authoritative answer:
pop.federal.net.tr      preference = 1, mail exchanger = uebermensch.federal.net.tr.federal.net.tr
> exit
[root@uebermensch /root]#

    Herşey yolunda ;) burada ilk satırdali Default Server: uebermensch.federal.net.tr Address: 192.168.1.1 yazı çıkmamışsa ve olay buradan ileri gidemiyorsa /etc/resolv.conf dosyanıza bakın ve aşağıdaki örnektek gibi düzenleyin... ilk server default olandır. #/etc/resolv.conf
search federal.net.tr
server 192.168.1.1
nslookup dersi bukadar, "Non-authoritative answer" cevabı canınızı sıkmasın,çok önemli değil ...DNS konusunu gelecek ay geniş bir şekilde işleyince daha bi açıklık gelecek, bir sonraki ayı bekleyin derim.

    User ve kota ayarlarını da yaptıktan sonra biraz istemciler üzeridne çalışalım. istemcilerin isimlerini az önce ayarladığımız dns server a göre verelim, ve default gateaway olarak sunucumuzun adını verelim. Henuz frewall ayarlamadığımız için host dosyaları bir güvenlik artışı yapalım. /etc/host.deny dosyasına 'ALL:ALL' yazalım böylee tüm bilgisayarların sisteme giriş izinleri kaldırılmış oldu. /etc/host.allow dosyasınada sisteme girebilecek bilgisayarların hangi protokollerden girişe izin verdiğimizi belirtelim. Primary domain controller olan makinede de ben çalışıyorum o zaman 'ALL:192.168.1.10' yazabilirim. diğerleri içinse 'in.ftpd:192.168.1.' gibi ayarlar mümkün. diğer host dosyaları ise yazıcı ve güvenilir makineler için ayarları içeriyor, bu yazının kapsamı dışında. Şimdi sunucudan veya lokal ağınızdan, lokal ağınızdaki herhangi bir bilgisayarı gerek ip si ile gerek se ismi ile pingleyebilmelisiniz. sonra izin verdiğiniz protokolleri test edin. Şu durumda ağ sunucumuz eksikleri ile birlikte çalışmaya başlamış demektir.

>> ILERLEMEK ICIN BURAYI TIKLAYINIZ <<

 

 SAMBA KURULUMU VE SQUID AYARLARI

      Gelin, ağımızdaki windows istemcilerle veya serverlar ila dosya paylaşımı yapalım. Bunun için bildiğiniz gibi samba server kullanıyoruz, bunun ayarlarına bir göz atalım, webminden samba bölümüne geliyoruz. Resim için tıklayınızBurada karşınızda home ve print share i karşınıza çıkmış olabilir çıkmamışta olabilir ;) neyse 'home share' adından da anlaşılacağı gibi kullanıcıların ev dizinini paylaşıma açar, çok kötü ayarlanmadığı takdirde sadece o kullanıcıya izin verir :) biz önce global ve passwords bolumlerindeki ayarlara bakalım... Resim için tıklayınız Password bolumunda linux sunucumuzdaki istediğimiz kullanıcılar için samba userı ayarlıyacağız (convert) ve bir sonraki sefere bunları otomatikleştirebiliriz. (Configure automatic..) sonra bi kerede edit edelim ki emin olalım ne var ne yok. işin temelinde windowstaki kullanıcının burada da aynı olması gerekiyor, tabi nt kullanmıyorsanız (home share bu olaydan bağımsız özel bir paylaşımdır). geçmişte samba için windows makinelerde plain text ayarı yapmak gerekiyordu, artık gerekmiyor. global ayarlardan windows networking bolumune bir uğrayalım. nrada workgroup u dogru verelim yoksa network komşularında goremezsiniz (tabi gerçekte öntenımlı olarak belirtilen domainde paylaşılmış görünür,Resim için tıklayınız eğer windowsunuzun domaini veya workgroup u buysa problem yok ;) authentication da password doğrulaması için çeşitli seçenekler mevcut bunlarda user mapping işimize yarayabilir. yani windowsta başka linuzde başka username e sahip bir kişi olabalir. mesela administrator --> root . paronayak değilseniz miscellaneous kısmında fazla takılmassınız, guvenlik diyerekten buradaki log opsiyonunu açmayı unutmayalım, olur mu? şimdi gelin yeni bir paylaşım yaratalım, bende mnt dizinimi PDC makinesi için paylaştıracağım, siz de deneyebilirsiniz. "create a new file share" ne diyorsa onu yapıyoruz. Resim için tıklayınız sonra formaliteler: paylaşım ismi, paylaştırılacak klasör vs. sonra bakmışızki paylaşım ismiyle yarattığımız yukarıda beliri vermiş, hemen onu tıklıyarak özelliklerine bakıyoruz. cdrom için misc. bolümünün pek bi yararı olmayacaktır. ama öğrenmek bakımından inceleyebilirsiniz. bu paylaşıma bağlanacak max. kullanıcı, yazıştan sonra senkronizasyon, dosya kilidi vs.. buradan ayarlanıyor. dosyaların gorunumleri ve isimleri de goreceğiniz gibi file naming bolumunda (ben lower case kullanıyorum). dosya izinleri ve sahipleri de file permissions tan ayarlanabilir. gelelim en onemli yere "security" burada en hayati nokta bana kalırsa izin verilen makineler, "host to allow" bu şekilde yapılan güvenliğin en iyi olduğunu düşünüyorum, bu yüzden bu kaynağa ulaşmasını istediğim bilgisayarın ipsini buraya yazıyorum. sonra diğerlerine dokunmaya gerek duymuyorum (bu sadece benim düşüncem ve sadece bu tip bir paylaşım için doğrudur.)Resim için tıklayınız siz buna gerek duyabilirsiniz. kullanıcılar geçerliliğini buradan ayarlayabilirsiniz. kaynağı kullanabilecek durumda olanlar ve olmayanlar ister tek tek ister gruplarıyla birlikte ayarlanabilir. evet bu kadar basit, billy amca sıradaki lütfen... bu arada siz windowsunuzda bir cdromunuza bakın ;)
       Ağımızı internete çıkaracağımızı söylemiştik, bir parça hız kazanmak için proxy kurmalı derim, ve hemen squid bölümüne geçiyoruz... ne şans squid çalışır durumda biraz işleri kolaylaştırayım diyorum aizinlerini değiştireyim,Resim için tıklayınız siz buna gerek duymayabilirsiniz. web proxy ön tanımlı olarak 3128. portta çalışıyor olacak. çoğu yerde default ayarlar yeterli, bunların incelikleri bu yazı kapsamı dışındadır. bi ara anlatırız. tabi ilk goze çarpan yer access control oldu :) burayı biraz inceledim ve biraz değiştireyim dedim. ACL(access control list) te benim localağım yoktu. onun için yeni bir tane yarattım. lokal ağ adresini ve maskesini yazdım bri de isim koydum. localhosts . karıştırmayın localhost değil :) neyse bunun kurallarını vermek gerekir bir de. proxy restrictionslardan bir kaçını sildim, gördüğünüz üzere şekildeki gibi bir yapı oluştu. mantık beğenmediklerinizi deny etmek, işinize yarayacakları allow etmek bunları yaparken sırası ve move a da dikkat etmektir. şimdilik iyi gözüküyor. sizinde okudugunuz uzere default ayarlardan hic bahsetmedim digerlerine gerek duymadım. ama sonraki yazımda guzel şeyler ayarliyacağız. proxyler hepimiz için önemlidir :) proxyleri sevelim onları koruyalım.

>> ILERLEMEK ICIN BURAYI TIKLAYINIZ <<

2.2.* kernel ve Ip-Masquerade

     İstemciler bu durumda proxy üzerinden web gezintisi yapabilir, peki eğer ftp yapmaya ihtiyacımız olursa ne olacak? Bunun için proxy üzerinden ayarlar yapılabilir ama bu sefer size ipchains anlatacam. Peki neden Masquerade değil de Ipchains? Bunun iki nedeni var. Birincisi Ip-Masquerade geçen ay bir dergisinde yayınlandı, ve eski kerneller için olan ipfwdm komutuyla iş görüyor(eski ama stable!!) Gerçi arasında pek bi far yok ama ufak komut değişiklikleri var. Yuklediğimiz modulelri açılış sırasında çalıştırmayabiliriz. Önce ppp ayarlarına bakalım. Ben kpp ile anlatayım, tabi bir net cafeniz varsa ppp-scriptlerini önereceğim :) Önce Kpp ye çevirmeli ağ hesabı ekleyelim, Resim için tıklayınız Ip adresini sunucudan almasını soyluyoruz, dns numarası için iss'mizin dns sunusunun ip'sini, veya herhangi bir dns sunucunun ip'sini yazıyoruz. bağlanınca çalışacak program ksımına da az sonra yaratacağımız scriptin yolunu ve adını verelim. Onaylama türünü seçelim, telefon numarası vs. yazalım. hesap ayarlarımız böylelikle bitiyor. isterseniz modem ve ppp ayarlarına da bakalım. Resim için tıklayınız Bazen pppd'nin umulmadık şekilde sonlandırıldığına dair hatalar alırız, bunun en doğru çözümü debug moda geçip sorunu araştırmaktır ama burada ppp timeout değerini yüksek tutarsak belki yardımcı olabilir, bazen makinemizin ip adresini ataması 40 saniyeyi buluyor. Bir diğer kolaylık sağlayan ayar ise hayes komutları sayesinde bize ulaşıyor. Resim için tıklayınız şekilde görüldüğü gibi s11=50 paremetresi telefon numarasını hızlı çevirmesini sağlıyor. Tabi kendi zevkinize gore ayarlayabilirsiniz.

     Gelelim firewall scritimize..Script için tıklayınız Bu scripti belirttiğiniz yere kopyalayıp, ppp yapacak kullanıcılar için çalıştırılabilir yaptığınızda olayımız tamamlanacaktır. Gelin bu script aslında ne yapıyor onu anlayalım. (BU SCRIPT BIR FIREWALL SCRIPTI DEGILDIR VE GUVENLI DE DEGILDIR. SADECE IPMASQUERADE in 2.2.* KERNELLERDE NASIL OLDUGUNU ORNEKLEMEK İÇİNDİR. FİREWALL UYGULAMALARINI GELECEK SAYILARIMIZDA BULABİLİRSİNİZ.)   Scriptimiz kernelle derlediğimiz forwarding modullerini yüklemeyle başlıyor. Sonra forwarding in başlaması için işaret veriyor. Sonra dialup baglantı dolayısıyla öntanımlı yol olarak ppp0 aleti route tablosuna ekleniyor. Tüm ipchains kuralları siliniyor (forward, input, output). Tüm forwardlar engelleniyor. Sonra hostlar için forward etme başlıyor. İşte bu kadar. Bu ay biraz yoruldum galba :) umarım değmiştir... Gelecek ay görüşmek ümidiyle linuxlü günler...

Pasha ; pasha@trscene.org


Cyber-Info WebMail Notify v2.7

İlk Söz:Sizinde bildiğiniz gibi uzun bir süredir burada yazmıyordum.Bundan sonra inşallah yeniden yazıcam.Benim anlattıklarımı yapmadan önce lütfen softice ile ilgili yazıyı iyi okuyun ve işin mantığını anlayın.Azıcık assembly de öğrenirseniz olayı kavradınız demektir.Softice ile alakalı turkish scene deki yazıyı okuduysanız programı kırmaya başlıyabiliriz.

Programın İsmi Cyber-Info WebMail Notify v2.7
Program Tipi Web tabanlı(Hotmail, Yahoo, Net@dress, iName )emailleri kontrol etmenize yarar
Program Koruması Program 30 günlük deneme süresi var.Programın ne kadar çalıştırıldığı ve eğer kayıt
olursanız isim ve serial Windows\System\hotreg2.set dosyasına yazılıyor.
Gerekli Araçlar Softice v3.25 Windows 9x/NT, Ultraedit,Hiew vb hex editor, W32DASM v8.9(opsiyonel)

     Programı açıyoruz.Bizi rahatsız edecek tek şey 30 günlük deneme sürümü olması.Biz biraz daha denemek için kayıt olmayı deniycez.Registration i tıklıyoruz isim olarak Mister Stop serial olarak da 123456789 yazıyoruz.(Serial olarak bilerek 123456789 yazıyorum.Eğer program mesela seriali üçüncü rakamından doğru okumaya başlarsa ben bunu rahatlıkla yakalayabilirim).Ok tuşuna basmadan önce softice a geçiyoruz.Şimdi bilidiginiz üzere breakpoint koyucaz.Serial ile alakalı koyacağımız iki breakpoint vardı getdlgitemtexta ve getwindowtexta.Softice a CTRL+D ile geçiyoruz.bpx getdlgitemtexta yazıp entere basıyoruz.sonra bpx getwindowtexta yazıp entere yine basıyoruz.Su an biz ne yaptik ?.Softice a dedik ki bak softcum eğer bir program benden izinsiz getdlgitemtexta veya getwindowtexta ile benim yazdigim seriali okursa onu durdur.Bunlari yazdıktan sonra CTRL+D ile veya F4 veya x sonra entere basarak Softice dan çıkıyoruz.Şimdi Ok tuşuna basıyoruz.Program bize serialin geçersiz oldugunu soyluyor.Biz hemen CTRL+D ile yeniden softice a geçiyoruz.Softice niye durdurmadın diye bir firça atıyoz.Bakıyoruz ki bu program seriali başka sekilde okuyor.(Program delphi ile yazılmış)Bizde en baba breakpointi koyuyoruz.bpx hmemcpy.(Hmemcpy demek high memory copy demek.Yani eğer yüksek bellekte bir işlem olursa dur diyoruz.)Break pointleri bc * ile temizliyoruz.Sonra bpx hmemcpy yazıp entere basıyoruz.Sonra CTRL+D ile softice dan çıkıyoruz.Program ekranında yine OK tuşuna basıyoruz.Boom softice in içindeyiz.Hemen bd * ile breakpointi dissable(geçersiz) ediyoruz.Bu breakpoiniti dissable etmezseniz işin içinden çıkamazsınız çünkü program hep bu fonksiyonla birşeyler yapar kısır döngüye eskilerin deyimiyle fasit daireye girersiniz.(Vayt be ! ne türkçe var bende).Şimdi artık kodu takip edicez.Şu an biz hala program kodunun içinde değiliz.Sizin softice ekranı şöyle bir şey kabaca;

      Şimdi arkadaşlar bizim dikkat etmemiz gereken bir nokta var biz su an hala KERNEL deyiz yani cieweb programının içinde değiliz.Bunu nasil anlıyoruz ?Data windowun sağ üst köşesinde yazan göstergeden anıiyoruz.Benim data pencerem yok mu diyosunuz ?.O zaman wd yazıp enetere basın.Register windowu için wr location windowu için de wl.Bunların zaten açık olması lazım.Benim yazdığım softice yazısında bunlar açıklanmıstı.Biz yine programa dönelim.Şu an biz program kodunun içine girinceye kadar F12 tusuna basıyoruz(7 defa galiba).Data windowunun sağ üst köşesinde CIEWEB! gibi bir şey gördüğünüz zaman artık F12'e basmayı bırakıyoruz.Artık programın içindeyiz kodu basamak basamak çalıstıracağız bunun için de F10 tuşuna basıyoruz.Serialimizi program mutlaka bir yerlere kopyalıyacak.Bu yüzden biz gördüğümüz her mov veya lea dan sonra d ile ordaki memory i kontrol edicez.Mesela mov eax, dword ptr [0052AAC8] bunu F10 ile geçtikten hemen sonra d eax yapıyoruz.Bunu gördüğümüz bütün lea ve mov komutları için yapıyoruz.Sonunda şöyle bir yere geleceksiniz.

:004D70B3 E83C8A0000 call 004DFAF4                    &nb