Rsyncd İle Şifresiz Replikasyon

Amaç:

Bu döküman, aynı özelliklere ve konfigurasyona sahip 2 adet, qmail + vpopmail sunucu
üzerinde, sadece e-mail hesapları (accountlar), posta listeleri ( ezmlm maillisteleri ) ve kullanıcıların
mail kutularını eş zamanlı olarak replikasyona tabi tutabilmek üzere hazırlanmıştır. Diğer dosya ve
dizin replikasyonları için ilgili parametre ve ayarlar değiştirilmelidir.

Açıklama:

Rsyncd bir replikasyon yazılımıdır. En önemli avantajı, replikasyona tabi tutulmak istenen
tüm dizin ya da dosyaların, tamamını her seferde yeniden indirerek ya da göndererek değil, sadece
değişikleri replikasyona tutarak hız ve zaman kazancı sağlamasıdır.
rsyncd yi kullanarak sunucularınız arasında dizin ya da dosya yedeklemesi yapıyorsanız ve
bunu crontab kullanarak yapmak istiyorsanız en önemli sorularınızdan birisi, kullanıcı adı ve şifreyi
nasıl otomatik olarak verdirebilir ve sunucularınız arasında nasıl şifresiz ( passwordless ) bir bağlantı
kurabilirim olabilir. Eğer bu şekilde bir sorununuz var ise aşağıdaki adımları uygulayarak bu
sorununuzu halledebilirsiniz.

Aşağıdaki örnekte, mysql kullanmayan qmail + vpopmail kullanıcıları için, domains dizininin
nasıl bir diğer sunucu ya yedekleneceği hakkında bilgi verilmeye çalışılmıştır.
Yedeği Alınacak Sunucu Taraf ( Server Side ) Konfigürasyonu:
Sunucu tarafında öncelikle “rsyncd” yi kurmalısınız.

# cd /usr/ports/net/rsync/
#make install

Rsyncd Konfigürasyonu:

Sunucu tarafında rsyncd yi kurduktan ve /etc/rc.conf dosyası içerisine rsyncd_enable=”YES” ibaresini ekledikten sonra /usr/local/etc/rsycd.conf dosyasını düzenlemelisiniz. Ancak bu dosyanın izinlerine dikkat etmelisiniz. İzinleri şu şekilde olmalı:

[root@mail ~]# ls -l /usr/local/etc/rsyncd.conf
-r–r–r– 1 root wheel 350 Jun 26 12:42 /usr/local/etc/rsyncd.conf

Daha sonra dosyanın içeriğini şu şekilde düzenlemelisiniz.

[root@mail ~]# cat /usr/local/etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
uid = root
gid = wheel
hosts allow = 192.168.100.0/24
log file = /var/log/rsync.log
log format = %h %o %f %l %b
[mail]
path = /usr/local/vpopmail/domains
comment = Vpopmail Yedeklemesi
auth users = mail
max connections = 2
secrets file = /usr/local/etc/rsyncd.secrets

pid file : rsynd çalışırken pid dosyasını nereye ne isimde yazması gerektiğini belirtmektedir. Burada dikkat edilmesi gereken nokta ilgili dizinin uid:gid kullanıcısı tarafından yazılabilir olmasıdır.

uid ve gid : rsyncd yi çalıştıracak olan kullanıcı ve gruptur. Burada bunu root:wheel olarak düzenledik. Çünkü domains dizini özellikleri şu şekildedir.

drwx—— 5 vpopmail vchkpw 512 20 Şub 14:50 domains

Yani, ilgili userdan + ROOT dan başka hiç kimsenin herhangi bir yetkisi yoktur. O sebeple rsyncd yi çalıştıracak olan kullanıcı ve grubu root:wheel şeklinde ayarlamalısınız.

Bu sebeple, eğer “rsyncd” uygulaması, başka dosya ve dizin yedekleme işlemleri için de kullanılacaksa, sunucu tarafında yer alan “rsyncd” yi çalıştıran kullanıcı ve grubun, yine bu sunucu üzerinde yedeklenmesi istenen dosya ve dizinler üzerinde okuma yetkisine sahip olması gerekmektiğine dikkat ediniz.

hosts allow : rsycnd yi kullanarak hangi IP adresine sahip istemcilerin replikasyon yapacaklarını ayarlayabilirsiniz. Güvenlik amaçlı bir parametredir. Bu parametreyi eğer isterseniz aşağıda örnek verilecek olan “mail” isimli yedekleme grupları içerisine yazarak, sadece ilgili yedekleme grubu için belirleyebilir ve her yedekleme grubu için farklı istemci ya da istemci ağlarına replikasyon izni verebilirsiniz.

log file : Anlaşıldığı gibi “rsyncd” uygulamasının yaptığı ya da yapamadığı iş ve işlemlerin çıktılarını yazacağı dosya adı ve tam yeridir.

Log format : log dosyasında, replikasyon ile ilgili hangi bilgilerin ne şekilde yer alması gerektiği düzenleyen parametredir. Verilebilecek değişkenler;

%a Uzak IP adresi . (The remote machine’s IP address)
%b Aktarılan bayt miktarı. (The number of bytes transferred)
%B Dosya izinleri. ( The file’s permissions )
%c Dosyalar gönderilirken bu dosya için alınan sağlama toplamı baytlarının sayısı. (The checksum bytes received when sending the file)
%f Dosya ismi ( gönderici için tam dosya yolu; sonuna “/” gelmez ). (The file’s name with no trailing slash. Given in full path on the sender side )
%G Dosyaların grup aitlik ve yetki bilgileri (The file’s GID or “DEFAULT.” )
%h Uzak istemci ismi. ( The remote host’s name)
%i Liste halinde güncellenenler. Log dosyasında bu kısımda yer alan, karakterlerin ne anlam geldiğini öğrenmek için rsync kılavuz sayfasındaki –itemize-changes seçeneğinin açıklamasına bakabilirsiniz. (The itemized list of what will be updated)
%l Bayt cinsinden dosya uzunluğu ( How long the file is in bytes)
%L Bir ” –> SYMLINK” veya bir ” => HARDLINK” ya da boş dizge ( kısayol bir dosya ismi ise). ( One of three options: -> name of symlinked file, => name of hard linked file, or “” if neither)
%m Modülün ismi. ( The name of the module being used)
%M Dosyanın en son değiştirilme tarihi ( The last time the file was modified.)
%n Dosya ismi ( sadece dosya ismi; dizinle “/” ile biter ). (The file’s name with no trailing / and in short form no matter which host this is used on)
%o “send”, “recv” veya “del.” olarak yapılan işlem ( sonuncusu bir nokta ile biter ). ( The operation to be performed: “send” to send the file, “recv” to receive the file, or “del.” to delete it (the . is not a typo))
%p Rsync oturumunun süreç kimliği (PID). ( The PID for this particular rsync session)
%P Modülün yolu. ( The path to the module being used)
%t Tarih ve saat. ( The current date and time )
%u Doğrulanmış kullanıcı ismi ( ya da boş ). ( The authenticated user name, or “”)
%U Dosyanın sahiplik ve yetki bilgileri ( The file’s UID)

mail : Aşağıda parametreleri belirtilen yedekleme grubunun ismidir. Bu isim önemlidir. Çünkü istemci sunucuda hedef belirtilirken, gönderdiğiniz parametrelerin ( kullancı adı, şifre, kaynak ) hangi yedekleme grubu için olduğunu belirtmek için kullanılacaktır.

path: Bu sunucuda ve bu yedekleme grubunda yedeklenecek olan kaynak belirtilmektedir. Sonunda “/” OLMAMASI çok önemlidir.

comment : Yedekleme grubu ile ilgili girebileceğiniz bir açıklama satırıdır.

auth users : kullanıcı adı ve şifre doğrulaması yapılacağından, doğrulanan hangi kullanıcıların bu yedekleme grubunu kullanarak yedekleme yapabileceğini belirttiğiniz bir parametredir.

max connections : Söz konusu yedekleme grubu için eş zamanlı bağlantı sayısıdır. Bu parametreyi herhangi bir yedekleme grubu içerisi yerine, grup dışında herhangi bir yere, örnek olarak “log format” altına yazarsanız söz konusu sınırlama tüm yedekleme gruplarını kapsayacaktır.

Örneğin; 4 yedekleme grubu ve “max connection = 2” şeklinde bir yapılanma ile “rsyncd” sunucusunu çalıştırdıysanız, sunucuya aynı anda 4 oturum açılmaya çalışıldığında, ilk bağlanan 2 oturuma sahip yedekleme başlayacak ve diğer 2 si “zaman aşımı” hatası alacaklardır. Başlayan 2 yedekleme bağlantısından herhangi biri bittiğinde, bekleyen bağlantılar devreye girmeyecektir.

Çünkü sürekli bağlantı talebinde bulunmamaktadırlar. Bağlanmaya çalışılmakta, belirli bir süre içerisinde bağlantı kurulamaz ise zaman aşımı hatası verilmekte ve replikasyon başlamadan durdurulmaktadır. Bu sorunu yazacağınız bir betikle, “max connection” sayısını arttırarak ya da aynı anda yapılacak olan “max connection” sayısını aşmayacak şekilde bir yapılanmaya giderek aşabilirsiniz.

secrets file : kullanıcı adı ve şifrelerinin yer aldığı dosya.

Daha sonra, yedekleme yapacak sunucu tarafından gönderilen kullanıcı adı – şifre ikililerinin kontrol edileceği, içerisinde kullanıcı adı ve şifre bilgilerinin yer aldığı dosyayı oluşturmalısınız. İzinleri yine çok önemli.

[root@mail ~]# ls -l /usr/local/etc/rsyncd.secrets
-rwxr-x— 1 root wheel 17 Jun 26 12:43 /usr/local/etc/rsyncd.secrets

İçeriği ise şu şekilde; “KullanıcıAdı:Şifre”. Bu dosya içerisinde her iki kısımda da (KullanıcıAdı ve Şifre) Türkçe karakter kullanmamanız önerilir.

[root@mail ~]# cat /usr/local/etc/rsyncd.secrets
mail:MailBaK2007
[root@mail ~]#

Sunucu tarafındaki işlemleriniz hemen hemen bitti sayılır. Konfigürasyon dosyasını hazırladığınız rsynd yi artık bu konfigurasyon ile çalışması için başlatabilirsiniz.

[root@mail ~]# /usr/local/etc/rc.d/rsyncd start

İstemci Taraf ( Client Side ) Konfigürasyonu:

Tüm bu ayarlamalar bittikten sonra sıra istemci tarafına yani yedekleme yapacak olan sunucu tarafına geldi. Bu sunucuda da yine rsyncd yi kurmalısınız ancak çalıştırmanıza gerek yok. Çünkü sadece rsync istemcisi kullanılacak. O sebeple rc.conf dosyasında bir değişiklik yapılmasına gerek yok. işleminizi crontab dan yapacağınız için öncelikle bir betik oluşturmalı ve çalıştırılabilir yapmalısınız.

# ls -l /usr/local/etc/backup
-rwxr-xr-x 1 root wheel 334 26 Haz 12:38 /usr/local/etc/backup

Crontab Betik Hazırlanışı:

Örnek betik aşağıda verilmeye çalışılmıştır.

# cat /usr/local/etc/backup
1.#!/bin/sh
2.PATH=”/usr/local/bin:/usr/bin:/bin”
3.export PATH
4.echo “Yedek Almaya Basliyorum” – “`date`” >> /var/log/rsync.log
5.rsync -avzH –stats –delete
– – p a s s w o r d – f i l e = / u s r / l o c a l / e t c / . r s y n c . p a s s w d
mail@192.168.100.226::mail /usr/local/vpopmail/domains/ >>
/var/log/rsync.log
6.echo “Yedek Alma Bitti…” – “`date`” >> /var/log/rsync.log
#

İlgili satır açıklamaları aşağıda verilmeye çalışılmıştır.

1. Betikte “/bin/sh” kullanılacağı belirtiliyor.

2. Betikte kullanılacak olan komutları içeren PATH ler belirleniyor.

3. Betikte kullanacak komutları içeren PATH ler kullanılabilir hale getiriliyor.

4. Yedek almaya başlanıldığı ve başlama tarihi, log dosyasının EN SONUNA yazdırılıyor.

5. Yedekleme komutu veriliyor. Bu satırın anlamı:
192.168.100.226 makinesindeki “mail” yedekleme grubuna ( 192.168.100.226::mail ), “mail” kullanıcı adı ( mail@192.168.100.226 ) ve /usr/local/etc/.rsync.passwd içerisindeki şifre ile bağlantı isteği yap ve sunucuda “mail” yedekleme grubu ( 192.168.100.226::mail )için belirtilen yeri ve altındaki herşeyi bu makinedeki “/usr/local/vpopmail/domains/” dizini ile, istatistiki bilgileri göstererek ( –stats ), orada varolmayan dosyaları bu makinede de silerek ( –delete ), arşiv modda sahipliklerine dokunmadan (-a), sıkıştırarak (z), link özelliklerini bozmadan (H) ve yapılan işlem adımlarını göstererek ( verbose mode, v) eşleştir ve tüm bu işlemlerdeki adımları log dosyasının EN SONUNA yazdır.

6. Yedekleme işleminin bittiği ve bitiş saati yine log dosyasının EN SONUNA yazdırılıyor. Böylelikle kontrol edebilelim. Kullanılan ( –a ) parametresi (-rlptgoD ) parametrelerinin birleşimidir. Burada dikkat edilmesi gereken nokta, istemcide tarafında replike edilecek konumun “/usr/local/vpopmail/domains/” şeklinde yani sonunda “/” OLACAK şekilde belirtilmesidir. Oysaki Sunucu tarafında özellikle bunu BELİRTMEMİŞTİK.

Betik İçin Gerekli Olan Diğer Dosyalar:

Dikkat edilmesi gereken diğer bir nokta ise şifre dosyasının izinleridir. İzinler şu şekilde olmaz ise işleminiz başarısız olacaktır. Burada önemli olan “others” kullanıcılarının bu dosyada herhangi bir haklarının olmamasıdır.

# ls -l /usr/local/etc/.rsync.passwd
-rwxr-x— 1 root wheel 12 26 Haz 12:39 /usr/local/etc/.rsync.passwd

Dosya içerisi ise oldukça basit. Şifreyi okunabilecek şekilde buraya yazabilirsiniz. Bu şifreyi birden çok kullanıcı için, betiğinizde dosya yolunu vererek kullanabilirsiniz.

# cat /usr/local/etc/.rsync.passwd
MailBaK2007
#

Artık yapılması gereken tek adım söz konusu dosyayı test etmek.

# /usr/local/etc/backup
Bu işlem yapılırken bir taraftan da “tail -f /var/log/rsync.log” komutu ile tüm adımların çıktılarını yazdırdığımız “/var/log/rsync.log” dosyasını izleyerek detaylı bilgi alabilirsiniz. Unutmayınız ki rsyncd uygulaması, replikasyon işlemi yapılmaya başlarken replike edilecek olan tüm dizin ve dosyaların listesini çıkarır ve bu listeye göre replike eder. Replikasyon işlemi başladıktan sonra, yedek alınan sunucudan herhangi bir kullanıcı mailbox ındaki maili POP3 ile çeker ise ya da herhangi bir dosya ya da dizin yapılan bir işem sonucunda silinir ise, sıra o dosya ya da dizine geldiğinde söz konusu kaynak orada olmayacağından log dosyasına “replike edilmedi” hatası düşecektir. Ancak bu büyük bir soruna neden olmayacaktır. Sadece loglarınızda bu dosya bulunamadı şeklinde hata belirecektir. Diğer dosyalar sorunsuzca replike edilecektir.

Manuel çalıştırmada sorun yaşamadıysanız artık betiğinizi crontab ınıza yerleştirebilirsiniz.

# crontab -l
0 4 * * * /usr/local/etc/backup

Bu cron job ile artık her gece saat 04:00 de yedeklerimiz yedek mail sunucumuza alınacaktır. Peki bu yedekleme neleri içermektedir. Bu yedekleme; Tüm kullanıcı adı ve maillistesi hesaplarınızı – eklenen, silinen, değiştirilen vs…

Tüm kullanıcı konfigürasyonlarınızı – eklenen ve silinen kullanıcılar, şifre değişiklikleri, POP3, IMAP kısıtlama ya da değişiklikleri, kota ayarlamaları, yönlendirmeler, autoresponder ayarları vs… Kısacası bu replikasyon domain ve kullanıcı bazında meydana gelen ya da getirilen tüm değişiklikleri içermektedir. Not: replikasyon betiğinde önce KAYNAK daha sonra HEDEF belirtilmiştir. Eğer tam tersi bir işlem yapılmak isteniyor ise o halde bu ikisi yer değiştirilmelidir. Yani bu makinedeki “/usr/local/vpopmail/domains/” i diğer makinedeki “mail” PATH i (192.168.100.226::mail ) ile eşitle şekilde.

KAYNAKLAR:
http://www.belgeler.org/man/man5/man5-rsyncd.conf.html
http://www.belgeler.org/man/man1/man1-rsync.html
http://alf1.mrc-lmb.cam.ac.uk/~fm/rsync.html
http://www.splunk.com/base/CustomizersyncdLogOutput
http://samba.anu.edu.au/ftp/rsync/rsyncd.conf.html
belgesi-2955

Belgeci , 2280 belge yazmış

Cevap Gönderin