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 "agaffar@linuxrus.com" 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 bob@developer.ch adresine bir ileti ulaşıyor olsun, Postfix ldap sunucusuna bu iletiyi mailacceptinggeneralid=bob@developer.ch tanımına uyan girdiye göndermesini ister, LDAP sunucusu da bob@mail5.developer.ch 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