qmail 1.0 ın Üzerinden Geçen 10 Yılın Ardından Güvenlik Konusunda Bazı Düşünceler*

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "qmail 1.0 ın Üzerinden Geçen 10 Yılın Ardından Güvenlik Konusunda Bazı Düşünceler*"

Transkript

1 qmail 1.0 ın Üzerinden Geçen 10 Yılın Ardından Güvenlik Konusunda Bazı Düşünceler* Metin KAYA EnderUNIX Üyesi Endersys Yazılım Mühendisi metin at enderunix.org metin.kaya at endersys.com.tr Kasım 2007 Pazar EEST 03:23:19 * D. J. Bernstein ın adresli makalesinden birebir çeviridir.

2 ÖZET qmail, 1997 den beri güvenlik garantisi olan ve yaygın olarak kullanılan bir e-posta sunucu yazılımıdır. Bu makalede qmail in yazarı qmail mimarisinin güvenlik ile ilgili kısımlarını ve tarihini tekrar gözden geçirir, qmail in başaramadığı bölümleme standartlarını açıkça ifade eder, qmail in bu başarısızlığını mühendislik açısından inceler ve güvenli program yazmaya dair gelecekle ilgili düşüncelerini belirtir. Kategoriler ve Konu Tanımlayıcıları D.2.11 [Yazılım Mühendisliği]: Yazılım Mimarileri açıkları kapatma, gereksiz kodları silme; D.4.6 [İşletim Sistemleri]: Güvenlik ve Koruma; H.4.3 [Bilgi Sistemleri ve Uygulamaları]: İletişim Uygulamaları e-posta Genel Açıklamalar Güvenlik Anahtar Sözcükler Açıkların kapatılması, kodların elenmesi, güvenilen (trusted) kodların azaltılması 1. GİRİŞ 1.1 Ayın Açığı (the bug-of-the month) Kulübü Bütün İnternet Servis Sağlayıcıları (İSS) e-posta iletim yazılımı (MTA Mail Transport Agent) kullanır. MTA, yerel kullanıcılardan aldığı e-postaları karşı tarafa SMTP (Simple Mail Transfer Protocol) üzerinden gönderir. Ayrıca, kendisi de SMTP üzerinden aldığı e-postaları yerel kullanıcılara iletir. Eric Allman ın Sendmail yazılımındaki güvenlik açıklarından bıktığım için 1995 te bir MTA, qmail, yazmaya başladım. Sendmail, o zamanlar internetin en popüler MTA yi konumundaydı; [4] e bakabilirsiniz. Aşağıda, Aralık 1995 te yazdığım qmail dokümanından bir parça görülmektedir: Her birkaç ayda bir CERT tarafından Sendmail ile ilgili yerel veya uzak kullanıcıların makinenin kontrolünü ele geçirmesine izin veren güvenlik açıkları duyuruluyor. Sendmail de keşfedilmeyi bekleyen çok fazla sayıda güvenlik açığının bulunduğundan eminim. Çünkü Sendmail in tasarımı, satır koddaki en küçük bir hatayı çok büyük bir güvenlik tehlikesine dönüştürüyor. Smail gibi diğer e-posta yazılımları ve Majordomo benzeri e-posta liste yöneticisi yazılımlar da aynı şekilde kötü görünüyor.

3 1996 ve 1997 de 14 Sendmail güvenlik açığı duyuruldu. Bundan sonra Sendmail in güvenlik açıklarını saymayı ve Sendmail ile ilgilenmeyi bıraktım. Araştırmalara göre Sendmail in güvenlik açıklarına karşı çıkardığı son sürümü olan , Mart 2006 da çıkarıldı; [10] a bakabilirsiniz ( yetkilendirilmemiş uzak saldırganlar Sendmail sürecinin haklarıyla sistemde istedikleri kodu çalıştırabiliyor ). Sendmail in 20 yıldır uzak saldırılara açık olduğu biliniyor; peki şimdi kimse Sendmail in son sürümünün uzak saldırılara karşı güvenli olduğunu iddia edebilir mi? Sendmail le ilgili güvenlik açıklarının duyurulması seyrekleşmiş olabilir; ancak bu gerçek, sistemleri Sendmail yüzünden saldırıya uğramakta olan yöneticilere yardımda bulunamaz. 1.2 qmail in Çıkarılması Aralık 1995 te yoğun olarak qmail için kod yazmaya başladım. Cebirsel sayı teorisiyle ilgili verdiğim ders henüz bitmişti ve kendime ayırabileceğim boş zamanım olmuştu. Beni qmail yazmaya iten son şey ise bir meslektaşıma onun için büyük bir e-posta liste programı yazacağıma dair söz vermemdi. Sendmail, listeler için istediğim kolaylığı sunmuyordu. Sendmail in güvenilirlik ve güvenlik sorunları bir yana, büyük bir liste üyelerine e-posta göndermek sonsuza dek sürecekmiş gibi görünüyordu (ciddiyim!). qmail in 7 Aralık 1995 sürümündeki kodda aşağıdaki komuta göre ölçüldüğünde kelime bulunuyordu: $ cat *.c *.h cpp -fpreprocessed sed s/[_a-za-z0-9][_a-za-z0-9]*/x/g tr -d \012 wc -c (Diğer ölçümlerde de benzer sonuçlar alınır.) qmail in 21 Aralık 1995 sürümü ise kelimeydi. 21 Ocak 1996 sürümünde, qmail 0.70, kelime vardı. Bu sürümü kendi bilgisayarımda birkaç gün izledikten sonra qmail beta testlerini başlatmak için herkese sundum. 1 Ağustos 1996 da kelimeye sahip qmail 0.90 sürümünü çıkararak beta testlerini bitirdim. 20 Şubat 1997 ise kelimelik qmail 1.00 ı yayınladığım tarihtir. 15 Haziran 1998 de kelimelik mevcut sürümü, qmail 1.03, çıkarttım. Bu sürümün türevi olan kelimelik netqmail 1.05 ise komite tarafından çıkarıldı. qmail 1.0 daki 4 açığın farkındayım. Karşılaştırma yapacak olursak: Sendmail Mart 1996 da çıkarıldı ve kelimeydi; kelimelik Sendmail Ocak 1997 de yayınladı; Mayıs 1998 de çıkarılan Sendmail sürümü ise sözcük içeriyordu. Tüm bu sürümlerde Sendmail in yüzlerce açığı not ediliyordu. Kullanıcı tarafından bakıldığında Sendmail ile qmail arasında farklılıklar var. Örneğin; qmail in POP desteğine karşılık Sendmail de UUCP desteği ve qmail de kullanıcılar tarafından kontrol edilen e-posta listesine karşılık Sendmail de uzaktan root olabilme açığı (sadece bir şaka!) mevcut. Ancak tüm bunlar karmaşıklık sorununu açıklamaz. Her paketteki kodların çoğu, tipik internet sitelerinin ihtiyaç duyduğu MTA lerin çekirdek özelliklerine adanmıştır.

4 Parmak izleri (fingerprinting) gösteriyor ki internetteki mevcut SMTP sunucularının 1 milyondan fazlasında qmail 1.03 veya netqmail 1.05 kullanılıyor. 3. parti qmail.org ise şunu söylüyor: Çok fazla sayıda internet sitesi qmail kullanıyor: USA.net in giden e-posta sunucusu, Address.com, Rediffmail.com, Colonize.com, Yahoo! mail, Network Solutions, Verio, MessageLabs (kötü niyetli e-postaları tespit etme için araştırma yapan kurum haftada 100 Milyon e-posta alıyor), listserv.acsu.buffalo.edu (1996 dan beri qmail kullanan büyük bir listserv hub ı), Ohio State (ABD nin en büyük üniversitesi), Yahoo! Groups, Listbot, USWest.net (ABD nin batı İSS si), Telenordia, gmx.de (Alman İSS), NetZero (açık İSS), Critical Path, PayPal/Confinity, Hypermart.net, Casema, Pair Networks, Topica, MyNet.com.tr, FSmail.net, Mycom.com, and vuurwerk.nl. Birçok yazar qmail kitabı yazdı: [7], [20], [14], [22]. Çok kapsamlı istatistikleri toplamak zor; ancak örnekler gösteriyor ki internet üzerindeki yasal e-postaların büyük bir kısmını qmail alıp gönderiyor. 1.3 qmail Güvenlik Garantisi Mart 1997 de qmail in son sürümünde gerçekliği kanıtlanabilir bir güvenlik açığı bulan ilk kişiye 500 $ ödül vereceğimi vaat etmiştim. Örneğin; qmail in başka bir kullanıcı haklarıyla çalışmasını sağlayacak bir açık. Teklifim hala geçerli. Kimse qmail de bir güvenlik açığı bulamadı. Bu vesileyle ödülü 1000 $ a yükseltiyorum. qmail deki güvenlik açığı ifadesi elbette qmail dışı problemleri kapsamıyor. Örneğin; NFS, TCP/IP veya DNS teki güvenlik sorunları,.forward dosyalarının çalıştırdığı betiklerdeki açıklar ve genel işletim sistemi sorunları. qmail kurulmadan önce zaten saldırıya açık olan bir sistemdeki qmail i herhangi bir problemden dolayı ayıplamak aptalca bir hareket olur. qmail i e-postaları bir ağa gönderirken şifrelemede veya doğrulamada başarısız olması durumunda ayıplamak ahmakça olmaz; çünkü kriptografi TCP/IP den ziyade qmail gibi uygulamaların ele alması gereken bir konudur. Ancak kriptografi qmail güvenlik garantisinin kapsamı dışındadır. DoS (Denial of Service) saldırıları özellikle kapsam dışıdır. Çünkü bunlar tüm MTA lerde var olan, kapsamlı belgelendirilmiş sorunlardır ve bazı önemli protokolleri ağır bir yapılandırmadan geçirmeden bu saldırıların aşılması çok zordur. Birileri buna karşı çıkıp e- postaların ümitsizce bu yapılandırmaya ihtiyacı olduğunu söyleyebilir; ben de ona katılırım ama bu konu başka bir makalenin konusudur. qmail, kullanıcıların qmail i istismar edip diğer kullanıcıların bilgilerini çalamayacağını ve onlara zarar veremeyeceğinin garantisini verir. Eğer diğer programlar da aynı standardı yakalarsa ve ağ bağlantılarımız kriptografik olarak korumaya alınırsa internetteki tek güvenlik sorunu DoS saldırıları olur.

5 1.4 Bu Makalenin İçeriği qmail emsalsiz güvenlik seviyesine ulaşmayı nasıl başardı? qmail i güvenlik açısından üstün kılan neydi ve neler onu daha ileri götürebilirdi? Diğer yazılım projelerinin bu şekilde güvenlik garantisine sahip olması için onları nasıl yapılandırabiliriz? Güvenlik hakkındaki görüşlerim yıllar geçtikçe çok daha acımasız oldu. Güvenliğe çok büyük para ve emeğin yatırıldığını gördüm ve çok daha fazlasının harcanacağından eminim. Güvenlik konusundaki çabaların çoğu dünün saldırılarını önlemek üzere tasarlanır; fakat yarının saldırıları karşısında başarısız olur ve gayet sağlam olması beklenen yazılımlarda kullanılmaz. Uzun vadeli işlerde bu çabalar oyalayıcı olmaktan öteye geçmez. Geçmişe bakıldığında qmail in güvenlik mekanizmalarından bazılarının yarı pişmiş olduğu, ihmal edildiğinde hiçbir güvenlik kaybının olmaması ve bazı şeyleri gerçekten başaramamış olmasından anlaşılır. Diğer mekanizmalar qmail in göstermiş olduğu başarılı güvenlik performansından sorumludur. Bu makaledeki asıl maksadım aradaki farkı ileri seviyede açıklamaktır yazılım mühendisliği teknikleri uzun soluklu güvenlik açısından nasıl değerlendirilmelidir. Bu makalenin 2. kısmında çok sağlam yazılım sistemlerine yönelik 3 özel talimat anlatılmaktadır. Geriye kalan bölümler, qmail in bu 3 talimatta göre başarılı ve başarısız olduğu yönlerden bahsetmektedir. 2. NASIL İLERLEYEBİLİRİZ? Bir yazılım hatası, tanımda belirtildiği üzere kullanıcının gereksinimlerini bozmak demektir. Yazılımla ilgili güvenlik açığı da kullanıcının güvenlik gereksinimlerini bozan yazılım özelliğidir. Bu nedenle her güvenlik açığı bir hatadır. (Resmi şartnamelerin, güvenlik politikalarının, vb şeylerin savunmalarında açıkça belirtilmiştir ki kullanıcıların tüm ihtiyaçlarını yapmak oldukça zordur. Özellikle de kulacıların üzerinde çok düşünmediği gri alanlarda-. Aşağıda belirtildiği gibi, bu karmaşıklık güvenlik açıklarını gidermede büyük zorluklar çıkarmaktadır ama bu karmaşıklık olmasa da güvenlik açıklarını çözme işi yine zor olurdu. Çünkü bugünkü yazılımlar aklıma gelen en basit güvenlik gereksinimlerini bile karşılamaktan uzaklar.) Her N adet kod sözcüğünde ortalama 1 açığın ve bilgisayarınızda 10000N adet kod sözcüğü olduğunu varsayalım. Mutsuz sonuç: bilgisayarınızda açık var ve bunların büyük çoğunluğu tahminen güvenlikle ilgili. Hiç güvenlik açığı bırakmayacak şekilde nasıl ilerleyebiliriz? Bu ilerlemeyi nasıl ölçebiliriz? Bu bölüm 3 yanıt vermektedir. Ayrıca komitenin dikkatini dağıtıp ilerlemesine engel olan 3 konuyu da tartışmaktadır.

6 2.1 Yanıt 1: Açıkları Gidermek İlk ve en açık yanıt açık oranını azaltmaktır. Bir yazılım mühendisliği sürecinin açık oranını, o ana bitmiş kodları dikkatlice gözden geçirip bulunan açıkların sayısını gözden geçirilen kod miktarının fonksiyonu şeklinde ifade ederek bulabiliriz. Farklı yazılım mühendisliği süreçlerinin açık oranını karşılaştırabiliriz. Düşük açık oranlarıyla meta-engineering yapabiliriz. (Bazen göze batmayan küçük hatalar, kodu gözden geçirirken araya kaynamaktadır. Ancak; deneyimlerim normal açık oranının, gözden hiç hata kaçırmadığınızda bulacağınız açık oranından çok az farklı olacağını söylüyor. Eric Raymond un [17, Bölüm 4: Release Early, Release Often ] da belirttiği gibi mevcut göz yuvarlaklarımızda bütün açıklar sığ kalır.) Açıkları giderme, yazılım mühendisliği araştırmalarının klasik bir konusudur. İyi bilinen bir örnek: tipik yazılım mühendisliği sürecindeki açık oranı kapsam testleri yapılarak ciddi oranda azaltılabilir. Fakat yazılım mühendisliği sürecinin önceki aşamalarında yaptığınız tercihlerin açık oranını azaltacağı çok bilinen bir kavram değildir. Detaylı bilgi için 3. kısma bakınız Yanıt 2: Kod Elemek 10000N adet kod sözcüğü olan bilgisayar sistemini tekrar göz önüne alın. Açık oranının kelime başına 1 den biraz daha az olduğunu ama tüm açık miktarının yine 10000N e yakın olduğunu varsayalım. Bu durumu nasıl düzeltebiliriz? 2. yanıt, bilgisayardaki kod miktarını azaltmaktır. Yazılım mühendisliği süreçleri sadece kod miktarındaki açık sayısına göre değil, kullanıcının istediği özellikleri sağlayan kod hacmine göre de değişim gösterir. Kod eleme, yazılım mühendisliği araştırmalarındaki diğer klasik konudur: farklı yazılım mühendisliği süreçlerinin kod hacimlerini karşılaştırabiliriz ve metaengineering ile aynı işi daha az miktardaki kodla yapabiliriz. Ayrıntılar için makalenin 4. kısmına bakınız. Bir ürünün açık (bugs)/kod oranını veya kod/iş (jobs) oranını ölçmektense açık/iş oranını gözlemek daha yerinde bir hareket olacaktır. Ancak farklı ölçümler farklı tekniklere dikkati çekecek gibi görünüyor. Ayrıca, kod/iş oranı yazılım mühendisliği zamanında önceden tahminlerde bulunacak kişiden bağımsız bir konudur ve aynı şekilde açık/kod oranı da hata ayıklama zamanında öngörülerde bulunacak kişiden bağımsızdır.

7 2.3 Güvenilen Kodların Azaltılması Daha az miktarda kodu olan bir bilgisayar sistemi ve daha az açığın olduğunu varsayalım. Bu durumda sistemimizde 1000 den az açık olacaktır. Bunların çoğu, tahminen, hala güvenlik açıklarıdır. Nasıl ilerleyebiliriz? 3. yanıt, bilgisayar sistemindeki güvenilen kod miktarını azaltmaktır. Bilgisayar mimarisini kodların çoğunu güvenilmezler hapishanesine atarak yeniden tasarlayabiliriz. Güvenilmez koddan kastım ne yaptığıyla, ne kadar kötü çalıştığıyla, ne kadar açığının olduğuyla hiç ilgilenmediğiniz, kullanıcının güvenliğini istismar edemeyecek olan koddur. Bilgisayarımızdaki güvenilen kod miktarını ölçüp meta-engineering yaparak bu miktarı en aza indirebiliriz. (Mütercimin notu: D.J.B. nin güvenilen kod ile anlatmak istediği, program yazarken kullanılan kütüphane fonksiyonları gibi hazır kodlardır. D.J.B; strlen, strcpy, strcmp, v.s. başta olmak üzere özellikle katar (string) ve sistem fonksiyonlarını yeniden yazmıştır.) Bir sistemdeki kod miktarını azaltmak için kullanılan teknikler güvenilen kod miktarını azaltmak için de geçerlidir ama ilave teknikler güvenilen kod miktarının toplam kod miktarından daha az olmasını sağlamaktadır. Güvenilen kod miktarını azaltmakla açık sayısını azaltmak arasında hoş bir sinerji var: güvenilen kod miktarı az olduğundan bunlardaki açıkları gidermek nispeten daha ucuzdur. Örneğin; Sendmail in e-postanın başlığından e-posta adresini çıkarmaktan sorumlu olan kodunu göz önüne alalım. [12] ye göre, Mark Dowd 2003 te bu kodda aşağıdaki güvenlik açığını buldu: Saldırganlar, root veya superuser kullanıcısının haklarını ele geçirip Sendmail sunucusunu kendi çıkarları için kullanabiliyor Bu açık özellikle çok tehlikeli; çünkü saldırgan sadece bir e-posta göndererek hedef sunucu hakkında hiçbir bilgiye sahip olmaksızın sunucuyu taciz edebilir X-Force bu açığın gerçek dünyadaki Sendmail kurulumlarında uygulanabileceğini gösterdi. Aynı adres çıkarma kodunun basit 2 veri akış kuralını kullanan bir yorumlayıcıyla çalıştığını varsayalım: Kodun sistemde görebildiği tek yer üzerinde çalıştığı e-postadır; Kodun sistemde sahip olabileceği tek etki, üzerinde çalıştığı e-postadan elde ettiği e- posta adresini yazmaktır. Bu aşamadan sonra kodun, kullanıcının güvenliğini kötüye kullanma şansı yoktur. Sisteme e- posta gönderen saldırganın elinde tuttuğu tek şey kodun çıkarttığı e-posta adresidir ki saldırgan bunu koddaki herhangi bir açığı kullanmadan da elde edebilir. Saldırganın başka hiçbir şey yapabilme şansı yoktur. Aynı konuyla ilgili başka bir örneği kısım 5.2 de bulabilirsiniz.

8 (Kullanıcının güvenlik gereksinimlerinin e-posta göndericisinin e-posta adresi çıkarma kontrolünü saldırganın elinden almadığını farz ediyorum ama gereksinimler daha karmaşık olabilir. Belki de kullanıcı birden fazla kaynaktan bir e-posta eklentisi oluşturuyordur. Belki de kullanıcı e-posta eklentilerinin birbirini ve e-posta başlığı gibi özellikleri etkilememesini istiyordur. Bu durumda yorumlayıcı, ilgili veri akış kısıtlarını göz önünde bulundurmak zorundadır.) Güvenilen kod miktarını ve açık oranını yeterince azalttığınızda ve güvenilen kodun makul ölçülerde açık sahibi olduğunu kabul edersek bu durumda sistemde hiç güvenlik açığı olmayacaktır. Tahminen güvenilen kodda hala açıklar olacaktır; ancak bu açıklar kullanıcının güvenliğini kötüye kullanamaz. Güvenli bir yazılım sistemi tasarlamak açığı olmayan bir yazılım sistemi tasarlamaktan daha kolaydır. 2.4 Dikkati Dağıtmanın 1. Yöntemi: Saldırganın Peşine Düşmek Çoğu insan için güvenlik, mevcut saldırganları izleyip bazı şeyleri (hatta her şeyi!) değiştirmek ve onların başarısız olmasını sağlamaktan ibarettir. Bu yöntemin çekiciliğini anlamak kolaydır: daha önce başarılı olmuş bir saldırının bu girişiminde başarısız olduğunu izlemek sistem güvenlikçisine bir anlık mutluluk verir. Bazen değişiklikler saldırganlar tarafından istismar edilen özel açıkları kapatmaya yöneliktir. Ubuntu Linux dağıtımı bu yıl içerisinde çok sayıda program açıklarını gideren 100 den fazla acil güvenlik yaması çıkardı. Yapılan değişiklikler bazen hiçbir problemi çözmez. Güvenlik duvarları, anti virüs sistemleri ve saldırı tespit sistemleri, hedeflenen yazılımı yamalamadan önce saldırıları girişimlerini tespit etmeye çalışır. Yazılım mühendisliği eksikliklerini çözmeyen değişiklikler, güvenlik açıklarına öncülük yapmıştır. Başarıyı, mümkün olan tüm saldırıları önlemekten çok, dünün saldırılarını durdurmak olarak tanımlarsak, sistemimizin yarının saldırılarına karşı savunmasız olmasına şaşırmamalıyız. 2.5 Dikkati Dağıtmanın 2. Yöntemi: Ayrıcalıkları En Aza İndirme Birçok güvenlik çabası uygulamaların en az ayrıcalıkla çalışması prensibine yöneliktir. Bu prensip [18] de Tüm program ve sistem kullanıcıları işlerini yürütebilecek en az ayrıcalıkla çalışmalıdır diyen Saltzer ve Schroeder tarafından ortaya atılmıştır. Bu güvenlik çabaları aşağıda anlatıldığı gibi çalışmaktadır. Program P nin R kaynağına meşru erişim hakkının olmadığını varsayalım. Daha sonra işletim sistemini, P ye bu kontrol hakkını verecek şekilde kullanalım (hakları genişletme de olabilir). Resim görüntüleme yazılımının ağdan veri göndermesini önleyelim, bir DNS sorgulama yazılımının diskten dosya okumasını engelleyelim, Örnekler için [3], [21], [11], [2], [15], [1], [16] ve [23] e bakınız. Kısım 5.1 konuyla ilgili qmail örneklerini içermektedir.

9 En az ayrıcalıkla çalışma prensibinin temelde yanlış olduğunu düşünüyorum. Ayrıcalıkları kısıtlamak zararları azaltabilir ama hiçbir zaman güvenlik açıklarını kapatmaz. Ayrıcalıkların azaltılması güvenilen kodların azaltılması gibi değildir, aynı faydayı sağlamaz ve bizi güvenli bir bilgisayar sistemine yaklaştırmaz. Bir örnek olarak [11] in Netscape in DNS Helper programına olan bağlılığını düşünün. Bu programın yerel diske erişiminin engellenmiş olması bile [8] de anlatılan libresolv açığının, Netscape te bir güvenlik tehlikesi oluşturmasını önleyemedi. DNS Helper ı hedef alan bir saldırgan, programın kontrolünü ele geçirip Netscape in gönderdiği bütün DNS verilerini değiştirip kullanıcının bütün web bağlantılarını çalabilir. [11] den önce durum, DNS Helper programının kullanıcının güvenlik gereksinimlerini çiğneme potansiyeline sahip olduğu ve düzeltilmesi gerektiği yönündeydi. [11] den sonra ise DNS Helper programının kullanıcının güvenlik gereksinimlerini çiğneme potansiyeline sahip olduğu ve düzeltilmesi gerektiği yönündeydi. Güvenilmeyen (untrusted) kodun tanımında kullanıcının güvenlik gereksinimlerini çiğneyemeyen kod yatar. DNS Helper programını tamamen güvenilmeyen kodlarla yazmak, bu programın eriştiği işletim sistemi kaynaklarıyla ilgili kısıtları sisteme zorla kabul ettirmiş olmaktan daha az istila edicidir. DNS Helper birçok kaynağın verisini ele alır; ancak her kaynak bir diğer kaynağın verisini değiştiremeyecek şekilde yapılandırılmalıdır. 2.6 Dikkati Dağıtmanın 3. Yöntemi: Hız, Hız, Hız Programcılar, yazılımlarının kritik olmayan kısımlarının hızını artırmak için çok uzun süre düşünür ve kaygılanır. Ancak bu girişimleri, genelde programlarının bakımı ve hata ayıklaması göz önüne alınınca negatif yönde çok büyük etkiye sahip oluyor. Programın çalışma zamanını %97 sine çekmek gibi küçük performans hamlelerini unutmalıyız. Olgunlaşmamış iyileştirme, bütün kötülüklerin anasıdır; Knuth [13] ün 268. sayfasına bakabilirsiniz. Programcıların, yazılımlarını hızlandırmak adına yaptıkları en büyük iş kodlarından küçük parçaları kesip atmaktır. Programcılar bunu yaptıklarında yazılımlarının daha hızlı çalıştığını ve açık oranının arttığını görebilirler. Genelde tasarım süreçlerini bu gayreti es geçecek şekilde değiştirmekten hafif bir mutluluk duyarlar. Knuth ın yorumları, yazılım profili çıkaramayan acemi programcılar için geçerli sanırım. Maalesef hızlanmak adına yapılan işlerin açıkça görülmeyen ve onarılması çok güç etkileri var. Kısım 2.3 teki e-posta adresi çıkarma örneğini göz önüne alın. Basit veri akışı işlemleri için yorumlayıcı kullanmak güvenlik dışı hatalara neden olabilir önemli bir fayda. Ancak programcıların çoğu Yorumlayıcı kullanılan kod çok yavaş çalışıyor! der ve yorumlayıcı kullanmayı hiç denemez bile.

10 Yeni bir işletim sistemi süreci başlatmak benzer kısıtları, yorumlayıcı kullanılmasa da, kabul etmek zorundadır. Ama programcılar Her adres çıkarma için yeni bir süreç başlatamazsın! der ve kullanmayı hiç denemez bile. Bir programlama dilini, program veya sistem mimarisini geliştirme girişiminde bulunanlar benzer engelleri aşmak zorundadır. Bu programcılar bazı içeriklerin yavaşlamasıyla karşı karşıya gelecektir (veya karşılaştıklarını varsayacaklardır) ve bu yavaşlıktan dolayı gelişmeyi suçlayacaktır ki bu tam bir pazarlama felaketi. Bilgisayarımı beklemeyi sevmiyorum. Aslında başkasının bilgisayarı yüzünden bekletilmeyi de sevmiyorum. Araştırmalarımın büyük çoğunluğu sistem performansını değişik seviyelerde artırmaya yöneliktir. (Örneğin; [6] daki makalem: Eğrisi: Yeni Diffie Hellman Hız Kayıtları ) Fakat daha sonra güvenliğin, hızdan önemli olduğunu anladım. Bugün, mevcut sistemlerimizden 10 kat daha yavaş çalışsa bile güvenlik açığı olmayan yazılım sistemlerine ihtiyacımız var. Yarın, bu sistemleri hızlandırmaya çalışmak için çalışmaya başlayabiliriz. Gayet sağlam sistemler tasarladığımızda güvenliğin aslında çok fazla CPU zamanına ihtiyacı olmadığına inanıyorum. CPU zamanının büyük kısmını program kodumuzun küçük bir kısmı kullanır ve güvenlik doğrulamasının harcadığı zaman, küçük kodlarımızın harcadığı zamanın yanında ihmal edilebilecek kadar azdır. Sıradan bir sıcak nokta (hot spot), tekil bir kaynakta milyonlarca CPU saat çevrimi harcar. Modern derleme teknikleri, bazı durumları delillerle kanıtlanmış, güvenlik doğrulamalarını iç döngülerden yukarıya çekebilecektir. Ara sıra, ağ paketlerinin şifrelenmesi gibi hileli güvenlik kısıtları olan sıcak noktalar (hot spot) açığı olmayan güvenilir kod olacaktır. 3. AÇIKLARI KAPATMAK Uzun yıllardır sistematik olarak hataya eğilimli program yazma alışkanlıklarını, kendimin ve diğer insanların hatalarını inceleyerek ve literatürü gözden geçirerek teşhis etmeye çalışıyorum ve programlama ortamımı bu hatalardan soyutlandırmaya çalışıyorum. qmail i yazmaya başladığımda bu konuda zaten birikimim vardı ve qmail 1.0 ı geliştirirken büyük bir ilerleme kaydettim. Bu noktada qmail in açık oranından memnun olduğum anlaşılmasın. Hata yapma oranım son on yılda azalmaya devam etti ve qmail programlama ortamımın modası geçmiş birçok yönünü ümitsizce görüyorum. Allah tan 1990 ların ortalarında açık oranım, qmail in kaynak koduna oranla, yeterince düşüktü ki qmail 1.0 da sadece birkaç açık vardı. Bu anlattıklarım, qmail in sıra dışı güvenliğine dair bir açıklama niteliğindedir. qmail in ayrıcalıkları en aza indirme mekanizmasının genele çok bir faydasının olduğu söylenemez; ayrıntılar için kısım 5.1 e bakınız. Bu kısım, programlama dillerini, program yapılarını, v.s. değiştirip meta-engineering yaparak açığı olmayan kod yazma örneklerini içerir.

11 3.1 Açık Veri Akışını Uygulamak Global değişkenlerle ilgili standart bir tartışma vardır: Global değişkenler genellikle programcıları şaşırtan gizli veri akışı oluşturur. qmail 0.74 te düzeltilen şu açığı göz önüne alın: qmail-send, newfield_datemake i her yeni bounce için çağırsa bile, eğer newfield_datemake e zaten bir ilk değer atanmışsa newfield_datemake, newfield_date i yalnız bırakacaktır. Dışarıya sadece bir mesaj gönderen ve newfield_date te uygun olarak saklanan tam olarak 1 tane Date alanına ihtiyaç duyan newfield_datemake fonksiyonunu, aslında qmail-inject programı için yazmıştım. Fakat daha sonra bu fonksiyonu pek çok mesaj gönderen (bounce eden e-postalar, gönderilemeyen mesaj raporları, v.s.) ve dışarıya giden her mesaj için bir Date alanına ihtiyaç duyan qmail-send için yeniden kullandım. newfield_datemake in mevcut newfield_date i yeniden düzenlemediğini unutmuştum (newfield_date global değişkeni, özelliği gereği, eski Date alanıyla ilgili önceki mesajdan yeni mesaja veri transferini sonlandırdı). Gizli veri akışı, tampon taşırma olaylarında da vardır. C de x[i] = m ifadesi, ilk bakışta sadece x değişkenini değiştiriyormuş gibi görünüyor; ancak i belirlenen aralığın dışındaysa bu ifade, fonksiyon dönüş adresi, bellek ayırma yapıları da dâhil, programdaki herhangi bir değişkeni değiştirebilir. Aynı şekilde x[i] yi okumak isterken programdaki herhangi bir değişken okunabilir. Qmail in tasarımı, qmail in iç kısımlarındaki veri akışını izlemeyi kolaylaştırır. Örneğin; farklı UNIX süreçlerinde çok sayıda qmail çalışsın. Bu süreçler bir iş hattıyla (pipeline) birbirine bağlanmıştır. Bu iş hattı çoğunlukla dosya sistemini ve nadiren diğer iletişim tekniklerini kullanır ama asla birbirlerinin değişkenlerine doğrudan erişmez. Çünkü her süreç kendi çapında küçük bir alanda çalışır ve programcının aradaki veri akışını berbat etmesine çok az fırsat verir. Daha düşük düzeylerde ise indisler belli aralıklarda iken çalışan çeşitli dizi erişim fonksiyonları tanımladım ve kontrolü zor olan fonksiyonları kullanmaktan kaçındım. Bugünlerde küçük ölçekli parçalara ayırmada, alt ve üst sınır kontrolünde, özet değişkenlerin güncellenmesinde (örneğin; bir dizinin değeri sıfır olan elemanlarının sayısı), v.s. daha çok ısrarlıyım. Alt ve üst sınır kontrolünden kastım, insanların normalde yaptıkları indeks numarası sınırların dışındaysa hata mesajı vermek değil; dizilere eleman eklendiğinde dizinin otomatik olarak genişlemesi ve eleman okunduğunda dizinin sıfırlanmasıdır. (Belleğin dışında mı? Kısım 4.2 ye bakınız.) Benzer işleri elle yapmak aptallıktır. 3.2 Tam Sayıların Anlamını Sadeleştirme Programcıları şaşırtan bir başka durum ise y nin y = x + 1 işleminden sonra x ten küçük olmasıdır. Bunun için x in ifade edilebilen en büyük tam sayı olan 2^31 1 olması gerekir. x in bu değerinde y, ifade edilebilen en küçük tam sayı olan 2^31 olur.

12 qmail in en yakınından geçtiği tehlike, kontrol etmeyi unuttuğum 32 bit sayaç taşırma potansiyeliydi (Georgi Guninski tarafından keşfedilmişti). Neyse ki sayacın taşacak kadar büyümesini bellek miktarı engelliyordu. Fakat aynı içerikteki başka bir sayaç artırma işlemi felaket gibi bir açığa neden olabilirdi. Benzer tavsiyeler diğer tam sayı işlemleri için de geçerlidir. Programcıların kodlarla yapmak istediği işlemler matematiksel işlemlerle tamamen eş anlamlıdır ama uygulamalarında yaptıkları, matematikle pek örtüşmez. Bu durumları teşhis etmek istesem, tampon taşırmaları için ek olarak çalışmam gerekir. Eğer matematiksel işlemlerimin aklı başında olması için mesela tam sayı taşmasının sadece bellek yetmezliği gibi bir durumda olması ek bir çalışma ile genişletilmiş tam sayı kütüphanesini yazmam gerekir. Programlama ortamlarının çoğu yazılım üretmeyi kolaylaştıracak yönde tasarlanmıştır. Aslında bunların yanlış kod yazmayı önlemeyi ön planda tutması gerekirdi. Gerçekten yapmak istemediklerimi yazmam, aslında niyetimde olanları yazmamdan çok daha fazla çalışmamı gerektirmelidir. 2^32 (veya 2^64) e göre mod alma şansım var ama bu işi gerçekleştirmek çok çalışmam gerektiğinden ötürü mutluyum. Bazı dillerde a + b tam olarak a ile b nin toplamı demektir. Bu diller çoğu zaman genel kullanımlarda çok yavaş oldukları için işten uzaklaştırılmışlardır: aşağıdaki gibi bir döngü for (i = 0; i < n; ++i) c[i] = a[i] + b[i]; aniden n adet gmp_add() gibi çok pahalı yüksek doğruluklu tam sayı aritmetik fonksiyon çağrısı gerektirir. Fakat derleyici için büyük tam sayıların bulunduğu yerlerin izlerini takip eden kodları üretmek ve gmp_add()çağrılarını küçük tam sayıları kullanan makine seviyesine indirgemek roket bilimi değildir. Muhtemelen adreslemeler yüzünden bazı yavaşlamalar olacaktır kısım 2.6 da belirtildiği gibi ancak ilk olarak kodu doğru yazmalı, daha sonra programın hızı için kaygılanmalıyız. 3.3 Ayrıştırmadan (Parsing) Kaçınma Bilgisayar dünyasında 2 çeşit komut satırı arayüzü gördüm: iyi ara yüzler ve kullanıcı ara yüzleri. Kullanıcı ara yüzlerinin özü ayrıştırmadır: dağınık bir dizi komutu, katı mühendislikten çok psikolojik olarak düzgün bir biçimde bir araya getirme. Bir başka programcı kullanıcı arayüzüyle konuşmak istediğinde arayüzün söylediklerini alıntı yapmalıdır: programcının düzenli verilerini al, yapılandırılmamış komutlara çevir ve (ümit edilir ki) ayrıştırıcı bu dağınık komut dizisini yapılandıracak. Bu durum tam bir felaket formülüdür. Ayrıştırıcılar çoğunlukla açıkları olan yazılımlardır: belge arayüzü nedeniyle bazı giriş verilerini okumada başarısız olabilir. Programcı ile kullanıcı arayüzünün arasındaki aktarıcının da açıkları vardır: çoğu zaman sonuç olarak ürettiği verilerin anlamı doğru değildir. Sadece bazı neşeli durumlarda ayrıştırıcı ile aktarıcının ikisi de arayüzü yanlışlıkla aynı şekilde yorumlar.

13 Bu açıklamaları qmail in aşırı sade dosya yapılarında ve program seviyesindeki ara yüzlerinde ayrıştırmadan ve aktarmadan nasıl kaçınıldığını 2 örnekle, orijinal qmail belgelerine yazmıştım. Ancak dış kısıtların daha iyi ara yüz yazmaya izin vermediği durumlarda ayrıştırma ve alıntılama yaparken ortaya çıkan açıklar hakkında bir şey söylememiştim. qmail 0.74 te düzeltilen aşağıdaki açığı düşünelim: qmail-inject USER ın alıntı yapılıp yapılmayacağını kontrol etmiyordu. qmail-inject in aşağıda yaptığı kullanıcı adını gösteren bir From satırı oluşturmaktır: From: "D. J. Bernstein" <djb@cr.yp.to> Yukarıdaki örnekte djb olan kullanıcı hesap adı, karakterinden önce harfi harfine yazılabilir ama isim parantez gibi sıra dışı karakterler içeriyorsa olduğu gibi alınmalıdır. Testlerim USER daki sıra dışı karakterleri özel olarak incelemiyordu. Bu nedenle harfi harfine yazmayı düzgün kodlamadan ayırt edemediler. Başka bir örnek olarak UNIX in logger programındaki açığı göz önüne alın: muhtemelen sisteminiz syslog(pri, %s, buf) yerine syslog(pri, buf) yapıyordur. Tahminim bu durum logger programında DoS tan öte bir güvenlik açığı oluşturmaz; çünkü saldırgan elde ettiği VM adresleri anlaşılır ASCII karakterlerine dönüştürürken korkunç derecede kötü anlar yaşayacaktır ama ayrıştırılmış(disassembled) nesne kodunu görmeden kesin bir şey söyleyemem. Baştan temkinli davranmak, sonradan acı çekmekten iyidir.(better safe than sorry) buf a % eklemeyen testler syslog(pri, %s, buf) ile syslog(pri, buf) arasındaki farkı algılamayacaktır, [5] ve [19, introduction] incelenebilir. Normal girdilerin harfi harfine kopyalanması ve anormal girdilerin alıntılama ile kopyalanması kullanıcı ara yüzlerinin evrensel bir özelliğidir. Ara yüzlerin geliştirilmediği durumlarda sonuçta oluşan açığı kapatmanın bir yolu sistematik olarak her alıntı kuralını başka bir teste çevirmektir. 3.4 Hatalardan Giriş Verilerine Genelleştirme Aşağıdaki açık qmail 0.90 da düzeltildi: Failure to stat.qmail-owner was not an error. Eğer Bob, ~bob/.qmail-buddies dosyasına birden fazla adres yazarsa, qmail bob-buddies e-postalarını bu adreslere gönderecektir. Ön tanımlı olarak gönderme işlemi sırasında yaşanan hatalar orijinal göndericiye iletilecektir; fakat Bob ~bob/.qmail-buddies-owner dosyasına farklı bir adres yazarsa bu durumda bilgilendirme mesajları bu adrese gönderilecektir.

14 qmail, ~bob/.qmail-buddies-owner dosyasının varlığını UNIX in stat() komutu ile kontrol eder. Eğer stat() fonksiyonu dosyanın var olduğunu söylerse qmail hataları bobbuddies-owner a yönlendirecektir. Eğer stat() fonksiyonu dosyaların var olmadığını söylerse qmail hata mesajlarını orijinal göndericiye bildirecektir. Sorun, stat() fonksiyonunun geçici bir süre için başarısız olma ihtimalidir. Örneğin;.qmail-owner dosyası o an için erişilemeyen bir ağ üzerindeki dosya sisteminde olabilir sürümünden önce, qmail bu duruma dosyanın var olmadığı durumlarla aynı işlemi yapıyordu. Bu elbette yanlış bir davranış ama qmail in böyle bir durumda yapabileceği tek doğru hareket dosyayı bir süre sonra tekrar aramaktır. Test araçlarım geçici olarak başarısız olma durumunu ele almıyordu. Genel hatalar için testler yaptım, hileli durumlar için testler yaptım ama ağ dosya sistemi hatalarıyla ilgili testler yapmamıştım doğrusu. Hataları ele alan kodlar kısım 4.2 de belirtildiği gibi ciddi şekilde azaltılabilir ancak bilgisayar sistemleri her zaman bu kodlara ihtiyaç duyar. Çok ender rastlanan hataları ele alan kodlardan nasıl kaçınabiliriz? Sadece dosya sistemiyle değil her şeyle konuşabilen (1) bütünüyle fonksiyonel bir protokol yöneticisi yazabilirsem ve (2) stat() ı bu protokole bağlayan sade bir sarmalayıcı yazabilirsem test aşamalarım daha kolaylaşır. Protokol yöneticisine kapsamlı bir test kümesi verildiğinde işi daha da kolaylaşır ve bu açığı hemen bulur. 3.5 Açıklara Karşı İlerleme Sürecini Gerçekten Ölçebilir miyiz? Genelde kullanıcı arayüzü, özelde ise açık eleme araştırmalarında bariz bir zorluk vardır. Kullanıcıların, bu durum için programcıların, arzuladıkları etkiyi meydana getirmede başarılı olmak için mümkün olduğunca az hata yapmaları gerekir. Bu durumu nasıl modelleyebiliriz? İnsan psikolojisini biz (uzmanlar hariç) nasıl modelleyebiliriz ki? İnsanların yardımı olmadan hataları nasıl bulabiliriz? Eğer birileri bir sınıf hataları bulan bir program yazabilirse bu çok müthiş olur bu programı kullanıcı arayüzüne dâhil edeceğiz ama geri kalan hataları yine bulamayacağız. Bir matematikçi olarak bu problemi biçimlendirememekten sıkıldım. Bir problemi çözebilsem de çözemesem de açıkça tanımlamayı isterim. Neyse ki araştırmalar modeller olmadan ilerleyebiliyor. İnsanların algoritmalarını bilmeden de programlarındaki açık oranını ölçmek için onları gözlemleyebiliriz. Matematiksel olarak ispatlayamasak da yazılım mühendisliğindeki bazı araçların hataya eğilimli olduğunu bazılarının da olmadığını görebiliriz.

15 4. KODLARIN ELENMESİ Bugünlerde geri zekâlı yazılım yöneticileri programcının üretkenliğini, harcadığı kod satırıyla değil de kaç satır kod yazdığıyla değerlendiriyor. Dijkstra [9, sayfa EWD962-4] Bu bölüm, kod hacminin azaltılmasıyla ilgili meta-engineering örneklerinden bahseder: kod miktarını azaltmak için programlama dilini, program yapısını, v.s. değiştirme. 3. kısımda anlatıldığı üzere bu örneklerden bazıları qmail de kullanılmış ve açık oranının düşmesi sağlanmıştır. Diğer örneklerin de daha iyisini yapabileceği gösterilmiştir. 4.1 Genel Fonksiyonların Belirlenmesi Aşağıda Sendmail in util.c dosyasının satırından başlayan bir kısmı görülüyor: if (dup2(fdv[1], 1) < 0) { syserr("%s: cannot dup2 for stdout", argv[0]); _exit(ex_oserr); } close(fdv[1]); dup2 fonksiyonu dosya tanımlayıcısını (file descriptor) bir yerden başka bir yere kopyalar. dup2()/close() çiftinin yaptığı işi Sendmail de yapan birkaç fonksiyon daha var. Yukarıdaki işi qmail de fd_move() fonksiyonu yapar ve sadece 1 yerde tanımlanıp onlarca yerde kullanılmıştır: int fd_move(int to,int from) { if (to == from) return 0; if (fd_copy(to,from) == -1) return -1; close(from); return 0; } Programcıların çoğu bu kadar küçük fonksiyonlar oluştururken pek zahmet çekmeyecektir ama dup2()/close() çiftinin yerine fd_move() fonksiyonunu 1 kez kullanmak programcıya birkaç satır kazandıracaktır. dup2()/close() ikilisinin onlarca yerde kullanıldığını düşünürsek fd_move() u tercih ettiğimizde onlarca satır kodu yazmaktan kurtulup zaman tasarrufunda bulunduğumuzu görebilirsiniz. (Bu fonksiyon aynı zamanda testler için doğal bir hedeftir.) fd_move() sadece bir örnek; aynı fayda büyük sistemlere ve çok sayıda fonksiyona ölçeklenebilir. Çoğu durumda kodları genel kullanımları sezmek için taramak yardımcı fonksiyonlar bulmanızı sağlayabilir. Ancak; zaten var olan koddan Bunu daha önce görmemiş miydim? deyip yeni bir fonksiyon çıkaracak kadar ileri gitmemelisiniz.

16 4.2 Geçici Hataları Otomaik Olarak Ele Alma qmail-local den seçilmiş aşağıdaki parçaya bakın: if (!stralloc_cats(&dtline,"\n")) temp_nomem(); stralloc_cats fonksiyonu dinamik olarak yeniden boyutlandırılmış dtline katar (string) değişkeninin önceki içeriğine yeni katarı ve bir satır sonu karakteri ekler. Maalesef bu bitiştirme işlemi belleğin dışına taşabilir. Bu durumda stralloc_cats fonksiyonu 0 döner ve qmail-local de temp_nomem() ile qmail sisteminin bu işlemi daha sonra tekrar denemesini sağlayacak şekilde sonlanır. qmail de binlerce koşullu dallanma var. Bunların hemen hemen yarısı tam olarak saymayı denemedim geçici hataları kontrol etmekten başka bir şey yapmıyor. Çoğu durumda aşağıdaki gibi, bir işlemi gerçekleştirmeyi deneyen ve geçici hataya bağlı olarak programı sonlandıran, fonksiyonlar yazdım: void outs(s) char *s; { if (substdio_puts(&ss1,s) == -1) _exit(111); } Ancak her işlem için aynı işi yapmayı tekrar etmeyi sevmedim ve sevmiyorum. Bu testlerin hepsini daha alt seviyeli bellek ayırma, disk okuma, v.s. ve programdan geçici bir hataya bağlı olarak çıkma gibi daha az sayıda fonksiyonlarla gerçekleyebilirdim. Ama bu strateji qmail-send gibi uzun süre çalışan programlar için uygun değildir. Bu programlar sistem yöneticisi izin vermediği müddetçe kendilerini sonlandıramazlar! Şunu fark ettim ki çoğu kütüphane ve dil aynı stratejiyi kullanıyor ve bu da onları uzun süreli programlarda kullanılamaz kılıyor. Belki de özel amaçlı programlar özel yazılım mühendisliği araçlarını kullanmalı ama uzun süre çalışan programları özel amaçlı olarak görmüyorum ve yazılım mühendisliği mantığını uzun süreli programlar için uygun olmadıklarından ötürü sorguluyorum. Neyse ki programlama dilleri hataları ele alırken güçlü istisna durum değerlendirmesi, otomatik hata raporları ve alt programlardan net bir şekilde çıkış gibi özelliklere sahip. Programlama dillerinde aşağıdaki ifadeyi hata kontrolü için çok fazla çaba sarf etmeden yazabilmeliyim: stralloc_cats(&dtline,"\n") Veya sadece aşağıdaki ifadeyi: dtline += "\n" Kod miktarındaki azalma açık oranını azaltacaktır. Örneğin; qmail 0.92 de düzeltilen şu hatanın meydana gelme şansı olmazdı: ipme_init() in -1 döndürmesine rağmen qmailremote çalışmaya devam ediyor.

17 qmail i yazarken birçok dili son kullanıcı için derleme ve kullanmada C den çok daha zor olduğu için reddettim. Kodu daha iyi bir dilde yazdıktan sonra bir çevirici program kullanarak dağıtım dili olarak seçtiğim C ye dönüştürmemem anlaşılmaz bir körlüktü. Stroustrup un cfront unun, C++ dan C ye derleyici, her ne kadar şu ana dek istisnaları ele alma desteği olduğunu duymasam da ilham verici bir örnek olduğunu söyleyebilirim. 4.3 Ağ Araçlarını Tekrar Kullanmak UNIX in ağ bağlantılarını dinleyen genel amaçlı inetd aracı mevcuttur. Bir bağlantı kurulduğunda inetd, bu bağlantıyı idare edecek başka bir program çalıştırır. Örneğin; inetd gelen SMTP bağlantılarını yönetmesi için qmail-smtpd yi çalıştırabilir. qmail-smtpd programının ağ, çoklu görev bölüşümü gibi konularla ilgilenmesine gerek yok. Sadece standart girişindeki bir istemciden SMTP komutlarını alır ve yanıtları standart çıktısına gönderir. Sendmail ağ bağlantılarını dinlemek için kendi kodunu kullanır. Bu kod inetd den daha karmaşıktır; çünkü sistemin yük ortalamasını takip eder ve CPU yu almak için yarış olduğu sıralarda servisleri azaltır. Sendmail neden CPU yoğun iken e-posta almayı istemiyor? Temel problem şu: Sendmail e- posta alır almaz e-postanın nereye gitmesi gerektiğini çözmek için çok fazla gayret sarf ediyor ve e-postayı göndermeyi deniyor. Eğer Sendmail e göndermesi için aynı anda çok sayıda e- posta verirseniz Sendmail hemen e-postaların tamamını göndermeye çalışacaktır ve neticede bellek taşma hatası alıp çoğunu göndermede başarısız olacaktır. İşte bu nedenden ötürü Sendmail CPU nun yük durumunu kontrol eder. Eğer CPU yoğun ise e-postaları henüz gönderilmeyenler kuyruğuna atar ve periyodik olarak kuyrukta bekleyen sıradaki e-postayı göndermeyi dener. Bu mekanizma bilgisayara kesinlikle çok fazla yük bindirmez; çünkü aynı anda ne kadar mesaj gelirse gelsin, Sendmail bu e-postalardan kuyruğu tekrar taramak istediğinde haberdar olacaktır ve bu sayede yüksek paralellikte çalışmaya devam edecektir. Sendmail, normalde kuyruğu 15 dakika ile 1 saat arasında değişen sürelerde çalıştırır. RFC 1123 ün kısmı ise bu sürenin en az 30 dakika olmasını tavsiye eder. Çok kısa zaman aralığı, örneğin 30 saniye, atayan sistem yöneticileri Sendmail in kuyruktaki her e-postayı günde yüzlerce kez göndermeye çalıştığını görür. Sendmail neden bir arka plan mekanizmasına ihtiyaç duyar? Neden gelen tüm e-postaları bir kuyruğa atmıyor? Yanıtı şu: kuyruğa atılan her e-posta CPU meşgul değilse bile hemen gönderilmez. E-postaları kuyruğa atmak mesajların gönderilmesi için kuyruğun yeniden çalıştırılması beklemek demektir. Bu nedenle kullanıcılar e-postaların gecikmesinden şikâyetçi olacaktır. qmail de kuyruğa bir e-posta atıldığında çok az miktarda ilave kod, qmail-send, ile arka plandaki e-posta gönderme mekanizması fark edilir. qmail-send programı meşgul değilse anlık olarak gelen e-postayı göndermeyi dener ve gönderemezse mantıklı bir çizelgeye göre belli aralıklarla e-postayı tekrar göndermeyi dener. Sonuç olarak arka plan e-posta gönderme mekanizması yok olur; yani qmail de arka planda e-posta göndermek şeklinde bir mekanizma yoktur. Ayrıca sistem yükünü kontrol etmek de yoktur; qmail, inetd tarafından çalıştırılmaktan dolayı mutludur.

18 Eğer sistemin yük dengesini kontrol etmek istersem bunu inetd gibi genel amaçlı bir araçla yaparım; aynı kodu her uygulama için tekrar yazmam. 4.4 Erişim Kontrollerini Tekrar Kullanma UNIX kullanmaya 20 yıl önce Ultrix ile başladım. /tmp dizinindeki bir dosyayı çalıştırması için.forward dosyasını ayarladığımı hatırlıyorum. Çıktı olarak üretilen binlerce dosyayı denetlediğimi ve Sendmail in ara sıra benimkinden farklı bir kullanıcı kimlik numarasıyla program çalıştırmasını hayretle izlediğimi hatırlıyorum. Sendmail kullanıcıların.forward dosyasını şimdi anlatacağım şekilde yönetir. Öncelikle kullanıcının.forward dosyasını okuma izninin olup olmadığı kontrol edilir.forward belki de kullanıcının okuma hakkının olmadığı gizli bir dosyaya sembolik bağlantıdır. Daha sonra bu dosyada belirtildiği şekilde gönderme komutlarını ayarlar ve programı çalıştıran kullanıcıyı, komutlardan kimin sorumlu olduğunu not eder (muhtemelen daha sonra işlenmek üzere oluşturulmuş bir kuyruk dosyası). Tüm bunları yapmak için ciddi miktarda kod kullanılıyor (örneğin; safefile.c ve çeşitli dağınık kod parçaları) ve bu kodlarda tam olarak az miktarda açık var. Elbette işletim sistemi kullanıcının bir dosyaya erişim izni olup olmadığını kontrol eden ve hareketlerini takip eden kodları var. Aynı kodu tekrar yazmak, neden? qmail bir kullanıcıya e-posta göndermek istediğinde sadece qmail-local programını doğru kullanıcı kimlik numarasıyla çalıştırır. qmail-local e-postayı göndermek için gerekli komutları çalıştırmak istediğinde işletim sistemi zaten o kullanıcının erişim haklarını kontrol eder. qmail-local kullanıcı tarafından belirtilen bir programı çalıştırmak istediğinde, işletim sistemi otomatik olarak bu programa doğru kullanıcı kimlik numarasını atayacaktır. Bu kodu tekrar kullanmak için CPU zamanında küçük bir ücret ödedim: qmail her gönderme işlemi için yeni bir süreç başlatır. Fakat Sendmail in erişim izinlerini kontrol etmek için kullandığı, fazlalık olan, hiçbir sistem çağrısını kullanmadım. Zaten birileri gerçek dünyada qmail in e-posta gönderirken yaptığı fork() çağrılarından dar boğaza girmiş bir bilgisayar gösterene kadar, bu süreyi azaltmak için fazladan kod yazmayı kesinlikle düşünmüyorum. 4.5 Dosya Sistemini Yeniden Kullanmak National Security Agency nin SMTP sunucusunun efd-friends@nsa.gov e-posta listesi için e-posta kabul ettiğini varsayalım. MTA bu e-postanın nsa.gov tarafından kabul edileceğini nasıl anlar? MTA efd-friends için e-posta gönderim komutlarını nasıl öğrenir? Açıkçası MTA nsa.gov ve efd-friends isimlerini bir veritabanında arar. Veritabanı demek doğru olmayabilir; bu işlem için belki de bir çağrışımlı dizi veya başka bir şey kullanılıyordur. İsmi her ne olursa olsun bu veritabanı, sistem yöneticisi ve e-posta liste yöneticisi tarafından efd-friends ismi sorgulandığında geriye bu isme ait bilgileri dönebilme yetisine sahiptir. Sendmail de ise nsa.gov ve çeşitli diğer yapılandırmalar daha az karışık olan bir yapılandırma dosyasında tutulur. efd-friends gibi e-posta liste isimleri takma isimler dosyasında tutulur. nsa.gov ve efd-friends gibi isimleri bu dosyalarda aramak ciddi miktarda ayrıştırma yapmayı gerektiriyor.

19 Elbette ki işletim sistemi bir isim altına yığılmış bilgileri saklayan ve daha sonra bu bilgileri geri döndüren koda sahip. Bu yığınlar dosya dır, isimleri dosya ismi dir ve koduna da dosya sistemi kodu denir. Aynı kodu tekrar yazmak, neden? qmail de efd-friends için e-posta gönderme komutları.qmail-efd-friends dosyasının içeriğidir. Bu komutları bulmak veya değiştirmek bir dosyayı açmak kadar basit bir iştir. Kullanıcılar zaten dosya oluşturma ve düzenleme araçlarına sahipken qmail in bu yazılımları tekrar keşfetmesine gerek yok. nsa.gov ile ilgili yapılandırmaları /var/qmail/control/domains/nsa.gov içerisine aynı sadelikteki kodla yazsam iyi olurdu ama biraz karışık işler yaptım: nsa.gov bir dizindeki dosyadan ziyade bir dosya satırıdır. Verimli ve hızlı çalışmak adına endişelenmiştim: çoğu UNIX dosya sistemi lineer zamanlı tecrübesiz algoritmalar kullanıyordu ve ben qmail in binlerce alan adı tutan bilgisayarlarda yavaş çalışmasını istemiyordum. UNIX dosya sistemi, aynı zamanda, küçük bir dosyayı kaydetmek için kilobyte ile ölçekli bir şeyler tüketiyordu. Geçmişe baktığımda ayrıştırma için yazdığım kodlar sadece dosya ayrıştırmak için olanlar değil, e-postaları dizinlere dağıtmak için yazdıklarım da dâhil benim aptallığımdır. Çünkü dar boğaz olarak ölçmediğim, varsayımdan ibaret performans problemleriyle ilgilenmem hataydı. Ayrıca, ölçümler gösterdiğince, dosya sistemini kullanan her programdan ziyade dosya sistemini kilitleyip problemi kaynağında adreslemeliydim (er ya da geç yoğun sitelerde yaptıkları gibi). 5. GÜVENİLEN KODLARIN AZALTILMASI 5.1 TCB nin Doğru Ölçülmesi qmail belgelerinde Tüm programlar birbiriyle uzlaşmış olduğundan davetsiz bir misafir qmaild, qmails veya qmailr hesaplarının ve e-posta kuyruğunun kontrolünü eline geçirse bile sisteminizin kontrolünü eline alamaz. demiştim. Diğer hiçbir program bu beşinin dönderdiği sonuca güvenmemektedir tarzında konuşmaya devam edip ayrıcalıkların kısıtlanması ve güvenlik hakkında faydalı konulardan bahsetmiştim. Bu konu hakkında bir süre düşünelim. qmail-remote da bir saldırganın qmailr hesabının kontrolünü eline geçirmesine izin veren bir açık olduğunu kabul edelim. Bu durumda saldırgan, ağ bağlantıları güçlü kriptografi ile korunmuş olsa bile sistemin giden e-postalarını çalabilir veya değiştirebilir. Bu bir güvenlik felaketi ve onarılması gerekiyor. qmail in bu açıktan korunmak için yaptığı tek şey açıklardan sakınmaktır. Benzer şekilde; qmail in, sahibi root olan dosyaları etkileme yeteneği olan kodlarına dikkat çekmemeliydim. qmail in neredeyse tüm kodu normal kullanıcıların dosyalarını diskte olsun e-posta sisteminde olsun etkileme yeteneğine sahip. Bu nedenle qmail in tüm kodu kullanıcıların güvenlik gereksinimlerini istismar edecek konumdadır. Bu güvenlik tehlikesinden kaçınmanın tek yolu açık vermemektir. Kelime işlemci veya müzik oynatıcı yazılımların programcıları genellikle çok fazla güvenlik endişesi taşımaz. Fakat kullanıcılar bu programların e-posta ile gelen veya internetten indirdikleri dosyaları da işlemesini bekler. Bu dosyaların bazıları kötü niyetli insanlar tarafından hazırlanmıştır ve bu dosyaları yöneten programların çoğu da saldırganların kötüye kullanabileceği açıklara sahiptir.

20 2004 te UNIX Güvenlik Açıkları dersini verirken öğrencilerden ödev olarak yeni güvenlik açıkları bulmalarını istemiştim. Öğrencilerim 44 güvenlik açığı buldu ve bunların çoğu da yanlışlıkla sistemin güvenilen kod tabanının dışında görülen programlardaydı. Örneğin; Ariel Berkman xine-lib de, film oynatma kütüphanesi, bir tampon taşırmasıyla ilgili bir açık buldu. Kullanıcılar internetten indirdikleri filmleri oynattıklarında risk altına giriyor: saldırgan, film oynarken kullanıcının dosyalarını okuyabilir ve çalıştırdığı programları takip edebilir, v.s. Güvenli işletim sistemleri ve sanal makineler güvenliklerini küçük tabanlı güvenilen kodların sağladığını söylüyor. Maalesef, olaya yakından baktığımızda bir programın birden fazla kaynak dosyasından gelen verileri idare etmeye başladığında, bahsedilen güvenliğin anlamsız hale geldiğini görüyoruz. Örneğin; işletim sistemi, e-posta okuyan bir program diğer e- postaları değiştirmeye veya çalmaya kalktığında veya bir internet tarayıcısı web sayfası çalmaya veya gelen web sayfaları değiştirmeye kalktığında bu programı durdurmak için hiçbir şey yapmıyor. E-posta okuyan ve web tarayan kodlar gerçekte aynı güvenilen kodları kullanır: bu koddaki açıklar kullanıcının güvenliğini bozar. 5.2 Tekil Kaynak Değişimlerini Yalıtma jpegtopnm programı bir JPEG dosyasını, sıkıştırılmış resim, giriş verisi olarak okur. Sıkıştırılmış resmi açar, çıktı olarak bir bitmap üretir ve sonlanır. Şu ana kadar bu program güvenilir: açıkları güvenlikle uzlaşabilir. Şimdi bunu nasıl düzeltebileceğimizi görelim. jpegtopnm programının son derece sıkı denetlenen bir alanda sadece standart girişten JPEG dosyası okumasına, sonucu standart çıkışa yazmasına ve kısıtlı bir belleği kullanmasına izin verildiğini varsayalım. Mevcut UNIX araçları root un bu alanda şunları yapmasına izin verir: RLIMIT_NOFILE sınırını 0 yaparak yeni dosya, yeni soket, v.s. oluşturulmasını yasaklar. Dosya sistemi erişimini yasaklar: boş bir dizine chdir ve chroot. Bir sürecin kimlik numarasına bir kullanıcı kimlik numarası sabitleyebilir. Bunu yapmak, diğer sistem yönetim araçları aynı kullanıcı kimlik numarası aralığından uzak durduğu müddetçe, taban kimlik numarasına sürecin kimlik numarasını eklemek kadar rahat yapılabilir. Bu kullanıcı adıyla hiçbir şeyin çalışmamasını sağlayın: setuid(targetuid), kill(-1,sigkill) ve _exit(0) komutlarını çalıştıracak bir çocuk süreç oluşturduktan sonra çocuk sürecin normal olarak sonlanıp sonlanmadığını kontrol edin. Hedef kullanıcı kimlik numarasının kullanıcı ve grup kimlik numarasını düzenleyerek kill(), ptrace(), v.s. komutların çalıştırılmasını yasaklayın. Mevcut ve maksimum RLIMIT_NPROC değerini 0 yaparak fork() çağrısını yasaklayın. Bellek ve diğer kaynaklara istediğiniz sınırları koyun. Programın geri kalanını çalıştırın. Bu aşamada işletim sisteminde çok büyük açıklar yoksa jpegtopnm programının ilk dosya tanımlayıcısından başka bir iletişim kanalı yoktur.

Hızlı Başlangıç Kılavuzu

Hızlı Başlangıç Kılavuzu Hızlı Başlangıç Kılavuzu Microsoft Access 2013 önceki sürümlerden farklı görünmektedir, dolayısıyla öğrenme eğrisini en aza indirmenize yardımcı olmak üzere bu kılavuzu hazırladık. Ekran boyutunu değiştirme

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Süreçler ve İş Parçacıkları(Thread) İşletim Sistemlerine Giriş - Ders03 1 Süreç -Tüm modern bilgisayarlarda bir çok iş aynı anda yapılabilir. *kullanıcı programları çalışır *disk

Detaylı

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı. devrim@gunduz.org

ProFTPD FTP Sunucusu. Devrim GÜNDÜZ. TR.NET Sistem Destek Uzmanı. devrim@gunduz.org Devrim GÜNDÜZ TR.NET Sistem Destek Uzmanı devrim@gunduz.org http://seminer.linux.org.tr http://belgeler.linux.org.tr http://lkd.belgeler.org http://www.linux.org.tr/belgeler.php http://www.gunduz.org/belgeler.php

Detaylı

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir:

Gereksiz Kodlar. burada if deyiminin else bölümüne gerek var mı? İfade doğruysa zaten fonksiyon geri dönüyor. Bu aşağıdakiyle tamamen eşdeğerdir: Gereksiz Kodlar Kaan Aslan 9 Temuz 1997 Kapalı spor salonu, durak yeri, taşıt aracı, en optimum, geri iade etmek, davranış biçimi Bu ifadelerde bir gariplik var, değil mi? Açık spor salonu göreniniz var

Detaylı

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari

Detaylı

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ Amaçlar 1. TCP protokolünün öğrenilmesi 2. Ağ programlamada kullanacağımız sistem komutlarının öğrenilmesi 3. Ağ programlamanın kavranması TCP ile veri alışverişi

Detaylı

BİT in Temel Bileşenleri (Yazılım-1)

BİT in Temel Bileşenleri (Yazılım-1) Ders 4 BİT in Temel Bileşenleri (Yazılım-1) BİLGİ & İLETİŞİM TEKNOLOJİLERİ 1 Yazılım, değişik ve çeşitli görevler yapma amaçlı tasarlanmış elektronik araçların, birbirleriyle haberleşebilmesini ve uyumunu

Detaylı

qmail ile SPAM engelleme Devrim Sipahi Dokuz Eylül Üniversitesi devrim.sipahi@deu.edu.tr

qmail ile SPAM engelleme Devrim Sipahi Dokuz Eylül Üniversitesi devrim.sipahi@deu.edu.tr qmail ile SPAM engelleme Devrim Sipahi Dokuz Eylül Üniversitesi devrim.sipahi@deu.edu.tr Üniversitelerde kullanılan mail sisteminin iki belirgin özelliği vardır. 1. Çok sayıda kullanıcı (örneğin 10000)

Detaylı

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir 3 İPLİKLER Giriş geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel

Detaylı

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler C# Programlama Dili İlk programımız Tür dönüşümü Yorum ekleme Operatörler 1 İlk Programımız Bu program konsol ekranına Merhaba dünya! yazıp kapanır. Programı geçen derste anlatıldığı gibi derleyin, sonra

Detaylı

Sadece 2 İstekle MySQL Blind SQL Injection. Canberk BOLAT canberk.bolat[-at-]gmail[-dot-]com

Sadece 2 İstekle MySQL Blind SQL Injection. Canberk BOLAT canberk.bolat[-at-]gmail[-dot-]com Sadece 2 İstekle MySQL Blind SQL Injection Canberk BOLAT canberk.bolat[-at-]gmail[-dot-]com 0x01 Giriş Bu yazı blind sql injection saldırılarında tek bir karakter için minimum istek ile doğru sonuca varabilmek

Detaylı

dinamo / Periyodik İşler

dinamo / Periyodik İşler 1 Periyodik İşler dinamo / Periyodik İşler 2 Periyodik İşler Genel Tanım Periyodik İşler Nedir? Periyodik işler, kullanıcılar tarafından belirlenmiş olan rapor ve makroları yine kullanıcılar tarafından

Detaylı

Usta Aritmetik Bayi Kontrol Programı Kullanım Kılavuzu (V.1.3.0)

Usta Aritmetik Bayi Kontrol Programı Kullanım Kılavuzu (V.1.3.0) Usta Aritmetik Bayi Kontrol Programı Kullanım Kılavuzu (V.1.3.0) A. Öğretmen Girişi a b c d B. Ana Menü a. Kullanıcı bilgisi : Bu alana yazılacak bilgiyi size Usta Aritmetik firması sağlamaktadır. b. Şifre

Detaylı

Genel Programlama II

Genel Programlama II Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri

Detaylı

BLGM 344 DENEY 3 * AĞ PROGRAMLAMAYA GİRİŞ

BLGM 344 DENEY 3 * AĞ PROGRAMLAMAYA GİRİŞ BLGM 344 DENEY 3 * AĞ PROGRAMLAMAYA GİRİŞ Amaçlar 1. TCP protokolünün öğrenilmesi 2. Ağ programlamada kullanacağımız sistem komutlarının öğrenilmesi 3. Ağ programlamanın kavranması TCP ile veri alışverişi

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Kodlarına Yorum Satırı Eklemek Java Paket Kavramı Java Kütüphane Kavramı Konsoldan Veri Çıkışı ve JOPtionPane Kütüphanesi JOptionPane Kütüphanesi Kullanarak

Detaylı

Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir?

Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir? 2.1.1. PROGRAMLAMA NEDIR? Programlama Nedir? Bir bilgisayar bilimcisi gibi düşünmek ve programlama ne demektir? Bu düşünme şekli matematiğin, mühendisliğin ve doğa bilimlerinin bazı özelliklerini birleştirmektedir.

Detaylı

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir.

2) Hesabınıza Giriş yaptıktan sonra aşağıdaki ekran karşınıza gelir. MEB.K12.TR Uzantılı E-Posta Hesabının Kullanımı 1) http://mail.meb.k12.tr internet adresinden e-posta hesabına giriş yapılır. Kullanıcı Adı : KURUM KODUNUZ (meb.k12.tr kısmını yazmayınız.) Şifre : Hesabınıza

Detaylı

AĞ HİZMETLERİ. Öğr.Gör.Volkan ALTINTAŞ. Version 4.0

AĞ HİZMETLERİ. Öğr.Gör.Volkan ALTINTAŞ. Version 4.0 AĞ HİZMETLERİ Öğr.Gör.Volkan ALTINTAŞ Version 4.0 İSTEMCİ SUNUCU İLİŞKİSİ İnsanlar her gün başkalarıyla iletişim kurmak ve rutin görevlerini yerine getirmek için ağ ve İnternet üzerinden sağlanan hizmetleri

Detaylı

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir.

Toplama işlemi için bir ikili operatör olan artı işareti aynı zamanda tekli operatör olarak da kullanılabilir. www.csharpturk.net Türkiye nin C# Okulu Yazar Yunus Özen Eposta yunus@yunus.gen.tr Tarih 08.04.2006 Web http://www.yunusgen.tr ARİTMETİK OPERATÖRLER VE KULLANIM ŞEKİLLERİ Bilgisayarlar yapıları gereği,

Detaylı

1.1. Yazılım Geliştirme Süreci

1.1. Yazılım Geliştirme Süreci Kazanımlar Bu bolümde; Yazılım geliştirme sureci konusunda bilgi sahibi olacak, Yazılım geliştirme surecinde gerekli olan araçları tanıyacak, Python dilinde program geliştirme ortamlarını inceleyebileceksiniz.

Detaylı

PHP ile İnternet Programlama

PHP ile İnternet Programlama PHP ile İnternet Programlama Doç.Dr. Gazi Üniversitesi Gazi Eğitim Fakültesi Bilgisayar ve Öğretim Teknolojileri Eğitimi Bölümü 1. BÖLÜM: Bilgisayarımızı PHP ye Hazırlamak PHP Yorumlayıcısı ve Sunucu Yazılımı

Detaylı

Bilgisayarda Programlama. Temel Kavramlar

Bilgisayarda Programlama. Temel Kavramlar Bilgisayarda Programlama Temel Kavramlar KAVRAMLAR Programlama, yaşadığımız gerçek dünyadaki problemlere ilişkin çözümlerin bilgisayarın anlayabileceği bir biçime dönüştürülmesi / ifade edilmesidir. Bunu

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Giriş Bilgisayar İşletim Sistemleri BLG 312 İplikler geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü vardır bazı durumlarda, aynı adres uzayında birden fazla akış kontrolü

Detaylı

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti Bu sayfaları okuduğunuza göre bir şekilde bilgisayarlar ve bilgisayar ağlarıyla ilişkiniz olduğunu biliyorum. Ancak yine de en başta niçin bilgisayar ağı kullanıyoruz sorusunun cevabını vermekle işe başlayabiliriz.

Detaylı

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur. Dosya Sistemi ve Çalışma Mantığı Dosya Sistemi Disk üzerindeki dosyaların düzenlenmesini ve bir işletim sisteminde dosyaların izlerinin bulunmasını sağlayan yapıya Dosya Sistemi (File System) denir. Linux

Detaylı

Pardus. S.Çağlar Onur, caglar@pardus.org.tr. 21 Aralık 2006. Pardus Projesi [TÜBİTAK / UEKAE] Linux Kullanıcıları Derneği

Pardus. S.Çağlar Onur, caglar@pardus.org.tr. 21 Aralık 2006. Pardus Projesi [TÜBİTAK / UEKAE] Linux Kullanıcıları Derneği Yenilikleri Projesi [TÜBİTAK / UEKAE] Linux Kullanıcıları Derneği 21 Aralık 2006 Yenilikleri İçerik 1 Neden? Nasıl? 2 Yenilikleri man 3 Yenilikleri Neden? Nasıl? 1 Neden? Nasıl? 2 Yenilikleri man 3 Yenilikleri

Detaylı

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var. Giriş 3 İPLİKLER geleneksel işletim sistemlerinde her in özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel ler gibi

Detaylı

Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş. Internet Protokolleri ve Ağ Uygulamaları. Internet Protokolleri Üzerinden İletişim

Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş. Internet Protokolleri ve Ağ Uygulamaları. Internet Protokolleri Üzerinden İletişim Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş Kaynak : Douglas E. Comer, Computer Networks and Internets With Internet Applications, 4. Baskı, 2004, Prentice Hall Hazırlayan : Tacettin

Detaylı

Yeni Nesil Ağ Güvenliği

Yeni Nesil Ağ Güvenliği Yeni Nesil Ağ Güvenliği Ders 6 Mehmet Demirci 1 Bugün Taşıma katmanı güvenliği (TLS, SSL) İnternet katmanı güvenliği (IPSec) Kablosuz bağlantı güvenliği Güvenlik duvarları 2 SSL/TLS SSL ilk olarak Netscape

Detaylı

İNTERNET PROGRAMCILIĞI 2 10. HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

İNTERNET PROGRAMCILIĞI 2 10. HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir. İNTERNET PROGRAMCILIĞI 2 10. HAFTA İçindekiler MYSQL - PHPMYADMIN Mysql Nedir PhpMyAdmin Nedir PhpMyAdmin Arayüzü Hedefler Mysql' in görevini söyleyebilir PhpMyAdmin' in kullanım amacını söyler Hazırlayan

Detaylı

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir. DİZİLER/ARRAY: Dizi yi çeşitli şekillerde tanımlamak mümkün. Dizi içlerinde birden fazla değer saklayabilen veri kümeleridir diye tanımlarsak uygun olur sanırım. Diziler yan yana dizilmiş kutucuklar olarak

Detaylı

Akademik Dünyada Özgür Yazılım. Akademik Dünyada. Onur Tolga Şehitoğlu 10-02-2007

Akademik Dünyada Özgür Yazılım. Akademik Dünyada. Onur Tolga Şehitoğlu 10-02-2007 Akademik Dünyada Özgür Yazılım Onur Tolga Şehitoğlu 10-02-2007 1 Özgür Yazılım Nedir? Neden Özgür Yazılım? 2 Masaüstü İşletim Sistemi Ofis Uygulamaları 3 Görüntüleme 4 Bilimsel Araçlar Octave SciLab R

Detaylı

Güvenlik Araçları. Savunmadan çok saldırı ya yönelik araçlar. Amaç, saldırganlardan önce sistemdeki açıkları ortaya çıkarıp gereken önlemleri almak.

Güvenlik Araçları. Savunmadan çok saldırı ya yönelik araçlar. Amaç, saldırganlardan önce sistemdeki açıkları ortaya çıkarıp gereken önlemleri almak. Güvenlik Araçları Savunmadan çok saldırı ya yönelik araçlar. Amaç, saldırganlardan önce sistemdeki açıkları ortaya çıkarıp gereken önlemleri almak. 1/ 26 Nmap Network Mapper Ağ araştırması ve güvenlik

Detaylı

BÖLÜM 3 OPERAT A ÖRLER - 19 -

BÖLÜM 3 OPERAT A ÖRLER - 19 - BÖLÜM 3 OPERATÖRLER - 19 - 3.1 Operatörler Hakkında Yukarıdaki örnekleri birlikte yaptıysak = işaretini bol bol kullandık ve böylece PHP'nin birçok operatöründen biriyle tanıştık. Buna PHP dilinde "atama

Detaylı

C# ile e-posta Göndermek

C# ile e-posta Göndermek Kemal Demir http://kemal.csharpturk.net kemal@csharpturk.net C# ile e-posta Göndermek 25.12.2006 Web sitemizin üyelerine ya da adreslerini bir yerde biriktirdiğimiz arkadaşlarımıza toplu olarak eposta

Detaylı

Küme Bilgisayarlarda PBS Kuyruk Sistemi

Küme Bilgisayarlarda PBS Kuyruk Sistemi Küme Bilgisayarlarda PBS Kuyruk Sistemi Aslı Zengin asli@ulakbim.gov.tr Ankara, Ekim 2007 www.grid.org.tr İÇERİK Küme Bilgisayar Bileşenleri Küme Bilgisayar Kuyruk Sistemi PBS Kuyruk Sistemi Özellikleri

Detaylı

Özgür Yazılımlar ile Kablosuz Ağ Denetimi

Özgür Yazılımlar ile Kablosuz Ağ Denetimi Özgür Yazılımlar ile Kablosuz Ağ Denetimi Fatih Özavcı fatih.ozavci@gamasec.net Afşin Taşkıran afsin.taskiran@avea.com.tr Konular Kablosuz Ağ Güvenliği Kablosuz Ağ Güvenlik Denetim Süreci Denetim Kapsamının

Detaylı

General myzyxel.com myzyxel.com Servis Yönetim Servis Name Content Filter Name Password myzyxel.com Submit Redirected URL

General myzyxel.com myzyxel.com Servis Yönetim Servis Name Content Filter Name Password myzyxel.com Submit Redirected URL ZyWALL-70 Content Filter General 1- Content Filter uygulamasını etkinleştirmek için kutucuğu doldurunuz 2- Content Filter uygulamasının ZyWall cihazını gateway olarak gören VPN tünelleri için de geçerli

Detaylı

Turquaz. Açık kodlu muhasebe yazılımı http://www.turquaz.com. Turquaz Proje Grubu

Turquaz. Açık kodlu muhasebe yazılımı http://www.turquaz.com. Turquaz Proje Grubu Turquaz Açık kodlu muhasebe yazılımı http://www.turquaz.com Turquaz Proje Grubu Konu Başlıkları 1. Turquaz Proje Grubu 2. Programın fikri 3. Geliştirme aşaması 4. Programın içeriği 5. Yapılacaklar 6. Dizayn

Detaylı

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri

U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları. IPera İletişim Teknolojileri U y g u l a m a A i l e s i (Abakus 360, T-Panel, T-CRM) Tarayıcı Ayarları Başlarken İletişim yönetimi için gerekli tüm araçları sunan OfisTelefonu 07 programları Abakus 360, T-Panel ve T-CRM, bir kuruluştaki

Detaylı

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ. hakanyilmaz@karabuk.edu.tr 1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II Öğr.Gör. Hakan YILMAZ hakanyilmaz@karabuk.edu.tr Karabük Üniversitesi Uzaktan Eğitim Uygulama ve AraştırmaMerkezi 2 İçindekiler 1. GİRİŞ... 3 1.1 ASP NEDİR?...

Detaylı

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır.

Basit Mimari, Katmanlı Mimari ve doğrudan çalıştırma olarak üçe ayrılır. Yazılım Mimarisi 1.Yazılım Mimarisi Nedir? Yazılım mimarisi geliştirilen uygumaların maliyetlerinin azaltılmasında önemli bir yer tutar. Örneğin MVC modeli kullanarak bir uygulama geliştiriyoruz ve arayüz

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Servlet Üst Düzey Programlama-ders01/ 1 Servlet Nedir? Web sayfaları ilk başlarda durağan bir yapıya sahipti ve kullanıcıdan bilgi alarak işlemler yapmıyordu. Zamanın geçmesiyle kullanıcıya

Detaylı

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları.

Script. Statik Sayfa. Dinamik Sayfa. Dinamik Web Sitelerinin Avantajları. İçerik Yönetim Sistemi. PHP Nedir? Avantajları. Script Statik Sayfa Dinamik Sayfa Dinamik Web Sitelerinin Avantajları İçerik Yönetim Sistemi PHP Nedir? Avantajları Dezavantajları Script HTML kodları arasına yerleştirilen küçük kodlardır. Web sayfalarında

Detaylı

ELN1001 BİLGİSAYAR PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I ELN1001 BİLGİSAYAR PROGRAMLAMA I DEPOLAMA SINIFLARI DEĞİŞKEN MENZİLLERİ YİNELEMELİ FONKSİYONLAR Depolama Sınıfları Tanıtıcılar için şu ana kadar görülmüş olan özellikler: Ad Tip Boyut Değer Bunlara ilave

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;

Detaylı

(... GÜÇLÜ KORUMA, DÜŞÜK SİSTEM KAYNAĞI KULLANIMI...)

(... GÜÇLÜ KORUMA, DÜŞÜK SİSTEM KAYNAĞI KULLANIMI...) (... GÜÇLÜ KORUMA, DÜŞÜK SİSTEM KAYNAĞI KULLANIMI...) Programın Özellikleri; En son online tehditlere karşı korunun Endişelenmeden e-posta alıp gönderin, sohbet edin ve web'de gezinin - Norton İtibar Hizmeti:

Detaylı

Bilgi Güvenliği Eğitim/Öğretimi

Bilgi Güvenliği Eğitim/Öğretimi Bilgi Güvenliği Eğitim/Öğretimi İbrahim SOĞUKPINAR Gebze Yüksek Teknoloji Enstitüsü İçerik Bilgi Güvenliği Eğitim/Öğretimi Dünyadaki Örnekler Türkiye deki Örnekler GYTE de Bilgi Güvenliği Dersi Sonuç ve

Detaylı

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1

Öğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1 Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi 2. BÖLÜM 2 PROGRAMLAMAYA GİRİŞ Programlama Terimleri ve Programlama Ortamı 3 Program Programlama IDE

Detaylı

Yazılım Mühendisliği 1

Yazılım Mühendisliği 1 Yazılım Mühendisliği 1 HEDEFLER Yazılım, program ve algoritma kavramları anlar. Yazılım ve donanım maliyetlerinin zamansal değişimlerini ve nedenleri hakkında yorum yapar. Yazılım mühendisliği ile Bilgisayar

Detaylı

Temel Bilgisayar Programlama

Temel Bilgisayar Programlama BÖLÜM 11: : Birçok programda, bazı verilerin disk üzerinde saklanmasına gerek duyulur. Bütün programlama dillerinde, sabit disk sürücüsü (Hard Disk Drive, HDD) üzerindeki verileri okumak veya diske veri

Detaylı

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; 1. Performans: İşletim sistemi, makine

Detaylı

Kaspersky Open Space Security: Release 2. İşletmeniz için birinci sınıf bir BT güvenliği çözümü

Kaspersky Open Space Security: Release 2. İşletmeniz için birinci sınıf bir BT güvenliği çözümü Kaspersky Open Space Security: Release 2 İşletmeniz için birinci sınıf bir BT güvenliği çözümü Güncellenmiş uygulamalar Updated applications Release 2 uygulamaları: Kaspersky Anti-virus for Windows Workstations

Detaylı

Uludağ Projesi, İlk Adımlar (Kalite Takımı)

Uludağ Projesi, İlk Adımlar (Kalite Takımı) Uludağ Projesi, İlk Adımlar (Kalite Takımı) A. Murat Eren (meren@uludag.org.tr) 16 Mart 2005 Özet Bu belgede Uludağ Projesi Kalite Takımı nın amacından, nasıl bu takımın bir üyesi olunabileceğinden bahsedilmeye

Detaylı

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan, gokhan@enderunix.org

MODSECURITY DENETİM KAYITLARINI ANLAMAK. Gökhan Alkan, gokhan@enderunix.org MODSECURITY DENETİM KAYITLARINI ANLAMAK Gökhan Alkan, gokhan@enderunix.org 1 İÇİNDEKİLER MODSECURITY DENETİM KAYITLARINI ANLAMAK... 1 1. ModSecurity Nedir?... 3 2. ModSecurity Nasıl Çalışır?... 3 3. ModSecurity

Detaylı

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU

ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU ÇANKAYA ÜNİVERSİTESİ WEBMAIL KULLANIM KLAVUZU Üniversitemiz Webmail servisi yenilenmiş olup Roundcube webmail üzerinden servis vermeye başlamıştır. Daha önce kullanılan SquirrelMail servisi https://oldwebmail.cankaya.edu.tr/

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

Yetersiz Şifre Politikasının Sonuçları

Yetersiz Şifre Politikasının Sonuçları Yetersiz Şifre Politikasının Sonuçları Bünyamin Demir, Aralık 2009, WGT E-Dergi 3. Sayı Yazıya başlamadan önce değerli okura amacımı -iyi anlatmak- maksadıyla şu notları düşmek istiyorum; Aşağıda göreceğiniz

Detaylı

SMTP Protokolü ve Spam Mail Problemi

SMTP Protokolü ve Spam Mail Problemi SMTP Protokolü ve Spam Mail Problemi M. Erkan YÜKSEL, Şafak Durukan ODABAŞI İstanbul Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bu çalışmada, Özet Antispam/antivirüs programı filtresinden

Detaylı

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu. Javascript Html sayfalarının içine yazılarak, sayfayı daha etkileşimli hale getirir. click olayları, uyarı mesajları gibi hareketlerle sayfayı daha dinamik hale getirir. Javascript olmadan yazılan html

Detaylı

Yazılım Mühendisliği Bölüm - 3 Planlama

Yazılım Mühendisliği Bölüm - 3 Planlama 1 Yazılım Mühendisliği Bölüm - 3 Planlama 2 3 4 Planlama 5 Yazılım geliştirme sürecinin ilk aşaması Başarılı bir proje geliştirebilmek için projenin tüm resminin çıkarılması işlemi Proje planlama aşamasında

Detaylı

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 10. LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ Ders 10 LINUX OS (Programlama) BİLGİ & İLETİŞİM TEKNOLOJİLERİ GENEL BAKIŞ LINUX de Programlama LINUX işletim sistemi zengin bir programlama ortamı sağlar. Kullanıcılara sistemi geliştirme olanağı sağlar.

Detaylı

PHP 1. Hafta 2.Sunum

PHP 1. Hafta 2.Sunum PHP 1. Hafta 2.Sunum Hello World Bu derste görülecekler WAMP ve PHP Hosting kavramı ve bizi neden ilgilendirmediği Domain ve localhost kavramları www klasörü İlk PHP kodunun

Detaylı

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ Dersin Adı Kodu Sınıf / Y.Y. Ders Saati (T+U+L) Kredi AKTS PROGRAMLAMA BG-213 2/1 2+0+2 2+1 5 Dersin Dili : TÜRKÇE Dersin Seviyesi : LİSANS

Detaylı

Spring Giriş Eğitimi

Spring Giriş Eğitimi Spring Giriş Eğitimi Bu eğitimde Spring ın hangi problemlere karşı etkili olduğundan bahsedeceğim. Ayrıca çekirdek Spring teknolojisinin nasıl işlediği; Dependency Injection - DI ve Inversion of Contol

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş İşletim Sistemleri ve Donanım İşletim Sistemlerine Giriş/ Ders01 1 İşletim Sistemi? Yazılım olmadan bir bilgisayar METAL yığınıdır. Yazılım bilgiyi saklayabilir, işleyebilir

Detaylı

Cookie s. Elbistan Meslek Yüksek Okulu 2013 2014 Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 17 Ara 2013

Cookie s. Elbistan Meslek Yüksek Okulu 2013 2014 Güz Yarıyılı. Öğr. Gör. Murat KEÇECĠOĞLU. 17 Ara 2013 Cookie s Elbistan Meslek Yüksek Okulu 2013 2014 Güz Yarıyılı 17 Ara 2013 Öğr. Gör. Murat KEÇECĠOĞLU Çerezler ziyaretçinin bilgisayarına bilgi bırakmak için kullanılan kodlara çerezler denir. Çerezler ziyaretçinin

Detaylı

TÜBİTAK UEKAE ULUSAL ELEKTRONİK ve KRİPTOLOJİ ARAŞTIRMA ENSTİTÜSÜ

TÜBİTAK UEKAE ULUSAL ELEKTRONİK ve KRİPTOLOJİ ARAŞTIRMA ENSTİTÜSÜ TÜBİTAK UEKAE ULUSAL ELEKTRONİK ve KRİPTOLOJİ ARAŞTIRMA ENSTİTÜSÜ GÜVENLİ KURUMSAL MESAJLAŞMA UYGULAMASI Ulusal Elektronik İmza Sempozyumu, 7-8 Aralık 2006 İsmail GÜNEŞ E-posta:ismail@uekae.tubitak.gov.tr

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Giriş Fonksiyonlara Genel Bakış C

Detaylı

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

Temel Linux Eğitimi 1., 2. ve 3. Bölümler Süha TUNA Bilişim Enstitüsü UHeM Yaz Çalıştayı - 11.06.2012 İçerik 1. Linux, Kavramlar ve Dizin Yapısı 2. Temel Linux Komutları 3. Sunucuya Uzaktan Bağlanma 1. Linux, Kavramlar ve Dizin Yapısı Linux Linux,

Detaylı

MİLLİ EĞİTİM BAKANLIĞI YENİ EPOSTA SİSTEMİ HAKKINDA MEB

MİLLİ EĞİTİM BAKANLIĞI YENİ EPOSTA SİSTEMİ HAKKINDA MEB İçindekiler MİLLİ EĞİTİM BAKANLIĞI YENİ EPOSTA SİSTEMİ HAKKINDA... 3 MEB Yeni E-posta Sistemi Kullanım Detayları;... 4 MEBBİS ile Giriş... 5 E-posta Şifresi İle Giriş... 6 Şifre Hatırlatma Ekranında Karşılaşılan

Detaylı

Bilgi Güvenliği Farkındalık Eğitimi

Bilgi Güvenliği Farkındalık Eğitimi NECMETTİN ERBAKAN Ü N İ V E R S İ T E S İ Meram Tıp Fakültesi Hastanesi Bilgi Güvenliği Farkındalık Eğitimi Ali ALAN Necmettin Erbakan Üniversitesi Meram Tıp Fakültesi Hastanesi Bilgi İşlem Merkezi 444

Detaylı

Dünyada Veri Kaçağı ve Veri Kaçağı Önleme (DLP) Sistemleri Tahsin TÜRKÖZ Bilişim Sistemleri Güvenliği Grubu

Dünyada Veri Kaçağı ve Veri Kaçağı Önleme (DLP) Sistemleri Tahsin TÜRKÖZ Bilişim Sistemleri Güvenliği Grubu Dünyada Veri Kaçağı ve Veri Kaçağı Önleme (DLP) Sistemleri Tahsin TÜRKÖZ Bilişim Sistemleri Güvenliği Grubu Mart, 2010 İçerik Veri Kaçağı Önleme Nedir? Dünyada ve Türkiye de Veri Kaçağı Teknoloji Ne Durumda?

Detaylı

Kurulum ve Başlangıç Kılavuzu. DataPage+ 2012 için

Kurulum ve Başlangıç Kılavuzu. DataPage+ 2012 için DataPage+ 2012 için Son Güncelleme: 29 Ağustos 2012 İçindekiler Tablosu Önkoşul Olan Bileşenleri Yükleme... 1 Genel Bakış... 1 Adım 1: Setup.exe'yi Çalıştırın ve Sihirbazı Başlatın... 1 Adım 2: Lisans

Detaylı

Kurumsal Güvenlik ve Web Filtreleme

Kurumsal Güvenlik ve Web Filtreleme S a y f a 1 antikor Kurumsal Güvenlik ve Web Filtreleme SshClient, Putty v.s. S a y f a 2 S a y f a 3 S a y f a 4 S a y f a 5 S a y f a 6 S a y f a 7 şeklini alır. Bu durumda kullanıcı yasaklı konumdadır.

Detaylı

KUANTUM KRĠPTOGRAFĠ ĠTÜ BĠDB AĞ GRUBU/TANER KOÇ

KUANTUM KRĠPTOGRAFĠ ĠTÜ BĠDB AĞ GRUBU/TANER KOÇ KUANTUM KRĠPTOGRAFĠ ĠTÜ BĠDB AĞ GRUBU/TANER KOÇ Kriptoloji, kriptosistem ya da şifre adı verilen bir algoritma kullanılarak bir mesajın sadece anahtar olarak bilinen ek bilgilerle birleştirilip okunmasının

Detaylı

Özyineleme (Recursion)

Özyineleme (Recursion) C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,

Detaylı

İnternet Uygulamaları. FATİH Projesi PARDUS Temel Eğitim Kursu

İnternet Uygulamaları. FATİH Projesi PARDUS Temel Eğitim Kursu İnternet Uygulamaları FATİH Projesi PARDUS Temel Eğitim Kursu İnternet Uygulamaları İnternet tarayıcı programları Günümüz bilgisayar kullanıcılarının bilgisayar başında en çok vakit harcadıkları internet

Detaylı

BIND ile DNS Sunucu Kurulumu

BIND ile DNS Sunucu Kurulumu BIND ile DNS Sunucu Kurulumu BIND Nedir? BIND bir dns sunucusu yani unix ve linux sistemler üzerinde dns servis hizmetini veren başarılı bir daemondur. Kısacası en popüler DNS sunucu yazılımı BIND dir.

Detaylı

Connection Manager Kullanım Kılavuzu

Connection Manager Kullanım Kılavuzu Connection Manager Kullanım Kılavuzu Baskı 1.0 2 İçindekiler Bağlantı yöneticisi uygulaması hakkında 3 Başlarken 3 Bağlantı yöneticisi uygulamasını açma 3 Geçerli bağlantı durumunu görüntüleme 3 Uygulama

Detaylı

Değerli Datasoft Kullanıcısı;

Değerli Datasoft Kullanıcısı; Değerli Datasoft Kullanıcısı; Datasoft Yazılım, Genel Muhasebe, İşletme Defteri ve BBS (Bürü Bilgi Sistemi) Serbest Meslek Defteri Programları Beyannameler bölümümden çalışan; beyanname paketlerini gönderme,

Detaylı

Pardus. A. Murat Eren, 25 Mart Pardus Geliştiricisi. Pardus Yenilikleri Sık Sorulan Sorular

Pardus. A. Murat Eren, 25 Mart Pardus Geliştiricisi. Pardus Yenilikleri Sık Sorulan Sorular Pardus A. Murat Eren, meren@pardus.org.tr Pardus Geliştiricisi 25 Mart 2007 İçerik 1 Neden? Nasıl? 2 3 Neden? Nasıl? 1 Neden? Nasıl? 2 3 Neden? Nasıl? Neden? Ana sözleşme Pardus, UEKAE tarafından, bilişim

Detaylı

Prensipler Çoklu ortam uygulamalarının sınıflandırılması Uygulamaların ihtiyaç duyacağı ağ servislerini belirlemek Uygulamaların gerçek zamanlı

Prensipler Çoklu ortam uygulamalarının sınıflandırılması Uygulamaların ihtiyaç duyacağı ağ servislerini belirlemek Uygulamaların gerçek zamanlı İrfan Köprücü Prensipler Çoklu ortam uygulamalarının sınıflandırılması Uygulamaların ihtiyaç duyacağı ağ servislerini belirlemek Uygulamaların gerçek zamanlı olmasından dolayı ayrılan yüksek önceliklerden

Detaylı

1 Temel Kavramlar. Veritabanı 1

1 Temel Kavramlar. Veritabanı 1 1 Temel Kavramlar Veritabanı 1 Veri Saklama Gerekliliği Bilgisayarların ilk bulunduğu yıllardan itibaren veri saklama tüm kurum ve kuruluşlarda kullanılmaktadır. Veri saklamada kullanılan yöntemler; Geleneksel

Detaylı

TeraStation 3000/4000/5000/7000 ile Replikasyon. Buffalo Technology

TeraStation 3000/4000/5000/7000 ile Replikasyon. Buffalo Technology TeraStation 3000/4000/5000/7000 ile Replikasyon Buffalo Technology Giriş Replikasyon, bir klasörü iki ayrı TeraStation da neredeyse gerçek zamanlı senkronize etmeye denir. Çift yönlü çalışmaz; yalnızca

Detaylı

McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0

McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0 Sürüm Notları McAfee epolicy Orchestrator Pre-Installation Auditor 2.0.0 McAfee epolicy Orchestrator ile birlikte kullanım içindir İçindekiler Bu sürüm hakkında Yeni özellikler Geliştirmeler Çözülen sorunlar

Detaylı

Mikroişlemcilerde Aritmetik

Mikroişlemcilerde Aritmetik Mikroişlemcilerde Aritmetik Mikroişlemcide Matematiksel Modelleme Mikroişlemcilerde aritmetik işlemler (toplama, çıkarma, çarpma ve bölme) bu iş için tasarlanmış bütünleşik devrelerle yapılır. Bilindiği

Detaylı

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler:

İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler: İÇERİK YÖNETİM SİSTEMİ (CMS) Bir web sitesi yayınlamak için yapılması gerekenler: Yer satın alınır. İsim tescil ettirilir. Ftp ile wordpress klasörü upload edilir. Kendi bilgisayarımızda web sitesi yayınlamak

Detaylı

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1 BMT 101 Algoritma ve Programlama I 11. Hafta Yük. Müh. Köksal Gündoğdu 1 C++ Fonksiyonlar Yük. Müh. Köksal Gündoğdu 2 C++ Hazır Fonksiyonlar Yük. Müh. Köksal Gündoğdu 3 C++ Hazır Fonksiyonlar 1. Matematiksel

Detaylı

Kurulum ve Başlangıç Kılavuzu. DataPage+ 2013 için

Kurulum ve Başlangıç Kılavuzu. DataPage+ 2013 için DataPage+ 2013 için En Son Güncellenme Tarihi: 25 Temmuz 2013 İçindekiler Tablosu Önkoşul Olan Bileşenleri Yükleme... 1 Genel Bakış... 1 Adım 1: Setup.exe'yi Çalıştırın ve Sihirbazı Başlatın... 1 Adım

Detaylı

Sisteminiz Artık Daha Güvenli ve Sorunsuz...

Sisteminiz Artık Daha Güvenli ve Sorunsuz... Sisteminiz Artık Daha Güvenli ve Sorunsuz... Asistek Firewall kullanmanın pek çok yararı vardır: Asistek Firewall, tamamen web tabanlı ve esnek yapıya sahip Güvenlik Duvarı servislerini barındırarak çeşitli

Detaylı

1) İlk olarak oluşturduğumuz filtre adı yazılır. (örneğin tatil mesajı, taşı vb gibi.) 2) Sonra filtre için kural belirlenir.

1) İlk olarak oluşturduğumuz filtre adı yazılır. (örneğin tatil mesajı, taşı vb gibi.) 2) Sonra filtre için kural belirlenir. ROUNDCUBE FİLTRELER Roundcube e-posta sisteminde tatil mesajı, otomatik cevaplama ayarlamalarını yapabileceğiniz, gönderici / alıcı / konu ve postalara dayalı seçenekler ile filtre oluşturabileceğiniz

Detaylı

KOD PARÇACIKLARI 1 / 5

KOD PARÇACIKLARI 1 / 5 KOD PARÇACIKLARI 1 / 5 Kod Parçacıkları (CodeSnipet) Kod parçacıkları paneli animasyon yazılımının beşinci versiyonunda gelmiş bir yeniliktir. Kod yazmak yerine panelden ilgili kodu seçip çift tıklamak

Detaylı

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir.

Üst düzey dillerden biri ile yazılmış olan bir programı, makine diline çeviren programa derleyici denir. C++ da böyle bir derleyicidir. İST 205 Bilgisayar Programlama III C Programlamaya Giriş ve Matematiksel-İstatistiksel Uygulamalar Y.Doç.Dr. Levent Özbek Ankara Üniversitesi Fen Fakültesi İstatistik Bölümü Tel: 0.312.2126720/1420 ozbek@science.ankara.edu.tr

Detaylı

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir. Eş zamanlı Scream! kullanımı Scream!, sismik ağın güçlü bir parçası olacak şekilde tasarlanmıştır. Varsayılan yapılandırma dosyası scream.ini dir ve ilk kullanım sırasında kendini otomatik olarak oluşturur.

Detaylı

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I ALGORİTMA VE PROGRAMLAMA I YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Genel Bakış 2 Giriş Fonksiyonlara Genel Bakış C ve Fonksiyonlar Fonksiyon Tanımı 8. BÖLÜM 3 Fonksiyonlar

Detaylı