Quick and dirty unix backup – Part 2
filed in Uncategorized on Apr.04, 2008
Pár évvel ezelõtt írtam egy Quick and dirty unix backup nevû tutorialt, ami legalább ekkora részben magamnak is referencia, amikor egy új gépet állítunk be valahova.
A korábbi megoldás netcat-el és inetd-vel mûködött, ami egy kicsit hack-elés, viszont biztonságos — ezen keresztül biztosan nem lehet betörni a gépbe. Viszont a netcat hiányosságai miatt network timeout-ot használ a transzfer befejezésének a jelzésére, ami mindíg is zavart.
Sokat gondolkodtam, hogy hogy lehet ezt korrektebbül csinálni, és nemrég, a technikai mai szintjén már, sikerült összehozni egy jobb megoldást (fõleg az SSH2 és az OpenSSH elterjedésének köszönhetõen).
Ez a megoldás ssh public key-t használ authentikációra, miközben elégségesen megvédi a tároló gépet is attól, hogy ha illetéktelenek hozzáférnének egy másik gép tartalmához, azzal a tároló gépet is veszélyeztessék. Ez nagyon fontos nálunk, ahol elég sok net-en lévõ szerver gép egymásra backup-ol, miközben mindegyik valaminek az “éles” szervere is.
Ugyanilyen fontos, és ez megmarad ebben a megoldásban is, hogy a forrás gép tartalma még helyben titkosításra kerül, tehát a fordított eset sem fordulhat elõ, hogy egy tároló gép illetéktelen kezekbe kerülése esetén az azon lévõ biztonsági másolatokból nem szerezhetõ meg a forrás gép tartalma (jelszavak, adatbázisok, stb).
A forrás gép setup majdnem teljesen ugyanaz, mint a korábbi megoldásban, csak a netcat változik ssh-ra. Tehát a backup-olando gepen, root-kent, crontab -e:
0 6 * * * (/usr/bin/tar zcvf - --exclude=/usr/home/bakker /etc /usr/local/etc /usr/home /var/db/mysql /var/cron /var/mail | /usr/bin/openssl enc -e -k SECRET -blowfish | ssh bakker@SERVER )
Ahol “SERVER” es “SECRET” ertelemszeruen lecserelendo.
Termeszetesen felvehetoek mas konyvtarak is, de a tapasztalatok szerint ezeket a legerdemesebb backup-olni. Hasznalhatjuk a tar “–exclude” opciojat is, “–exclude=’Fun Mail’” pld kiveszi a backup-bol a “Fun Mail” nevu file-t, ezzel helyet es savszelesseget sporolva. (A “-” utan irando, lehet tobb ilyen is egymas utan.)
Még egy dolog kell a backup-olandó gépen, ez pedig egy
ssh-keygen -t rsa
jelszó nélkül, és a file-ok mehetnek a default helyekre. Ezután a root “.ssh” könyvtárában lévõ “id_rsa.pub” file tartalmát másoljuk clipboard-ra.
A cél gép (tároló) setup-ja:
Csináljunk egy “bakker” nevû felhasználót, nem kell neki se jelszó, semmi. A legjobb, ha jelszóval egyáltalán nem tud bejelentkezni. Ez a legtöbb Unix-on “adduser”, vagy “useradd” parancs, OS X-en bonyolultabb, ezért ezt idemásolom:
dscl . -create /Users/bakker
dscl . -create /Users/bakker UserShell /bin/bash
dscl . -create /Users/bakker RealName "Backup Account"
dscl . -create /Users/bakker UniqueID 503
dscl . -create /Users/bakker PrimaryGroupID 1000
dscl . -create /Users/bakker NFSHomeDirectory /Users/bakker
mkdir /Users/bakker
chown bakker /Users/bakker
su bakker
mkdir /Users/bakker/.ssh
touch /Users/bakker/.ssh/authorized_keys
chown bakker /Users/bakker/.ssh/authorized_keys
chmod 600 /Users/bakker/.ssh/authorized_keys
vim /Users/bakker/.ssh/authorized_keys
Ezek után copy-zzuk be a file-ba a clipboard-unkon lévõ public key-t, de kicsit módosítva (elé írva ami kell):
no-pty,no-port-forwarding,command="/Users/bakker/bakker.sh",from="IP.CIM.JON.IDE" ssh-rsa AAAAB.....1795A79 root@forrasgep.hu
Ezután már csak meg kell csinálnunk a /Users/bakker/bakker.sh-t (nyilván a “/Users/” rész az “/home/” ha nem OS X a célgép):
#!/bin/sh
cat -u >/Users/bakker/dataport-`date +%Y%m%d-%H%M%S`-$SSH_CLIENT.dat
find /Users/bakker/ \( -type f \! -ctime -7 -name 'dataport-*' \) -print | xargs rm
Mint látjuk, ez majdnem teljesen ugyanaz, mint a korábbi megoldás scriptje, csak SSH-ra kiélezve, és a régi file-ok törléséért felelõs find is ide kerül.
Egyszerre ennyi, most üzemeltem be ezt a megoldást két gépünk között, holnap leellenõrzöm, hogy minden mûködött-e. Ha kell valamit módosítani, azt átvezetem majd ide is. Addig work in progress.