Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Bu makalenin sağlandığı diller : İngilizceFransızca   Turkce
[Yazarın fotoğrafı]
yazan: Atıf Gaffar

Yazar hakkında:

Atıf'ın on parmağında on marifet vardır. İşini bitirebilmek için Sistem Yöneticiliğinden tutun da programcılığa, öğretmenlikten tutun da proje müdürlüğüne kadar gereken ne kadar görev varsa hepsini yerine getirir.
Şu anda 4unet te İnternet Geliştirme Müdürü olarak çalışıyor ve kiralamak üzere yetenekli kişiler arıyor.
Kendisi hakkında daha fazla bilgiyi onun anasayfasında bulabilirsiniz

İçindekiler:

Açık kodlu yazılımlarla bölünebilir ISS ler geliştirme

Çeviri : Mustafa Azam Sezer

ispman

Özet:

Son makalemde size Linux altında LDAP kullanmayı anlatmıştım. LDAP'nin açık kaynaklı bir programla nasıl birleşip bir ileti veya bir sunucu sistemi yapabildiğini merak eden insanlardan bir çok soru aldım.

Bu Makalede Linux ve LDAP tabanlı bölünebilir bir ISS servisi kuracağız. Bu servis bir çok önemli noktaya ve sorulan bir çok konuya açıklık getirecek. Sonra onu yönetmek için ISPMan denilen bir araç kullanacağız.

Metin şeklindeki örneklerin uzunluğundan kurtulmak için onları onları metin kutucuklarına ekledim. Eğer gerçekten bu sayfanın çıktısını almak istiyorsanız o zaman onu kendi bilgisayarınızda saklayın ve metin kutucuklarındaki örnekleri "pre tags'e" dönüştürün.
Belki bu perl komutu sizin için bir şeyler yapabilir.
perl -pi.bak -e 's!textarea.*?>!pre>!g' filename

Bir ISS meydana getirmek ve sonra onu yönetmek uzmanlık isteyen bir iş, özellikle onun rahatça erişilebilir, bölünebilir ve büyük bir kısmının otomatik olmasını istiyorsanız. Bir ISS'yi çalıştırmak kendini makinaların çalışmasına, kullanıcı hesaplarının oluşturulmasına, sanaldoku sitelerinin yönetilmesine, sorun gidermeye, bir yardım masası çalıştırmaya vb. işlere adamış Sisitem Yöneticilerinden oluşan bir takım gerektirir.
Çoğu zaman yardım masasının kurulumda ya çok az etkisi vardı ya da hiç yoktur. Karşılaştığım yardım masalarının çoğunun umutsuzca yardıma ihtiyacı vardı.



 

Neden LDAP?

LDAP mükemmel bir dizindir. LDAP, kullanıcı adlarını ve şifrelerini yönetmekten ziyade kullanıcıları ve kaynakları yönetir. Yazımın ilerleyen bölümlerinde LDAP'nin nasıl her şeyi tek merkezden idare ettiğini göreceğiz.

 

ISPMan nedir?

ISPMan benim yazdığımı bir program; bu program sayesinde IT bölümündekiler yeni bir alanadı(domain) oluşturacaklarında, bir internet sunucusu kuracaklarında veya bir DNS girdisini değiştireceklerinde beni rahatsız etmeyecekler. ISPMan açık kodlu bir program ve onu http://www.ispman.org adresinden indirebilirsiniz. Burada ISPMan'in kendisi hakkında açıklama yapmaktansa onun ardındaki genel kavramlardan bahsedeceğim. Kendinizi onu denemek ve geliştirmek hususunda özgür hissedebilirsiniz.

 

Bu ISS bize ne sağlayacak?

Bu ISS bize DNS, posta, internet postası, internet sunuculuğu vb. şeyler sağlayacak.

Mesele şu ki: Bir müşteri geliyor ve "exampledomain.com" diye bir alanadı(domain) almak istiyor.
Bu alanadı bir kaç tuş vuruşuyla oluşturuluyor ama aslında sahne arkasında DNS'i, sanal posta sunucusunu ve sanal bir internet sunucusunu kurmak gibi bir çok sihirli işlem yatıyor.
Müşteri kendi internet veya ftp sunucusuna erişmek bir kullanıcı adı alıyor. Aynı alanadı içinde epotaya erişim için sınırsız sayıda kullanıcı oluşturulabiliyor. Alanadını kullanan kullanıcının indirme işlemi için yeri olup olmayacağı size kalmış.

Tabi bir de internet erişimi sağlama işi var. Bu konu çok sade ya da gerçekten çok karmaşık olabileceğinden dolayı bu makalede ona değinmeyeceğiz :).

 

Sanal alanadları

Herkes kendi internet sitesine ve kendi alanından bir elektronik posta adresine sahip olmak ister fakat elektronik posta hesabı oluşturma işi elektronik posta kullanmak için gereken sistem hesaplarına garip bir şekilde bağlı olduğundan ben bunu sevmiyorum.
kullanici1@alanadı1.com ve kullanici2@alanadı1.ch etclerini yönetmek istediğinizde bir çok düzeyde sorun çıkıyor çünkü yapılması gereken bir çok gereksiz yönlendirme işlemi var.
Örnek olarak mükemmel bir IMAP sunucusu olan Cyrus'u alabiliriz. Cyrus kullanıcıları yönetmek yerine posta kutularını(mailbox) kontrol eder. Sadece bir posta kutusunun adının "agaffar" olmasına izin verir. Eğer "linuxrus.com" alanadından bir müşterim varsa ve bu müşterim "agaffar" diye bir kullanıcı adı istiyorsa bu talihimin bana ufak bir oyun oynadığı anlamına gelir. Bu durumda farklı ada sahip bir posta kutusu oluşturmalı ve kullanıcıyı o posta kutusuna yönlendirmeliyim. Bu işin ikinci bir püf noktası da "agaffar.linuxrus.com" adında bir kullanıcı oluşturmak fakat Cyrus "." yı posta kutusu ayıracı olarak kullandığı için ne birincisini yapabilirim ne de "[email protected]" adlı bir kullanıcı adı kullanabilirim. Neyse ki gelecekteki programlar akıllarda zaten var olan alanadlarıyla yazılacak.

Hepimizin Amerika'da yaşamadığını da hatırlatmak isterim. Bir çok posta listesi kullanıcı1@alanadı1 ve kullanıcı2@alanadı2 yi öneriyor. Onlar bütün alanadlarının .com ile bitmesini umuyorlar. So we have to keep track of "username" "domain" "TLD"(Top Level Domain).

Bizim tasarımız bütün bunları hesaba katacak.

"agaffar" diye bir kullanıcı oluşturmak yerine kullanıcıları "kullanıcıadı_alanadı_tld" şeklinde oluşturacağız.
Ayraç olarak neden "_" yi kullandığımı bilmiyorum fakat "." Cyrus yüzünden kullanılamazdı ve diğer ayraçlarla da daha başka problemlerimiz vardı, örneğin "&" hem komut satırları hem de URL ler için sakıncalıydı.

 

ISS imizi güçlendirren yazılımlar

Aşağıda LDAP ile sorunsuz bir şekilde çalışan programların bir listesini görüyorsunuz. Tabi isterseniz, ve de çalışırsa, başka programlar da kullanabilirsiniz.

 

Dizin Tasarlama

Dizinimiz alanadlarına dayanıyor. Bu dizinde alanadları, alanadı kullanıcıları, alanadı servisleri etc leri var.
Öreneğin LDAP yöneticisi ve Cyrus yöneticisi gibi kullanıcıların dışındaki bir kullanıcı sadece bir alanadında var olabilir.
alanadının ilgili bölümü kendisine bağlı olan kullanıcıların bilgilerini, alanadının DNS bilgilerini ve alanadı etc sinin internet bilgilerini saklar
Örnek

Burada "develeoper.ch" alanadı için bir bölüm tanımladık, bu bölümün kullnıcılar, dns bilgileri ve internet bilgileri için alt bölümleri var.
Bu örnekte alanadına sadece "alanadı.tld" kullanıcısının ftp ile erişmesini istediğimiz için bir uid, gid ve anadizin(homeDirectory) tanımladık.
Örneğin developer.ch adlı alanadının sahibi kendi dizinine dosya yükelemek istediğinde sisteme "developer.ch" olarak bağlanacak ve ftp sunusuna bağlanmak için uygun şifreyi girdiğinde anadizinine ulaşabilecek vesaire vesaire... bundan daha sonra bahsedeceğiz.

Diğer kullanıcıların alanadına ftp ile erişmelerini istemediğimiz için onlara bir uid,gid ve etc tanımlamadık.
Bütün bir LDIF örnek dosyasını burada bulabilirsiniz (bu dosya biraz eski olabilir çünkü bir üretim makinasından alındı ve yeni tasarımında içine bazı özelikler ekledim) veya patronunuza bir örnek sunmak için bu bağlantıyı kullanabilirsiniz (bu da biraz eski tarihli)

 

LDAP'de Doğrulama (Sistem hesabı olmadan)

LDAP nin diğer bir güzelliği de /etc/passwd, /etc/shadow etc sinde herhangi bir sistem hesabı oluşturmak ya da NIS etc sini yönetmek zorunda olmayışımız.
Tüm hesaplar LDAP de toplanır ve doğrulama da direk LDAP üzreinden yapılır.
Bu ufak oyunu yapabilmek için PAM (Pluggable Authentification Module) pam_ldap'den büyük yardım aldık. PAM sizin doğrulama için hangi modülü kullanacağınızı belirlemenize olanak verir.

Örneğin benim /etc/pam.d/imap, /etc/pam.d/pop ve /etc/pam.d/proftpd dosyalarım şu şekilde:


#%PAM-1.0

auth       sufficient   /lib/security/pam_ldap.so

account    sufficient   /lib/security/pam_ldap.so                               

Artık tüm imap/pop3/ftp doğrulama işlemleri ldap sunucusu tarafından yürütülüyor. Böylece agaffar_developer_ch adlı kullanıcı doğrulanmış oluyor(gets authentificated) ve sistemin passwd veya nis kayıtlarında kaydı olmasa bile kendine gelen iletileri alabiliyor.

 

Dns i LDAP ile Yönetmek

DNS'in halihazırda LDAP için bir backend'i yok, ama belki de DHCP ile bağlantı kurmak için kullanılan Dynamica DNS dışında bir DNS için backendi olması iyi bir fikir değil. Neyse, LDAP'yi DNS hakkındaki bilgileri depolama ve daha sonra bunları kullanarak DNS alan dosyaları oluşturmak için kullanıyoruz. Bu bizim DNSte herhangi bir değişiklik yapmadan her şeyi merkezi bir güvenli makinadan yönetmemize olanak sağlıyor.

LDAP deki DNS girdileri şu şekilde gözüküyor:

dn: ou=dnsdata, domain=4unet.net, o=ispman

domain: 4unet.net

ou: dnsdata

objectclass: top

objectclass: domainrelatedobject

objectclass: posixAccount

uid: 4unet.net

uidNumber: 2000

gidNumber: 1000

homeDirectory: /home/4unet.net

userPassword: {crypt}XXffGGHH

loginShell: /bin/true

dns bilgisi kolu tanımları. Aynı zamanda alanadıyla aynı ada sahip bir posixAccount (bir kullanıcı) tanımlıyor. Bu kullanıcı alanadına ftp ile bağlanıp daha önce belirlenmiş kısımlara dosya yükleyebilen bir çeşit webmaster.

dn: cn=soarecords, ou=dnsdata, domain=4unet.net, o=ispman

cn: soarecords

primary: ns1.4unet.net

ou: dnsdata

retry: 1800

rootmail: dnsmaster.4unet.net

domain: 4unet.net

minimum: 432000

objectclass: top

objectclass: domainRelatedObject

expire: 1209600

refresh: 21600

Bu kısım 4unet.net'in DNS'si için SOA kayıtlarını tanımlıyor.
Alan dosyasının içinde bu değerleri onları DNS SOA kayıtlarına çevirecek bir script bulundurmak zorundasınız.

dn: cn=nsrecords, ou=dnsdata, domain=4unet.net, o=ispman

domain: 4unet.net

cn: nsrecords

ou: dnsdata

objectclass: top

objectclass: domainRelatedObject

record: @,ns1.4unet.net

record: @,ns2.4unet.net

Ve bunlar da NS kayıtları.
Tüm bilgileri bir script tutacak, onları "," karakteri ile ayıracak ve alan dosyasına eklenecek olan hedefi ve isim sunucusunu bulacak

dn: cn=mxrecords, ou=dnsdata, domain=4unet.net, o=ispman

domain: 4unet.net

cn: mxrecords

ou: dnsdata

objectclass: top

objectclass: domainRelatedObject

record: @,10, mx1.4unet.net

record: @,100, mx2.4unet.net

Yukarıdakilerin aynısı ama bu sefer MX kayıtları.
Bu kayıtlar aynı zamanda alan dosyalarının içindeki MX kayıtlarına göre düzenlenmiş olan öncelik alanını da içeriyor.

dn: cn=arecords, ou=dnsdata, domain=4unet.net, o=ispman

objectclass: top

objectclass: domainRelatedObject

domain: 4unet.net

cn: arecords

ou: dnsdata

record: ns1, 193.247.80.43

record: ns2, 193.247.80.44

record: @,193.247.80.43

record: @,193.247.80.44

Bunlar da A kodları, basit olarak sunucu, ip adres yönlendirmeleri

dn: cn=cnames, ou=dnsdata, domain=4unet.net, o=ispman

objectclass: top

objectclass: domainRelatedObject

domain: 4unet.net

cn: cnames

ou: dnsdata

record: ftp, www

record: mail, www

record: *, www

Bunlar da sunucular için CNAME veya Kısaltmalar
Bütün bu scriptler ISPMan paketinin içinde var. Bir NS kaydının nasıl değiştirileceğini anlatan şu ekran görüntüsüne bir göz atın.

 

proftpd'nin Kurulması

proftpd'yi LDAP modülü ile birlikte yüklemiş olmak zorundasınız. ftp yi sanal sunucu etc si ile çalıştıracaksanız ve sanal sunucunun da çoğu zaman meşgul olacağını düşünüyorsanız ftp yi inetd nin içinden çalıştırmak yerine kendi başına çalıştırmalısınız.
Bu yüzden inetd.conf kısmındaki satırları yeniden düzenleyin ve inetd şeytanını(daemon) yeniden yükleyin.
Adı ftponly olan ve gid 1000 e sahip bir grup oluşturn.Tüm alandalarına bu gid i vereceğiz.

/etc/pam.d/proftpd dizinini yukarıda LDAP Doğrulaması kısmında gösterildiği gibi düzenleyin.
O zaman /etc/proftpd.conf dizininiz şunun gibi gözükmeli.

proftpd'yi çalıştırmak için /usr/sbin/proftpd, onu kapatmak için de killall /usr/sbin/proftpd yazabilirsiniz

 

Cyrus'un Kurulması

Cyrus SASL'yi, imapd'yi ve UW-IMAP istemci c-sdk'sını derleyin ve kurun. IMAP istemcisinin sdk'sı zaten sisteminizde yüklenmiş olacaktır.İlk önce rpm -aq | grep imap komutunu deneyin. Gene de şüphede kalırsanız daha yeni bir versiyonunu derleyin ve kurun. cyrus ve grup iletisi adlı bir kullanıcı oluşturn,yükleme talimatlarını izleyin ve imap sunucunuzun çalışıp çalışmadığını kontrol edin. Bir kere çalıştırmayı başardıktan sonra /etc/pam.d/imap kısmını LDAP Doğrulaması kısmında gösterildiği gibi ayarlayın.

cyrus adında veya LDAP dizinindeki /etc/imapd.conf kısmında verdiğiniz yönetici adıyla aynı ada sahip bir kullanıcı oluşturmak zorundasınıze
Örneğin cyrus yöneticinizin adı "cyrus" ise ldap dizininizde aşağıdakine benzer bir girdi göreceksiniz.


dn: uid=cyrus, ou=admins, o=ispman

cn: Cyrus Admin

sn: Cyrus

objectclass: top

objectclass: systemadmins

uid: cyrus

userpassword: XXDDCCYY

ou: admins                                                                      

Bu girdileri kurulum sırasında ISPMan sizin için kendisi oluşturacak.

 

Postfix'in Kurulması

Postfix LDAP ile mükemmel bir uyum içinde çalışır. Sanal alanadı ve sanal kullanıcıaramalarını LDAP içinden direk olarak yapabilirsiniz. Böylece hangi sunucudan ileti alacağınızı belirtmek zorunda kalmazsınız.
Örneğin, eğer "perl.ch" alanından bir ileti gelirse tüm alanadlarını tarayarak "perl.ch" adlı bir alanadının olup olmadığına bakılacaktır. Eğer böyle bir alanadı var ise "perl.ch için gönderilen Duh MX geri döndü" mesajını göstermek yerine gelen iletiyi kabul edecektir.

benim /etc/postfix/main.cf dizinim şunun gibi görünüyor

 

ISPMan ile kullanıcıların yönetilmesi

ISPMan kullanıcıları yönetmeyi kolaylaştırır. Bir kullanıcı oluşturmak iki adımdan ibarettir:

  1. LDAP veritabanında bir girdi olulturmak
  2. IMAP sunucusunda bir posta kutusu oluşturmak
Herhangi bir kullanıcıyı silmekle bu iki adımdaki girdileri de otomatik olarak silmiş oluursunuz.

 

Daha fazla makineye bölme

ISPMan bir kullanıcının posta kutusunu iletiçiftliğinizdeki(mailfarm) herhangi bir makinada oluşturabilmenize olanak sağlar.Örneğin herbiri 10,000 kullanıcıyı yöneten ileti1, ileti2, ileti3 ileti4 etc leriniz olabilir. LDAP + Postfix + Cyrus üçlüsünü kullanarak içteki makinalardan herhangi birine ileti dağıtabilirsiniz.
Örneğin [email protected] adresine bir ileti ulaşıyor olsun, Postfix ldap sunucusuna bu iletiyi [email protected] tanımına uyan girdiye göndermesini ister, LDAP sunucusu da [email protected] adresine bu iletiyi gönderir. Gelen ileti de iletiçiftliğinizdeki ilet5 adlı makinaya yönlendirilir.

Bu aralar birkaç işini iyi bilen geliştiriciyle birlikte pop3 ve imap kapısı(port) üzerindeki ileti sunucusu frontendinde çalışan ve gelen istekleri iç makinalara ileten bir IMAP/pop3 vekili(proxy) üzerinde çalışıyorum. Böylece kullanıcılar iletilerinin hangi ileti sunucusunda bulunduğunu bilmek yerine sadece mail.developer.ch veya pop.developer.ch gibi bir adres bilecekler.

 

kullanıcılara web mail sağlanması

IMP kullanıcılara webmail sunmak için çok kullanışlı bir program.
Merkezi IMP yüklemesi için apache'nin httpd.conf kısmında ileti.* diye bir kısaltma oluşturabilirsiniz.

Örneğin aşağıdakiler benim yüklememden

Aşağıdakileri yöneten biraz değiştirilmiş bir IMP sürümü üzerinde çalışıyorum.

böylece istemcilerinizin kendilerine gelen iletileri basitçe http://mail.their.domain adresine giderek okuyabilmelerine olanak sağlayabilirsiniz

 

Kaynaklar

PAM LDAP Modülü
pam_ldap modülü Solaris and Linux iş istasyonlarının LDAP dizini için doğrulama yapmaya ve dizindeki şifreleri değiştirmeye yarar.
openLDAP
OpenLDAP Projesi sağlam, ticari yönü bulunan, tam donanımlı ve açık kodlu LDAP uygulamaları ve geliştirme araçları geliştirmek için işbirliği içinde yürütülen bir projedir. Proje interneti haberleşmek, planlamak, OpenLDAP Takımını geliştirmek ve onunla ilgili dokümanyasyonu oluşturmak için kullanan dünya çapındaki bir gönüllüler topluluğu tarafından yönetiliyor.
Postfix
Mükemmel SMTP sunucusu
Cyrus SASL kütüphanesi ve imapd'si
Cyrus Elektronik İleti Projesi standartlara bağlı teknolojiler kullanan küçük veya büyük yatırım çevrelerinde kullanılmak üzere yüksek derecede bölünebilirliğe sahip bir yatırım ileti sistemi geliştirmeye devam ediyor. Bu proje sayesinde Cyrus teknolojileri küçük departmanlardaki bağımsız kullanımdan büyük bir şirkette merkezi olarak yönetilen bir sistem haline dönüşebilecek.
ISPMan (Değiştokuş katili[Exchange killer])
Bu makalede tanıttığım ISS yönetim yazılımı
proftpd
Güvenli bir ftp sunucusu

 

Bu makale için talkback formu

Her makalenin kendine ait bir talkback sayfası vardır. Bu sayfaya kendi yorumunuzu sunabilir ya da diğer okuyucuların yarumlarını okuyabilirsiniz:
 talkback sayfası 

İnternet sayfaları LinuxFocus Editör Takımı tarafından yürütülmektedir
© Atıf Gaffar
LinuxFocus.org 2000

Bir hatayı bildirmek veyahut Linuxfocus'a yorumunuzu göndermek için buraya tıklayın

2000-09-03, lfparser sürüm 1.8 ile yazılmıştır