Toplam Sayfa Görüntüleme Sayısı

30 Mart 2015 Pazartesi

Backup & Restore Linux sistemlerde

Selamlar;

Bu paylaşımda yaklaşık 3 haftadır görev aldığım bir projede kullanılmak üzere oluşturduğum yedekleme ve yedekten dönme (Backup & Restore) mekanizması hakkında bilgi vermek istiyorum.Anlatacağım (Backup & Restore) mekanizmasını oluşturmak ve konfigure etmek oldukça kolay,ayrıca yedeklenen içeriğe web erişimi olduğu için alınan yedeklerin içerik ve doğruluğunu o anda kontrol edilebilmesi de bu mekanizmanın artılarından bir tanesi.Lafı fazla uzatmadan kısaca topolojiyi çizerek anlatıma başlıyorum.


Yukarıdaki şemada görüldüğü gibi iki adet sunucumuz bulunmakta.Sunucularımız dan ilki Centos yüklü apache web sunucusu diğeri ise Debian kurulu olan openvpn,dhcp ve file server servislerin çalıştığı Debian sunucu,iki sunucu arasında "ssh public key authentication" kullanılmakta,yani birbirlerine bağlanırken parola sormuyorlar,"ssh user@hostnane " komutu sonrası password:? sorulmuyor.Güvenli bağlantı için bir anahtar dosya kullanıyor,sunucular birbirlerini bu anahtar vasıtasıyla tanıyor ve haberleşiyor."Ssh public key" nasıl oluşturulur konusuna geçiyorum.

A-) Ssh public key oluşturma

Aşağıdaki komutları sırasıyla terminal konsolda çalıştıralım.Burada dikkat etmemiz gereken nokta ssh-keygen komutu ile oluşan "~/.ssh/id_rsa.pub" dosyasının içeriğini  "authorized_keys" isimli yeni bir dosyaya kaydetmek gerekmekte."Authorized_keys" dosyası "ssh public key authentication" kilit dosyasıdır.Bu örnekte authorized_keys dosyasını "A" sunucusu yani Centos için oluşturuyorum.
  • ssh-keygen -t rsa
Komut sonrası "~/.ssh/" dizinde iki adet  id_rsa ve id_rsa.pub isminde dosya oluşmakta.Yukarıda da bahsettiğim gibi id_rsa.pub dosyasının içeriğini yeni oluşturmamız gereken "authorized_keys" dosyasına taşımalıyız.Bu işlem için aşağıdaki komutu kullanıyorum. 
  • cat id_rsa.pub > authorized_keys

Bu aşamadan sonra geriye bağlanılacak sunucunun "~/.ssh/"pathine az önce oluşturduğum "authorized_keys" dosyasının kopyalanması kaldı.Bu işlem için aşağıdaki komutu kullanmalıyız.
  • scp authorized_keys user@B-sunucusu:~/.ssh/.
Kopyalama işlemi sonrası "A" sunucusundan yani Centos'tan "B" sunucusuna Debian'a ssh ile bağlantı yaptığımızda parola girmemiz gerekmeyecek.Fakat "B" sunucusundan Debian'dan "A" sunucusuna Centos'a ssh yaptığımızda parola sorulmaya devam edecektir.Bunu önlemek için "B"sunucusunda da ssh-keygen komutu yapılmalıdır.Burada farklı yapılması gereken tek komut "cat id_rsa.pub >> authorized_keys" dir.Sırasıyla aşağıda komut dizilimini veriyorum.

"Ssh public key authentication" için "B" Sunucusunda yapılması gereken işlem


  • "ssh-keygen -t rsa" komutu bu sunucuda da çalıştırılmalıdır.
Komut sonrası "~/.ssh/" dizinde iki adet  id_rsa ve id_rsa.pub isminde dosya oluşmakta.

  • cat id_rsa.pub >> authorized_keys
  • scp authorized_keys user@A-sunucusu:~/.ssh/. 
Bu işlemler sonrası her iki sunucu arasında ssh public key authentication metodu ile bağlantı sağlanmış oldu.Yedekleme için gerekli olan ilk adımı tamamlamış bulunmaktayız.İkinci adım olarak "A" sunucusuna yani Centos'a apache web sunucusu kurmaya sıra geldi.Bu kurulum için aşağıdaki komutları sırasıyla terminal konsolda çalıştıralım.

B-) Centos üzerine Apache server kurulumu
  • yum install httpd   "komutu ile apache kurulumu yapıyoruz"
  • chkconfig --levels 235 httpd on   "Apache servis otomatik başlıyor"
  • "/etc/httpd/conf/httpd.conf" dosyasında "NameVirtualHost *:80" başındaki "#"commenti kaldırıyoruz.
  • /etc/init.d/httpd restart  yada service httpd restart  "servisi yeniden başlatıyoruz,gelen uyarıyı"NameVirtualHost *:80 has no VirtualHosts" warning for now"dikkate almayın "
  • http://localhost adresinden apache web sunucusuna ulaşabilirsiniz.

C-) Apache server konfigürasyonu (Kullanıcı ve parola ekranı oluşturma)

  • Apache server'da ilk olarak  "/etc/httpd/conf/httpd.conf" dosyasında 350. satırda bulunan "AllowOverride All" ifadesini "AllowOverride None" olarak değiştirmeliyiz.Bu değişiklik ile oluşturduğumuz".htaccess" dosyalarını apache'nin okumasını sağlamış olduk.

"httpd.conf" dosyasıyla işimiz bittiğine göre ilk olarak ".htpasswd" ve arkasından ".htaccess" dosyalarını oluşturmaya sıra geldi.Bu dosyaları oluşturmak için iki yöntem bulunmakta.İlk yöntem web sunucu (A) Centos makinede aşağıdaki komutları sırasıyla çalıştırmak yada http://www.htaccesstools.com/ adresini kullanarak oluşturabiliriz. Web sayfasından dosyaları oluşturmak oldukça pratik ve kolay,sarı ile belirtiğim linkleri kullanarak htpasswd ve htaccess dosyası oluşturabilirsiniz.




NOT:Anlatımda komut satırı kullanılmıştır."/etc" atında "htpasswd" dizini bulunmuyorsa,mkdir /etc/htpasswd komutu ile dizini yarattıktan sonra aşağıdaki komutla apache parola dosyasını oluşturuyoruz.



  • htpasswd -c /etc/htpasswd/.htpasswd kullanıcı-adı
".htpasswd" dosyasının nerede oluştuğu önemli,çünkü ".htaccess" dosyasının içeriğinde ".htpasswd" dosyasının nerede olduğunu tanımlamamız gerekecek,bu açıdan dosyanın path bilgisi önem teşkil etmekte.Bu küçük ama önemli bir ayrıntı.Eğer web sayfası ile dosyaları oluşturmuşsak bu küçük ayrıntıya daha çok dikkat etmeliyiz.Örnek bir ".htpasswd" dosyasının içeriği aşağıdaki gibi görünmeli.



Dikkat ettiyseniz benim ".htpasswd" dosyamın bulunduğu dizin "/var/www/html/yedek" ".htaccess" dosyamdaki tanım ise bu pathe uygun olmalı.".htaccess" dosyası oluşturmak için "/var/www/html/yedek" pathinde aşağıdaki komutları sırasıyla çalıştırıyoruz.


  • mkdir /var/www/html/yedek "yedek dizin yoksa oluşturuyoruz"
  • cd /var/www/html/yedek "yedej dizine giriyoruz"
  • nano .htaccess "nano editörle aşağıdaki örnek içeriği kopyalayabilirsiniz"
  • chmod 644 .htaccess
Örnek ".htaccess" içeriği ;

AuthType Basic AuthName "Sunucu Yedek Erisim Alani" AuthGroupFile /dev/null AuthUserFile /var/www/html/yedek/.htpasswd Require valid-user

  

"htpasswd" dosyasını oluşturduğunuz path eğer anlatımın başında geçen "/etc/htpasswd/" dizini ise ;".htaccess" içeriğinde "AuthUserFile /etc/htpasswd/.htpasswd" dosyasının bulunduğu dizini değiştirmemiz gerecek.Bunun dışında ".htaccess" dosyası parola sorması gereken ekranda olmalı,bizim ekranımız" /var/www/html/yedek" olduğu için ".htaccess" dosyasını bu pathte oluşturduk.Son adım olarak apache servisi restart ederek "http://(A) Centos/yedek" adresinden konfigürasyonu kontrol etmek kaldı.
  • /etc/init.d/httpd restart
  • http://A-sunucusu-Centos/yedek



Yedekler için oluşturduğumuz alan bizden kullanıcı-adı ve parola sormakta,artık yedeklenen içeriğe güvenli bir şekilde ulaşacağız.Bizim dışımızda local ağdan bir başkası yedek içeriği görüntüleyemeyecek,tabi kullanıcı adı ve parolayı bilmiyorsa.Bu yüzden karmaşık bir parola oluşturmanızı öneririm.

D-) Backup&Restore script oluşturma


Bu aşamada size kendi hazırladığım yedeklerken bir yandan da restorunu oluşturan shell script'i paylaşacağım.


NOT:Shell scripti (B)-Debian sunucuda çalıştırmalıyız,scripte kullanılan path bilgilerini değiştirebilirsiniz.Scriptte değişiklik yapmadan kullanmak isterseniz (B)-Debian sunucuda " mkdir {/content,/content/yedek} yada mkdir /content && mkdir /content/yedek" komutu ile scriptte tanımlı olan dizinleri oluşturmalıyız.



#!/bin/bash
a=`date +%d%m%Y`
b=`date +"%H%M%S"`
c=`hostname`
d=`hostname -I | awk '{print $1}' |uniq`
cd /content/yedek
echo "$a$b$d$c" > /tmp/isim.txt
mkdir `cat /tmp/isim.txt`
#Yedeklenecek konfigurasyon dosyalari
cp /etc/dhcp/dhcpd.conf /content/yedek/`cat /tmp/isim.txt`
cp -r /etc/openvpn /content/yedek/`cat /tmp/isim.txt`
#Restore olusturma
cd /content/yedek/`cat /tmp/isim.txt`
cp /tmp/isim.txt .id
echo $c > .hn
cat << EOF > restore.sh
#!/bin/bash
cd /content/yedek/`cat .id`
tar -zxf `cat .id`.tar.gz
#Yedekten Onar
#DHCP
/etc/init.d/isc-dhcp-server stop
echo "DHCP servis onarildi"
cat dhcpd.conf > /etc/dhcp/dhcpd.conf
/etc/init.d/isc-dhcp-server start
#OPENVPN
/etc/init.d/openvpn stop
echo "OPENVPN servis onarildi"
cp -r openvpn /etc/.
/etc/init.d/openvpn start 
EOF
chmod ugo+x restore.sh
#Sikistirma
cd /content/yedek/`cat /tmp/isim.txt`
tar -zcvf `cat /tmp/isim.txt`.tar.gz * > /content/yedek/`cat /tmp/isim.txt`/Yedek_icerigi.log
rm -rf d* op*
#Merkezi Sunucuya gonderme
scp -r -o UserKnownHostsFile=/dev/null -o StrictHostKeychecking=no  /content/yedek/`cat /tmp/isim.txt` kullanıcı-adı@A-server-Centos:/var/www/html/yedek/.

Yukardaki shell script'te "tarih+saat+ip-adres-hostname" değişkenleri ile bir dizin oluşmakta,sonrasında yedeklenecek servislerin conf dosyası yada servisin ilgili path'nin bir yedeği "/content/yedek" içine yukarıda bahsettiğim tarih+saat+ip-adres-hostname" değişkeni ile oluşan dizine kaydedilmekte,sonrasında sıkıştırılıp scp ile (A) Centos web sunucusunun "/var/www/html/yedek" parola korulamalı alana kopyalanmakta.Bu shell script (B) Debian sunucuda çalıştırılmalı.Bu işlemi gerçekleştirmek için ilk olarak script dosyasını yedek1.sh ismiyle (B) Debian sunucunun /content pathine kaydedelim.chmod ugo+x /content/yedek1.sh komutu ile yürütülebilir dosya yapalım ve en son adım olarak aşağıdaki komut ile doğrudan yada ssh ile komut çalıştırma yöntemi ile bu backup&restore çalışması yapan yedek1.sh dosyasını çalıştıralım.İlk olarak doğrudan çalıştırma için standart ssh bağlantısı yapmamız yeterli;
  • ssh kullanıcı-adı@B-sunucusu-DEBİAN
  • cd /content
  • ./yedek1.sh
İkinici çalıştırma yöntemi olarak ssh ile komut çalıştırma yöntemini kullanabiliriz,bunun için aşağıdaki komutu kullanmamız yeterli olcaktır.
  • ssh kullanıcı-adı@B-server-DEBİAN "/content/./yedek1.sh"
Yedeğimizi aldığımıza göre "http://A-sunucusu-Centos/yedek" adresinden alınan yedeği kontrol etmeye sıra geldi.


Kullanıcı adı ve parolayı yazıp "Tamam" butonu ile yedek sayfasına oturum açıyorum.



30 mart 2015 tarihli olan dizine tıklayarak aldığımız yedeğin içeriğine ulaşıyoruz.


Fark ettiyseniz restore.sh ve Yedek_içeriği.log ile xxx.tar.gz dosyaları oluşmuş.restore.sh ile DEBİAN sunucuyu bu yedeğe döndürebiliriz.

restore.sh içeriği;

#!/bin/bash
cd /content/yedek/30032015173924192.168.0.9testbox09
tar -zxf 30032015173924192.168.0.9testbox09.tar.gz
#Yedekten Onar
#DHCP
/etc/init.d/isc-dhcp-server stop
echo "DHCP servis onarildi"
cat dhcpd.conf > /etc/dhcp/dhcpd.conf
/etc/init.d/isc-dhcp-server start
#OPENVPN
/etc/init.d/openvpn stop
echo "OPENVPN servis onarildi"
cp -r openvpn /etc/.
/etc/init.d/openvpn start 


Yedek_içeriği.log

dhcpd.conf
openvpn/
openvpn/easy-rsa/
openvpn/easy-rsa/build-ca
openvpn/easy-rsa/build-key-server
openvpn/easy-rsa/openssl-0.9.8.cnf
openvpn/easy-rsa/whichopensslcnf
openvpn/easy-rsa/build-req-pass
openvpn/easy-rsa/inherit-inter
openvpn/easy-rsa/revoke-full
openvpn/easy-rsa/build-req
openvpn/easy-rsa/pkitool
openvpn/easy-rsa/build-key-pass
openvpn/easy-rsa/istemcisertifika.tar
openvpn/easy-rsa/build-key
openvpn/easy-rsa/openssl-1.0.0.cnf
openvpn/easy-rsa/keys/
openvpn/easy-rsa/keys/client.csr
openvpn/easy-rsa/keys/server.csr
openvpn/easy-rsa/keys/a.txt
openvpn/easy-rsa/keys/client1.crt_yedek
openvpn/easy-rsa/keys/key.tar
openvpn/easy-rsa/keys/01.pem
openvpn/easy-rsa/keys/index.txt.old
openvpn/easy-rsa/keys/index.txt
openvpn/easy-rsa/keys/serial
openvpn/easy-rsa/keys/ca.key
openvpn/easy-rsa/keys/client1.key_yedek
openvpn/easy-rsa/keys/ca.crt
openvpn/easy-rsa/keys/index.txt.attr.old
openvpn/easy-rsa/keys/index.txt.attr
openvpn/easy-rsa/keys/server.crt
openvpn/easy-rsa/keys/serial.old
openvpn/easy-rsa/keys/dh2048.pem
openvpn/easy-rsa/keys/02.pem
openvpn/easy-rsa/keys/server.key
openvpn/easy-rsa/openssl-0.9.6.cnf
openvpn/easy-rsa/list-crl
openvpn/easy-rsa/build-dh
openvpn/easy-rsa/vars
openvpn/easy-rsa/clean-all
openvpn/easy-rsa/build-inter
openvpn/easy-rsa/build-key-pkcs12
openvpn/easy-rsa/sign-req
openvpn/update-resolv-conf
openvpn/ipp.txt
openvpn/ca.crt
openvpn/openvpn-status.log
openvpn/server.conf
openvpn/server.crt
openvpn/dh2048.pem
openvpn/server.key
restore.sh
Bu yedekleme yapısında yedeklenen içeriğin bir eşi (A)-Centos sunucunun "/var/www/html/yedek" dizininde aynı yedeğe ait diğer kopya ise (B)-Debian sunucusun "/content/yedek" dizininde saklanmakta.Alınan yedeğin birden fazla farklı ortamda bulunması bir felaket anında işimizi oldukça kolaylaştıracak bir ayrıntı.Kendinden restorlu backup şeysinin sonuna geldik :)



Teşekkürler.
ford,fiat,opel,eset,norton,windows,hp,asus,samsung,lenova,ibm,apple.
Başka bir paylaşımda görüşmek üzere.
Mehmet ÖCAL 2015



Hiç yorum yok: