praktyka
Serwer kopii zapasowych
Serwer kopii
zapasowych
Sławomir Skrzyniarz
W XXI wieku komputer staje się podstawowym narzędziem człowieka, bez którego nie można
wyobrazić sobie istnienia we współczesnym społeczeństwie. Co raz więcej gospodarstw domowych,
około połowa, może poszczycić się przynajmniej jednym komputerem stacjonarnym lub laptopem,
a jedna trzecia ma dostęp do Internetu, nie mówiąc już o współczesnych firmach.
ookoła nas, czyli w szkołach, bankach, urzę- w myśl powiedzenia: lepsza nieaktualna kopia niż jej
dach, stacjach benzynowych czy samocho- całkowity brak. Pozwoli to wyjść obronną ręką z opresji,
dach znajdują się dziesiątki i setki urzą- jeśli nastąpi jedna z wyżej wymienionych sytuacji.
Ddzeń, zbierających i przetwarzających nie- Spośród wielu dostępnych programów do archiwiza-
zliczone ilości danych, a w tym nasz domowy komputer cji, tych płatnych i bezpłatnych, możemy coś wybrać dla
i laptop, na którym pracujemy. Dane są gromadzone na siebie. Jednak wiele z nich będzie nam proponować archi-
różnego rodzaju nośnikach, w tym również na dyskach wizację w oparciu o dedykowane serwery, urządzenia
twardych. Ich utrata może wiązać się z koniecznością taśmowe, którymi nie dysponujemy lub stosy płyt CD/
powtórzenia jakiejś operacji, np. napisania od nowa DVD, w których możemy się łatwo pogubić. Potrzebujemy
podania o urlop, albo w ostateczności, będą poważne czegoś łatwego w obsłudze, co po jednorazowej konfiguracji
kłopoty, a nawet bankructwo firmy, gdy utracimy pro- nie będzie nas absorbować podczas normalnej pracy i bę-
jekt, nad którym spędziliśmy 4 miesiące lub kluczowe dzie się wykonywać automatycznie oraz wykorzysta to
dane naszej firmy. czym dysponujemy, np. domowy komputer z dużym
Czy dane zapisane na dysku twardym naszego lapto- dyskiem twardym lub serwer z macierzą dyskową RAID.
pa są w 100 % bezpieczne? Statystyki awaryjności pokazu- Dysponując odrobiną Linuksowej wiedzy tajemnej może-
ją, że niestety nie. W przypadku urządzeń przenośnych, my samodzielnie napisać skrypty, które codziennie będą
mimo użycia bardzo odpornych na urazy podzespołów, czuwać nad wykonaniem kopii zapasowej, gdy my tymcza-
dane na dyskach twardych są wyjątkowo zagrożone. Cią- sem, będziemy mogli przeznaczyć zyskany czas na pracę
głe przenoszenie, wstrząsy, upadek, kradzież urządze- lub odpoczynek.
nia lub przypadkowe skasowanie może pozbawić nas je- W niniejszym artykule pragnę zaprezentować Państwu
dynej kopii danych. Warto już dziś pomyśleć o tym, by re- przykładowe skrypty archiwizujące napisane w języku
gularnie tworzyć kopie zapasowe newralgicznych danych, powłoki bash, które pokażą, jak szybko i prosto można na-
46 pazdziernik 2007
linux@software.com.pl
praktyka
Serwer kopii zapasowych
pisać wygodne narządzie, automatyzujące Trzeci skrypt to ssh-add.sh, a będzie uru- rc.d/rc lub do innego skryptu, uruchamianego
proces archiwizacji od wykonania pierw- chamiany podczas każdego logowania do podczas startu systemu. Przy dobieraniu
szej kopii zapasowej, aż po usunięcie nie- środowiska graficznego na laptopie i będzie czasu bezczynności, po którym wyłączą się
aktualnych już archiwów. czuwał nad tym, by klucz szyfrujący RSA był talerze, należy wziąć pod uwagę to, że zbyt
gotowy do użycia. częste uruchamianie i zatrzymywanie tale-
Ogólna zasada rzy może doprowadzić do szybszego zuży-
funkcjonowania Konfiguracja serwera cia dysku, a sam proces uruchamiania, w nie-
systemu tworzenia kopii archiwizacji których przypadkach może opóznić proces
zapasowej zapisu i odczytu nawet o 30 sekund.
System archiwizacji będzie się składał Wymagane oprogramowanie
z laptopa z Linuksem, na którym są prze- Konfigurację serwera należy rozpocząć od Konfiguracja serwera openssh
chowywane krytyczne, z punktu widzenia zainstalowania serwera openssh, a można to W większości przypadków domyślna konfi-
bezpieczeństwa dane oraz komputera kla- zrobić w Mandrivie, za pomocą polecenia guracja serwera openssh będzie działać prawi-
sy PC, lub serwera z dużym dyskiem oczy- urpmi openssh-server lub zainstalować dłowo i nie trzeba nic zmieniać. Należy jednak
wiście działającego pod kontrolą systemu pakiet openssh-server, za pomocą dowolnego sprawdzić, czy w pliku /etc/ssh/sshd_config
Linux. Całość będzie połączona ze sobą za menadżera pakietów, dostępnego w syste- parametr PubkeyAuthentication ustawiony
pomocą kabla sieciowego RJ-45 (komputer mie, np. apt-get, yum. Ponadto na obu ma- jest na yes. Jeżeli konfiguracja wymaga zmia-
komputer) lub dowolnej przewodowej lub szynach przyda się pakiet openssh-clients, ny, to po jej wprowadzeniu należy zrestar-
bezprzewodowej sieci wewnętrznej, Inter- zawierający m.in. program ssh, ssh-add, ssh- tować serwer sshd przez wywołanie polecenia
netu. Oczywiście połączenie może być zrea- agent i scp oraz openssh, zawierający ssh- /etc/init.d/sshd restart.
lizowane z wykorzystaniem dowolnego keygen. Skrypt archiwizujący opiera swoje
medium, jedynie z zastrzeżeniem, że urzą- działanie na programie rsync, tak więc nale- Konfiguracja serwera dhcpd
dzenia muszą mieć przydzielone IP i będą ży zainstalować pakiet o tej właśnie nazwie. Jeżeli w sieci, w której działa serwer archi-
mogły nawiązywać połączenia TCP. Połą- Jeżeli będziemy korzystać z dynamicznego wizacji, nie ma serwera dhcp, przydziela-
czenie pomiędzy serwerem a laptopem bę- przydzielania adresów IP, przyda się rów- jącego dynamicznie adresy IP, a nasz lap-
dzie zrealizowane przez szyfrowany tunel nież pakiet dhcp-server. topkorzysta z innych sieci, w których ta
ssh. usługa jest dostępna, to warto ją włączyć na
Wszystkie, powyżej przedstawione, zało- Przygotowanie miejsca najbliższym routerze w naszej sieci albo,
żenia można oczywiście zmienić, wprowa- na archiwa w przypadku braku routera, na serwerze
dzając korekty do skryptów i jednocześnie Przed przystąpieniem do wykonania pierw- archiwizacji. Pozwoli to wyeliminować pro-
dostosowując cały system archiwizacji do szej kopii zapasowej, należy założyć kon- blem ręcznej konfiguracji naszej karty
własnych potrzeb. to nowemu użytkownikowi, np. za pomo- sieciowej przy każdej próbie podłączenia do
cą polecenia adduser slawek i nadać hasła sieci, a także ograniczy dodatkowe czyn-
Skrypty wchodzące passwd slawek. Następny krok to założenie, ności, związane z procesem archiwizacji,
w skład systemu kopii w jego katalogu domowym lub na innym jedynie do podpięcia kabla sieciowego do
zapasowych dysku, katalogu do przechowywania archi- naszego notebooka.
W skład systemu archiwizacji wchodzą trzy wizacji, np. mkdir /mnt/backup/laptop,
skrypty; pierwszy to kopia_zapasowa.sh i bę- którego właścicielem będzie ów użytkow- Konfiguracja bramy ogniowej
dzie umieszczony na laptopie, na którym nik chown slawek:slawek /mnt/backup/ na serwerze
są dane, przeznaczone do archiwizacji. laptop. Jeżeli na potrzeby archiwizacji Każdy komputer, serwer, desktop lub laptop
Przy jego pomocy skonfigurujemy tunel przeznaczymy osobny dysk i będzie z nie- powinien mieć włączoną bramę ogniową,
szyfrowania, przez który będzie odbywać go korzystało niewielu użytkowników, to zwiększając ty samym bezpieczeństwo ser-
się transmisja danych oraz wykonamy co- warto włączyć w nim zaawansowane oszczę- wera oraz całej sieci. W naszym przypadku
dzienną kopię różnicową naszych plików. dzanie energii, które pozwoli wyłączyć- serwer będzie świadczył usługę ssh oraz dhcp,
W tym przykładzie założono, że kopia talerze dysku podczas bezczynności, zmniej w związku z czym ruch skierowany do por-
zapasowa będzie wykonywana raz dzien- szając tym samym poziom zużycia ener- tów 22, za pomocą protokołu tcp i portu 67
nie, a osiągniemy to, uruchamiając skrypt gii i emitowanego hałasu oraz ilość wy- na udp, powinien być przepuszczany, aby
z poziomu demona zadań okresowych cron, dzielanego ciepła. Do zmiany ustawień wszystko działało prawidłowo. Dodatkowo
co określony czas, np. co 10 minut. Jeżeli oszczędzania energii posłużyć może prog- należy włączyć opcję odpowiadania na pakie-
okaże się, że serwer jest niedostępny, bo ram hdparm. Jednak, aby ustawić wyłącza- ty ping, gdyż za pomocą pingowania spraw-
trwa archiwizowanie danych lub istnieje nie się dysku, np. po dwudziestu minutach, dzana jest dostępność serwera archiwizacji
archiwum na dany dzień, to skrypt zakoń- to należy wydać polecenie hdparm -S 240 w skrypcie kopia_zapasowa.sh.
czy działanie ze stosownym komunikatem /dev/hdc, gdzie 240 jest to liczba, ozna-
opisującym przyczynę. czająca wielokrotność 5 sekund, a /dev/ Konfiguracja skryptu czysciciel.sh
Drugi skrypt nazywa się czysciciel.sh hdc to nazwa dysku, przeznaczonego do Skrypt czysciciel.sh należy skopiować do ka-
i będzie wykorzystywany na serwerze do przetrzymywania kopii zapasowych. Usta- talogu zdefiniowanego w pliku kopia_zapa-
usuwania zbyt starych kopii zapasowych, wienie powinno działać przy każdym uru- sowa.sh w zmiennej $katalog_zdalny, np.
zapobiegając jednocześnie przepełnieniu chomieniu systemu, a żeby tak było, to na- /mnt/backup/laptop i zmienić właściciela pli-
dysku. leży dodać polecenie na końcu pliku: /etc/ ku na takiego samego jak katalog, w którym
www.lpmagazine.org 47
praktyka
Serwer kopii zapasowych
Listing 1a. yródło pliku kopia_zapasowa.sh
#!/bin/bash if [[ $(cat $pliktemp|grep
# Program do wykonywania kopii zapasowej danych $(whoami)'@'$(hostname)) != '' ]] ; then
# z laptopa echo 'Funkcja została włączona już wcześniej.'
# na PC (serwer kopii zapasowej) else
# Autor: Sławomir Skrzyniarz
cat $moj_home/.ssh/id_rsa.pub >> $pliktemp
# Licencja: GPL v2 echo 'Podaj ponownie hasło potrzebne do
# zalogowania na serwerze kopii zapasowej'
# Ustawienia programu scp $pliktemp $uzytkownik@$serwer:/home/
wersja_programu='0.5' # Wersja programu $uzytkownik/.ssh/authorized_keys
serwer='10.1.1.5' # adres serwera kopii zapasowej fi
uzytkownik='slawek' # użytkownik na serwerze kopii /bin/rm $pliktemp; echo ''
zapasowej ;;
ilosc_prob=5 # Ilość pakietów (pingów) wysłanych w celu 'n'|*)
sprawdzenia, czy serwer kopii zapasowej jest dostępny echo -e 'Za każdym razem będziesz musiał/-a podać
do_skasowania='/home/*/.kadu/kadu.conf.xml.backup.* / hasło przy wykonywaniu kopii zapasowej.\nUniemożliwi to
home/*/.thumbnails/large/* /home/*/.thumbnails/normal/ zastosowanie tego skryptu jako demona systemowego.'
* /home/*/.mozilla/firefox/*/Cache/* /home/*/.opera/ ;;
cache4/* /home/*/.opera/cacheOp/* /home/*/.opera/ esac
thumbnails/* /home/*/.gqview/thumbnails/*' }
# Katalogi do opróżnienia przed wykonaniem kopii spr_serwer() {
# zapasowej # funkcja sprawdza dostępność komputera przechowującego
# do_archiwizacji='/etc /home' archiwizacje
# Katalogi podlegające archiwizacji oddzielone spacją spr_serwer() { # funkcja sprawdza dostępność
katalog_zdalny='/mnt/backup/laptop' komputera przechowującego archiwizacje
# Katalog w którym będą składowane kopie zapasowe echo Sprawdzanie dostępności serwera kopii
# na serwerze zapasowej...
pliki_wykluczone='*~ *.tmp' # Pliki, które nie zostaną routing=$(/sbin/ip route show|grep default|awk -F
zarchiwizowane {print $2} )
ile_kopii=14 # Z ilu dni zostawić kopię if [[ $routing == via ]] ; then
max_rozmiar=22000000000 # Maksymalny rozmiar kopii if ( ping -c $ilosc_prob -q $serwer >
zapasowej w bajtach (musi być o około 20% mniejsza niż /dev/null); then
przydzielona pojemność dyskowa) stan_serwera= 0 # Serwer dostępny
moj_home=$(cat /etc/passwd|grep $(whoami)|awk - else stan_serwera= 1 ; fi
F ':' '{print $6}') # Katalog domowy użytkownika else stan_serwera= 1 ; fi
uruchamiającego niniejszy skrypt - nie zmieniać return $stan_serwera
# Właściwy program }# Serwer dostepny
if [[ $(whoami) != 'root' ]] ; then else stan_serwera='1'; fi
echo 'Uruchom skrypt z uprawnieniami return $stan_serwera
administratora'; exit }
fi czysc_tmpy() { # funkcja czyszcząca dysk z plików
inicjacja() { tymczasowych
read -p 'Czy chcesz logować się z jednorazowym echo "Kasowanie niepotrzebnych plików..."
podawaniem hasła do klucza RSA (t/n): ' decyzja licznik_kasowania=0
case $decyzja in for kasuj in $do_skasowania; do
't') if [ -f $kasuj ]; then
echo 'Podaj hasło zabezpieczające nowego echo 'Kasowanie: '$kasuj
klucza [Enter]' /bin/rm $kasuj
ssh-keygen let licznik_kasowania=+1
# Generacja unikalnego klucza szyfrowania fi
echo 'Podaj hasło potrzebne do zalogowania done
na serwerze kopii zapasowej' if [ $licznik_kasowania -gt 0 ]; then
pliktemp=$(mktemp /tmp/backup.XXXXXXXX) echo -e 'Status: Skasowano\n'
# Generacja losowej nazwy else
scp $uzytkownik@$serwer:/home/$uzytkownik/. echo -e 'Status: Nie ma plików do skasowania\n'
ssh/authorized_keys $pliktemp fi
# kopiowanie między dwoma komputerami przez tunel ssh }
48 pazdziernik 2007
praktyka
Serwer kopii zapasowych
Listing 1b. yródło pliku kopia_zapasowa.sh
export-ustawien() { case $1 in
# Tworzy plik czysciciel.cfg na serwerze 'init')
dzis=$(date +%Y-%m-%d) echo 'Kopia zapasowa wersja '$wersja_programu
# Data dzisiejsza np. 2007.09.09 if ( spr_serwer ); then # OK
ostatnio=$(cat /var/log/kopia_ostatnio) echo -e 'Status: Serwer osiągalny.
if [[ $ostatnio != $dzis ]] || [[ $1 == 'nazadanie' Można wykonać inicjację.\n'
]] ; then inicjacja
pliktemp=$(mktemp /tmp/backup.XXXXXXXX) else
echo -e " echo -e 'Status: Serwer nie osiągalny.
# Plik konfiguracyjny czyściciela - nie edytować Nie można wykonać inicjacji.\n'
ręcznie\n# Plik generowany przez skrypt kopia_ fi
zapasowa.sh\n# Data generacji $(date)\ndo_ ;;
archiwizacji='$do_archiwizacji' 'kopia')
# Co było archiwizowane\nkatalog_zdalny=$katalog_zdalny echo 'Kopia zapasowa wersja '$wersja_programu
# Katalog w którym będą składowane kopie zapasowe if [ ! -f /var/run/kopia-zapasowa ] ; then
# na serwerze backupu\nile_kopii=$ile_kopii echo $(date)>/var/run/kopia-zapasowa
# Z ilu dni zostawić kopię\nmax_rozmiar=$max_rozmiar chmod 700 /var/run/kopia-zapasowa
# Maksymalny rozmiar kopii zapasowej (musi być if ( spr_serwer ); then # OK
# o około 20% mniejszy niż przydzielona pojemność echo -e 'Status: Serwer osiągalny.
# dysku\n">$pliktemp Można wykonać kopię zapasową.\n'
chmod 700 $pliktemp if [[ $(ssh-add -l|grep $(whoami)) ]]; then
echo -n 'Kopiowanie pliku konfiguracyjnego czysc_tmpy
czyściciela...' export-ustawien
scp $pliktemp $uzytkownik@$serwer:$katalog_ kopia $2
zdalny/czysciciel.cfg # -q bez komunikatów o postepie else
kopiowania /bin/rm $pliktemp; echo ' [ OK ]' echo 'Klucz autoryzacyjny niedostępny.
fi Wprowadz hasło.'
} fi
kopia() { else
dzis=$(date +%Y-%m-%d) echo -e 'Status: Serwer nie osiągalny.
# Data dzisiejsza np. 2007.09.09 Nie można wykonać inicjacji.\n'
for zasob in $do_archiwizacji; do fi
ostatnio=$(ssh slawek@10.1.1.5 "if [ -d $katalog_ /bin/rm /var/run/kopia-zapasowa
zdalny''$zasob'-'$dzis ]; then echo $dzis; fi") else
if [[ $ostatnio != $dzis ]] || [[ $1 == echo 'Program jest już uruchomiony.'
'nazadanie' ]] ; then fi
echo -n "Tworzenie kopii zapasowej katalogu: $zasob " ;;
rsync --rsh=ssh --force --ignore-errors -l 'pomoc'|'--help'|'help'|*)
--delete --delete-excluded --exclude= echo 'Składnia kopia_zapasowa.sh parametr1
"$pliki_wykluczone" --backup --backup-dir=$katalog_ [parametr2]'
zdalny$zasob-$(date +%Y-%m-%d) -a $zasob echo 'Parametr 1:'
$uzytkownik'@'$serwer:$katalog_zdalny$zasob-aktualne -vz echo ' init - włącz logowanie bez hasła
echo '[ OK ]' na serwer kopii zapasowej'
date +%Y-%m-%d>/var/log/kopia_ostatnio echo ' kopia - wykonaj kopię zapasową'
else echo ' pomoc - niniejsza pomoc'
echo "Kopia $zasob na dzień $(date +%Y-%m-%d) echo 'Parametr 2:'
została już wykonana" echo ' nazadanie - wymusza wykonanie kopii więcej
fi niż raz dziennie za każdym uruchomieniem skryptu'
done ;;
} esac
skrypt będzie się znajdować, za pomocą przy pierwszym uruchomieniu skryptu kopia_ niu następującego wpisu 5 * * * * root
polecenia chown slawek:slawek /mnt/ zapasowa.sh na laptopie. nice -n 19 /mnt/backup/laptop/czysciel.
backup/laptop/czysciel.sh oraz nadać sh, na końcu pliku /etc/crontab lub za po-
pełne uprawnienia użytkownikowi chmod Konfiguracja crona mocą programu crontab. Skrypt czysciciel.sh
700 /mnt/backup/laptop/czysciel.sh. Umożliwienie okresowego usuwania starych będzie uruchamiał się co godzinę, 5 minut
Plik konfiguracyjny zostanie utworzony kopii zapasowych będzie możliwe po doda- po każdej pełnej godzinie. Jeżeli będziemy
www.lpmagazine.org 49
praktyka
Serwer kopii zapasowych
wykorzystywać zaawansowane oszczędza- wania na serwerze kopii zapasowej za po- Konfiguracja klienta
nie energii w dysku, to warto ten proces wy- mocą ssh. Konfiguracja skryptu kopia_zapasowa.sh znaj-
konywać zdecydowanie rzadziej, np. raz duje się w nim, a na początku są zadekla-
dziennie. Na stronie http://pl.docs.pld-linux. Konfiguracja ssh rowane zmienne powłoki, które pozwalają
org/uslugi_cron.html można znalezć bardzo W pliku /etc/ssh/ssh_config należy spraw- na łatwe dostosowanie skryptu do włas-
przystępnie napisany podręcznik demona dzić, czy parametr ForwardAgent jest usta- nych potrzeb, bez wprowadzania zmian
zadań okresowych cron, który ułatwi usta- wiony na yes. Ustawienie będzie dostęp- w całym skrypcie. Przed pierwszym uru-
wienie pożądanej częstotliwości uruchamia- ne, zaraz po zapisaniu w pliku w edyto- chomieniem należy zalogować się jako ro-
nia zadań. rze tekstu. ot, a potem skopiować niniejszy skrypt do
katalogu /usr/local/bin, nadać mu prawa
Konfiguracja klienta Konfiguracja menedżera wykonywania chmod 755 /usr/local/
haseł bin/kopia_zapasowa.sh i zmienić właści-
Wymagane oprogramowanie Skrypt, wykonujący kopię zapasową, musi ciela na root chown root:root /usr/local/
Na laptopie, poza pakietem openssh i openssh- dysponować hasłem zabezpieczającym do bin/kopia_zapasowa.sh, a następnie otwo-
clients, będzie potrzebny również skrypt key- klucza uwierzytelniającego RSA, by móc rzyć, np. za pomocą polecenia mcedit /usr/
chain oraz screen, dostępny w postaci pakietu go odszyfrować. Bez postaci odszyfrowanej local/bin/kopia_zapasowa.sh, a na koniec
instalacyjnego; praktycznie w każdej dystry- wykonanie kopii zapasowej nie będzie moż- wprowadzić swoje ustawienia zgodnie ze
bucji. Posłuży nam do automatyzacji procesu liwe. Natomiast, aby zautomatyzować cały wskazówkami zawartymi w komentarzach.
pobierania hasła zabezpieczającego do klucza proces należy utworzyć skrypt uruchomie- Po ustawieniu wszystkiego należy zapisać
szyfrującego, który wykorzystujemy do logo- niowy środowiska KDE o nazwie start_ssh- zmiany, naciskając F2, i przygotować klucze
add_jako_root.sh, w którym powinien znalezć RSA do automatycznego logowania za po-
się wpis: mocą polecenia /usr/local/bin/kopia_
zapasowa.sh init. W momencie wykony-
Jak dobrać maksymalną ilość
#!/bin/bash wania polecenia serwer archiwizacji po-
kopii zapasowych?
konsole -T 'Autoryzacja winien być włączony, a sieć podłączo-
Podstawowym kryterium oceny maksymal- dla programu kopia_zapasowa.sh' na, natomiast laptop musi mieć przy-
nej ilości kopii zapasowych, będzie zajmo- -e /bin/bash dzielony adres IP. Gdy padnie pytanie
wana przez nie objętość dyskowa. Na po- -c '/usr/bin/xhost o ścieżkę do klucza to należy nacis-
czątku należy sprawdzić maksymalną obję- +127.0.0.1; nąć [Enter]. Następnym krokiem jest wpro
tość naszych danych. Po kilku dniach wy- echo Podaj hasło wadzenie hasła zabezpieczającego, ale
konywania kopii zapasowych należy także administratora;su - -c podczas wpisywania hasła (Enter pass-
sprawdzić ile procent dziennie danych "killall ssh-add.sh; screen phrase) nie będzie widoczne. Hasło powin-
ulega modyfikacji i wtedy obliczyć, czy wys- -a /usr/local/bin/ssh-add.sh"' no być tak dobrane, aby stanowiło kom-
tarczy nam miejsca na wymaganą ilość promis pomiędzy prostotą i bezpieczeń-
kopii oraz czy potrzebny będzie nowy dysk. Plik należy umieścić w swoim katalogu do- stwem, a będzie podawane przy każdym
Rozpatrzmy to na przykładzie. mowym w podkatalogu .kde/env. Skrypt bę- uruchomieniu środowiska graficznego. Da-
Mamy laptop z dyskiem 80 GB, a nasz dzie od teraz uruchamiał się przy każdym lej nastąpi skopiowanie publicznej części
system zajmuje 10 GB, natomiast dane 40 logowaniu i prosił o podanie hasła adminis- klucza szyfrującego RSA na serwer. Skrypt
GB, czyli zostało jeszcze 30 GB wolnego, tratora oraz hasła zabezpieczającego do klu- zapyta nas dwukrotnie o hasło naszego
więc należy przyjąć, że nasze dane będą cza RSA. konto na serwerze archiwizacji i na tym
w niedalekiej przyszłości zajmować całą, do zakończy się proces. Jeśli wszystko poszło
tego przeznaczoną objętość, czyli w sumie Konfiguracja crona prawidłowo, podczas próby logowania
będą miały 70 GB. Domyślnie chcemy mieć Jeżeli chcemy umożliwić okresowe tworzenie z konta root na serwer za pomocą polecenia
kopie zapasowe z ostatnich 14 dni. Po się kopii zapasowej należy dodać następujący ssh slawek@10.1.1.5 powinien pojawić
pierwszych kilku dniach normalnej pracy wpis: 0-59/10 * * * * root nice -n 19 się monit o hasło do klucza szyfrującego,
zaobserwowaliśmy, że objętość katalogów /etc/cron.10min/kopia.zapasowa na końcu a nie hasło na konto na serwerze, jak to
różnicowych z datami jest w stosunku 0,02 pliku /etc/crontab. Skrypt kopia_zapasowa.sh było do tej pory.
do katalogu *-aktualne, czyli 2 % danych będzie uruchamiać się co 10 minut, za pomocą
ulega zmianie. Teraz wystarczy wszystko skryptu /etc/cron.10min/kopia.zapasowa, Konfiguracja skryptu
zsumować, aby dowiedzieć się, ile potrzeba zawierającego następujące wpisy: ssh-add.sh
nam miejsca. Na dysku będzie potrzebne 70 Plik należy skopiować do katalogu /usr/
GB na katalog aktualnie zawierający pełną #!/bin/bash local/bin/ i nadać mu uprawnienia jak dla
kopię, plus 14 dziennych kopii różnicowych date >>/var/log/kopialog kopia_zapasowa.sh. Skrypt będzie wywoływa-
po 2 % z 70 GB oraz 20 % z 70 GB na - -c '/home/slawek/Dokumenty/ ny przy każdym logowaniu. Za każdym ra-
su
nieprzewidziany przyrost zmodyfikowanych Artykuły/kopia_zapasowa.sh kopia>>/ zem będzie raz pytał o hasło administratora,
danych. W sumie wychodzi, że będzie nam var/log/kopialog' a następnie z prawami administratora uru-
potrzeba około 120 GB miejsca na serwerze chomi ssh-agenta i zapyta o hasło zabezpie-
na wszystkie kopie zapasowe. Raporty generowane przez skrypt będą od tej czające do klucza prywatnego RSA. Potem
pory zapisywane w pliku /var/log/kopialog. przejdzie w tło i będzie czuwać nad tym, by
50 pazdziernik 2007
praktyka
Serwer kopii zapasowych
w przypadku usunięcia klucza, spytać o hasło
Listing 2. yródło skryptu czysciciel.sh
i ponownie wprowadzić odszyfrowaną pos-
tać klucza do pamięci. Usunięcie hasła bę-
dzie zdarzać się często, gdy będziemy na #!/bin/bash
długo pozostawiali komputer w stanie # Czysciciel.sh - program do usuwania starych kopii zapasowych
wstrzymania lub uśpienia. Zabezpieczy nas # Autor: Sławomir Skrzyniarz
w przypadku kradzieży, gdy zaszyfrowany # Licencja: GPL v2
klucz stanie się bezużyteczny. Nasze dane #
składowane na serwerze będą również bez- # Ustawienia programu
pieczne, gdyż złodziej nie zdoła zalogować wersja_programu='0.2' # Wersja programu
się i ich pobrać lub usunąć, bo nie będzie . czysciciel.cfg # Wczytanie ustawień z pliku
znał hasła do klucza. #
# Właściwy program
Omówienie skryptów echo 'Czysciciel wersja '$wersja_programu
pojemnosc=$(du -bs $katalog_zdalny|awk -F " " '{print $1}')
Kopia_zapasowa.sh if [[ $pojemnosc -ge $max_rozmiar ]] ; then
W Listingu 1 zaprezentowano zródło pliku echo "Przystępuję do usuwania starych archiwów..."
kopia_zapasowa.sh wraz z przykładowymi for zasob in $do_archiwizacji; do
ustawieniami zgodnymi z Rysunkiem 1. stare=$(find $katalog_zdalny''$zasob-[!a]* -maxdepth 0 -mtime +$ile_
Skrypt korzysta z funkcji, pozwalając wy- kopii -type d)
korzystać wielokrotnie te same fragmenty for stary in $stare; do
kodu i równocześnie maksymalnie zredu- echo -n "Status: Usuwam $stary"
kować długość skryptu. Funkcja inicja- /bin/rm -r $stary
cja() służy do wygenerowania klucza echo ' [ OK ]'
szyfrującego RSA do obsługi połączeń ssh done
oraz umieszczenia jego publicznej części done
na serwerze kopii zapasowej, w celu ogra- else
niczenia ilości monitów o hasło, podczas echo 'Status: Zostało jeszcze miejsce na nowe kopie zapasowe'
wykonywania kopii zapasowej, do jed- fi
nego, przy starcie, środowiska graficzne-
go KDE. Funkcja spr_serwer() sprawdza, Listing 3. yródło pliku ssh-add.sh
czy nasz laptop ma dostęp do serwera ko-
pii zapasowych, a czysc_tmpy() usuwa #!/bin/bash
pliki tymczasowe, zdefiniowane w zmien- # Program do sprawdzania, czy jest wczytany klucz ssh
nej $do_skasowania przed przystąpieniem # Autor: Sławomir Skrzyniarz
do wykonania kopii zapasowej. Natomiast # Licencja: GPL v2
export-ustawien() kopiuje część ustawień /usr/bin/screen -d
z pliku kopia_zapasowa.sh na serwer do pli- /usr/bin/keychain
ku czysciciel.cfg, wymaganego przez skrypt while (true); do
czysciciel.sh. kopia() i jest to najważniejsza if [[ ! $(ssh-add -l|grep $(whoami)) ]]; then
część skryptu odpowiedzialna za wykona- cat /dev/null|ssh-add # Pyta o hasło za pomocą okienka w
nie kopii zapasowej. Skrypt obsługuje dwa środowisku graficznym
parametry wejściowe. Za pomocą pierw- fi
szego możemy wywołać funkcję inicja- sleep 10
cja(), podając init jako wartość parametru done.
oraz wykonać kopię dla kopia lub skorzy-
stać z krótkiej pomocy dla pomoc. Jeżeli ko- objętość dyskową, gdy nie zastosujemy takich z klientów serwerów czasu pakiet ntp i ntp-
pia została wykonana już danego dnia, to programów jak: logrotate. Jeżeli wszystko client. Klienty zsynchronizują swoje zegary
skrypt odmówi ponownego jej wykonania, działa prawidłowo, a kopie robią się w zapla- z super dokładnymi serwerami czasu i od tej
chyba że podamy drugi parametr nazada- nowanych terminach, to można zrezygnować chwili będzie można regulować zegarki.
nie, pochodzący od zwrotu na żądanie. z logowania zdarzeń i przekierować wynik
Za sprawą przekierowania do pliku /var/ zamiast do /var/log/kopialog to do /dev/null.
log/kopialog w skrypcie /etc/cron.10min/kopia. Skrypt do prawidłowej pracy wymaga
O autorze
zapasowa wszystkie komunikaty, generowane ustawienia aktualnego czasu na laptopie
Autor jest absolwentem AGH, a swoją przy-
przez skrypt kopia_zapasowa.sh są zapisywa- i serwerze, gdzie datę i godzinę można wpro-
godę z Linuxem rozpoczął w 1997 r. Przez
ne w pliku /var/log/kopialog. Pozwala to zdiag- wadzić ręcznie, ale zegary komputerowe, z ra-
3 lata administrował serwerem, natomiast
nozować ewentualne zródła problemów, na- cji swojej niedokładności lub wyczerpania
na co dzień używa dystrybucji Mandriva.
tomiast ilość logów, generowana przez skrypt podtrzymujących ich baterii, będą niedokła-
Kontakt z autorem: diodak@gmail.com
jest dość duża i szybko może zająć znaczną dnie odliczać czas, dlatego warto skorzystać
www.lpmagazine.org 51
Wyszukiwarka
Podobne podstrony:
2007 04 Tworzenie kopii bezpieczeństwa danych [Administracja]
Serwer SQL 2008 Administracja i programowanie
2007 10 Good for the Earth
Instalacja Windows XP i Vista(FORMATOWANIE),tworzenie kopii zapasowej
2007 10 Who Goes There Detecting Movements with Motion
2007 10 Kivio [Open Office]
2007 10 Audyt systemów informatycznych
Ćwiczenia Przywracanie ustawien serwera z kopii bezpieczenstwa
2007 10 Szkoła konstruktorów
Wykonywanie kopii zapasowych i odtwarzanie danych
2007 10 Extreme Programming (XP) i CMMI – Kreatywność, czy Dyscyplina [Inzynieria Oprogramowania]
10 listopad 2007 klucz
2 powszechna 26 10 2007
więcej podobnych podstron