Kopia lustrzana serwera WWW
Transkrypt
Kopia lustrzana serwera WWW
Linuxwbiznesie - linux w biznesie, linux w firmie Kopia lustrzana serwera WWW Autor: Administrator 24.05.2006. W artykule tym pokaże, jak wykonać kopię lustrzaną naszego serwera WWW, tak aby serwer lustrzany mógł przejąć zadania głównego na wypadek awarii. W tym celu użyję narzędzia rsync, uruchamianego w CRONie co kilka minut. Pozwoli to na automatyczne wykonywanie kopii. rsync jest narzędziem, które przesyła pliki i katalogi, przy czym jest o tyle użyteczny iż nie przesyła wszystkiego lecz tylko zmiany od ostatniego transferu. Dodatkowym atutem rsynca jest iż zachowuje prawa i właścicieli kopiowanych plików/katalogów. Zatem idealnie nadaje się do robienia kopii lustrzanych. Strumień danych generowany przez rsync będziemy tunelować w SSH, co podniesie znacznie bezpieczeństwo transmisji. Takie rozwiązanie jest o tyle wygodne, że nie musimy dodatkowo na firewallu otwierać dodatkowego portu dla rsync, wystarczy ten dla SSH (22). Pewnym problemem jest to iż SSH, wymaga podania hasła przez użytkownika, co uniemożliwiało by realizację tego zadania w CRONie. Rozwiązaniem jest utworzenie kluczy publicznych na serwerze źródłowym i lustrzanym co zlikwiduje pytanie SSH o podanie hasła, a o to właśnie nam chodzi. Oznaczmy jako serwer źródłowy serwer server.example.com. Katalog /var/www z tego serwera ma być kopiowany do analogicznego na serwerze lustrzanym mirror.example.com 1. Instalacja rsync Często narzędzie to jest instalowane z systemem, ale gdyby go nie było to trzeba zainstalować na obydwu serwerach. Np. w Ubuntu poleceniem: apt-get install rsync 2. Tworzymy specjalnego użytkownika na serwerze źródłowym Użytkownik (someuser) ten będzie wykorzystywany przez rsync do robienia kopii katalogu /var/www, zatem nasz użytkownik musi mieć do niego prawa odczytu. Wpisujemy zatem: useradd -d /home/someuser -m -s /bin/bash someuser i zmieniamy hasło: passwd someuser 3. Test rsync Możemy już przeprowadzić próbę ręcznego zrobienia kopii. Wpisujemy w konsoli: rsync avz -e ssh [email protected]:/var/www/ /var/www/ i powinniśmy ujrzeć: The authenticity of host 'server1.example.com (192.168.0.100)' can't be established. RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23. Are you sure you want to continue connecting (yes/no)? jak więc widać tunelujemy w SSH. Wpisujemy yes i w katalogu /var/www na mirror.example.com robi się kopia katalogu /var/www z server.example.com 4. Tworzenie kluczy na mirror.example.com Teraz możemy przystąpić do tworzenia pary kluczy prywatnych/publicznych na mirror.example.com Jako root wpisujemy: mkdir /root/rsync ssh-keygen -t dsa -b 2048 -f /root/rsync/mirror-rsync-key Powinieneś ujrzeć: Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): [press enter here] Enter same passphrase again: [press enter here] Your identification has been saved in /root/cron/mirror-rsync-key. Your public key has been saved in /root/cron/mirror-rsync-key.pub. The key fingerprint is: 68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirror Teraz ten klucz należy przekopiować na server.example.com. Jako root wpisujemy: scp/root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/ Klucz utworzony na serwerze lustrzanym powinien się pojawić w katalogu /home/someuser na serwerze źródłowym. 5. Konfiguracja serwera źródłowego Przechodzimy na serwer źródłowy, jako someuser (!) i wpisujemy: mkdir ~/.ssh chmod 700 ~/.ssh mv ~/mirror-rsync-key.pub ~/.ssh/ cd ~/.ssh touch authorized_keys chmod 600 authorized_keys cat mirror-rsync-key.pub >> authorized_keys te operacje dopisały zawartość mirror-rsync-key.pub do /home/someuser/.ssh/authorized_keys. Chcielibyśmy aby połączenia z mirror.example.com mogły używać tylko rsync zatem na początku dodajemy linię: /home/someuser/.ssh/authorized_keys command = "/home/someuser/rsync/checkrsync", from="mirror.example.com", no-port-forwarding,noX11-forwarding,no-pty W kolejnym kroku tworzymy skrypt /home/someuser/rsync/checkrsync, który będzie odrzucał inne operacje z mirror.example.com, niż rsync. Jego zawartość to: #!/bin/sh case "$SSH_ORIGINAL_COMMAND" in *\&*) echo "Rejected" ;; *\(*) http://www.linuxwbiznesie.pl Kreator PDF Utworzono 4 March, 2017, 09:38 Linuxwbiznesie - linux w biznesie, linux w firmie *\{*) *\;*) echo "Rejected" ;; echo "Rejected" ;; echo "Rejected" ;; *\<*) echo "Rejected" ;; *\`*) echo "Rejected" ;; rsync\ --server*) $SSH_ORIGINAL_COMMAND ;; *) echo "Rejected" ;; esac Nadajemy mu prawo 700. 6. Testowanie rsynca na mirror.example.com Teraz sprawdzimy czy z mirror.example.com możemy zrobić kopię katalogu /var/www z serwera źródłowego, nie będąc pytanym o hasło. Jako root wpisujemy: rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ Użyte opcje oznaczają: - delete - pliki usunięte na serwerze źródłowym mają też być usunięte na lustrzanym, - exclude - wskazuje maskę, dla plików/katalogów, które nie powinny być kopiowane Powinieneś ujrzeć receiving file list ... done sent 71 bytes received 643 bytes 476.00 bytes/sec total size is 64657 speedup is 90.56 bez prośby o hasło ! 7. Zadanie w CRONie dodajemy wpis do tablic CRONa, który co 5 minut będzie robił kopię lustrzaną. Wpisujemy jako root: crontab -e i potem: */5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/ error -exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/ http://www.linuxwbiznesie.pl Kreator PDF Utworzono 4 March, 2017, 09:38