
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.
 |
 |
|
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 | |