Incron (2. dio)
U prošlom članku predstavili smo incron, njegove mogućnosti i zadali jedan incron job primjera radi. U nastavku ćemo dati pravi primjer iz prakse i objasniti još neke stvari o incronu.
Kolega sistemac, odnosno njegov IT odjel, dobio je zadatak popunjavati web stranice sadržajem (uglavnom slike i nešto video sadržaja) kojeg FTP-om dostavljaju vanjski suradnici i djelatnici u određen direktorij svog korisničkog računa. Dogovoreno je da će obavijesti o novom sadržaju stizati nama na mail, ali kako se moglo i pretpostaviti, obavijesti su stizale sa zakašnjenjem ili nikako.
Potražili smo rješenje pomoću crona koji bi provjeravao direktorij svakih 10 minuta, ali smo otkrili incron koji upravo ovakve poslove znatno olakšava.
Za postojećeg korisnika postavili smo ovakav incrontab:
/home/korisnik/files/ IN_CREATE /usr/bin/mail -s Postavljene_nove_datoteke root
Obratite pažnju na to da smo u naslovu poruke stavili podvlake umjesto navodnika, jer incrontab ne podržava ekspanziju posebnih znakova kao shell. Tako nije moguće raditi nikakvu redirekciju sa znakovima >, <, >> i drugima, zvjezdicu, navodnike i druge znakove koje shell interpretira posebno. Ovdje će naredbi mail svaka "riječ" iza nje biti proslijeđena kao parametar.
Da smo naslov ostavili bez razmaka, poruka naslova "Postavljene" otisla bi korisnicima "nove", "datoteke" i "root". Ukoliko želite veću fleksibilnost, morat ćete napraviti skriptu kojoj ćete proslijediti primatelje maila.
Incron neće korisnika upozoriti na probleme u konfiguraciji, nego će tiho odustati od izvršavanja ili čak obrisati problematičnij redak. Primjerice, koristenje tabova u incrontabu neće prijaviti nikakvu grešku kod postavljanja, ali će obrisati redak i jedino će u datoteci /var/log/syslog pisati:
incrond[591]: access denied on /nekidri/#011IN_CREATE#011/usr/bin/mail - events will be discarded silently
Nemojte koristiti direktorij /tmp za testiranja. To je sistemski direktorij gdje se neprestano nešto zapisuje ili briše, pa ćete biti zatrpani mailovima ili tisućama bespotrebnih operacija što može zagušiti vaš poslužitelj
Za drugi primjer iskoristit ćemo isti folder, samo ćemo incron koristiti da napravimo backup sadržaja direktorija, odnosno kompletno zrcalimo na drugi server pomoću naredbe rsync.
/home/upload/files/ IN_CLOSE_WRITE,IN_CREATE,IN_DELETE /usr/bin/rsync -ap /home/upload/files korisnik@server2.domena.hr:backup
Ovime smo zadali da pri svakoj promjeni unutar direktorija /home/korisnik/files, cijeli direktorij bude kopiran na drugi server. Ovo je jako praktično ako planirate napraviti redundantni web site, ali ni korisnost instant kopije korisničkih (ili vaših) podataka nije za odbacivanje.
Naravno, prema potrebama ćete podesiti koje ćete "evente" pratiti, hoćete li brisati ili gaziti podatke na drugom serveru i tako dalje. Kako omogućiti rad rsynca bez upisivanje zaporke potražite na adresi https://sysportal.carnet.hr/node/999 .
Neki incron koriste kao mali IDS (Intrusion Detection System). Umjesto da upogonite cijeli IDS, možete se osloniti na incron da vam javlja promjene u ključnim datotekama: /etc/passwd, /etc/shadow, /etc/group, direktoriju /home. I promjene u drugim datotekama i direktorijima mogu ukazati da je dodan novi korisnik ili se nešto na sustavu promijenilo bez vašeg znanja.
Uvijek koristite pune putanje (path) do naredbi, iz sigurnosnih razloga, a i korisnik root možda nema taj direktorij u stazi.
Spomenuli smo sigurnost, odnosno da "po defaultu" nijedan korisnik nema pravo izvršavati incron jobove. U prvom tekstu smo jednostavno obrisali kontrolne datoteke incron.allow i incron.allow, onemogućiivši tako bilo kakvu sigurnosnu kontrolu.
Možda niste bili svjesni, ali i standardni cron ima isti mehanizam zaštite, pa da vidimo kako on radi:
Ako postoji /etc/incron.allow, samo korisnici koji su navedeni unutra mogu koristiti incron.
Ako postoji /etc/incron.deny, izvršavanje incron jobova je zabranjeno za korisnike navedene u toj datoteci.
Ovo vrijedi čak i za root korisnika! Pokušajmo izlistati sadržaj incrontaba s opcijom "-l" ("--list"):
# incrontab --list user 'root' is not allowed to use incron
Što ako se koriste obje datoteke a isti se korisnik nalazi u obje? U tom slučaju, prednost ima "allow" datoteka, te se "incron.deny" ni ne gleda.
Koju ćete od ove dvije datoteke koristiti, na vama je, a vjerojatno će ovisiti o tome koliko korisnika morate upisati u datoteku. Vjerojatno će vam biti lakše ako koristitie samo "incron.allow".
Za kontrolu incron jobova imamo postavke koje su ekvivalentne onima za crontab. Opciju za ispis joba smo već vidjeli (opcija "--list" ili "-l"), a također i za uređivanje incrontaba ( "--edit" ili "-e").
Za brisanje joba koristimo "--remove" ili "-r":
# incrontab --remove removing table for user 'root' table for user 'root' successfully removed
Ništa lakše. Osim ove, imamo i mogućnost prikaza poslova određenog korisnika "--user" ili "-u". No, opcija koju crontab nema jest "--reload" ili "-d" (ovdje pripazite ako ćete koristiti kratki oblik, jer "-r" znači brisanje).
Ova opcija govori glavnom procesu incrond da napravi reload tablice i primjeni stara pravila na nove datoteke (ili da ponovo pokrene ciklus za event IN_ONESHOT). Ovo je na određeni način obrnuto od onoga što radi "kill -HUP", koji govori procesu da ponovo pročita konfiguraciju koja se promijenila.
Ako želite isprobati testnu konfiguraciju incron.conf-a, možete je zapisati u neku drugu datoteku i taj naziv proslijedit: "--config=lokacija" ili "-f lokacija", no sumnjamo da ćete je ikada zatrebati.
To su ujedno i sve opcije koje podržava incrontab.
Najsvježiji verziju incrona možete naći na adresi: http://inotify.aiken.cz/?section=incron&page=about&lang=en
Umjesto toga uvijek možete koristiti verziju koju je Debian zapakirao u trenutnoj distribuciji.
- Logirajte se za dodavanje komentara
- Inačica za ispis
- PDF version