Bu makalenin sağlandığı diller : İngilizce , Fransızca Turkce |
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.
İçindekiler:
|
Ö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ı.
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 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 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 :).
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ı.
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.
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 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.soArtı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'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 |
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 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: adminsBu girdileri kurulum sırasında ISPMan sizin için kendisi oluşturacak.
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 kullanıcıları yönetmeyi kolaylaştırır. Bir kullanıcı oluşturmak iki adımdan ibarettir:
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.
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.
|
İ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