suns
system network data news bugtraq
sexy unix security project
system > FreeBSD jaili (3) 25.12.2003 17:33

Jaaatceraas, ka uz datoriem, kur izmanto jailus, parasti atshkjir divas vides: dotaa hosta (sisteemas.. whatever) vidi un jaila vidi. Hosta vide ir reaalaas opereetaajsisteemas vide, kura tiek izmantota interfeisu konfiguraacijai un jailu palaishanai. Taalaak ir viena vai vairaakas jaila vides, citiem vaardiem - virtuaalas FreeBSD sisteemas.


Naska atkaapiite..

Ieksh FreeBSD 4.x ir jaili, ieksh FreeBSD 5.x ir jailng. Atshkjiriiba ir, bet ne paaraak liela. Jaanjem veeraa tas, ka shitais raksts tika saakotneeji rakstiits tais laikos, kad zaale bij zaljaaka un kad praktiski neviens veel nelietoja FreeBSD 5.x, kursh tajaa laikaa bija veel stipri current (kaa veelaak izraadiijaas, arii ilgi peec 5.0). Taapeec paarsvaraa, te iet runa par 4.x. Vislielaakaa atshkjiriiba ir tur, ka ir paraadiijies devfs, kursh nebuut nav peljams. Taapeec 5.x lietotaajiem buutu jaaignoree visas noraades par MAKEDEV, un vienkaarshi jaamontee devfs (gluzhi kaa procfs) tur, kur jaabuut devaisiem. Nudien nekaa sarezhgjiita.


Uzstaadiishana

Lai arii jailus var izmantot dazhaados veidos, tomeer saakotneeji tika paredzeets, ka prieksh katra jaila tiek uztaisiita pilniiga (atsevishkja) FreeBSD instalacija. Tai jaaietver visus nepiecieshamos sisteemas binaaros failus, datu failus un savu /etc direktoriju. Pateicoties tam, jaili ieguust pilniigu neatkariibu no sisteemas un vairs nekaadiigi nevar to ietekmeet. Taapeec taads piemeers:

hostname# mkdir -p /te/ir/jails
hostname# cd /usr/src
hostname# make world DESTDIR=/te/ir/jails
hostname# cd etc
hostname# make distribution DESTDIR=/te/ir/jails
hostname# cd /te/ir/jails/dev
hostname# sh MAKEDEV jail
hostname# cd /te/ir/jails
hostname# ln -sf dev/null kernel

Taadaa veidaa mees uztaisam jailam nepiecieshamo failu sisteemas hierarhiju, kura veelaak kalpos jailam par sakni ('/'). Taadiem noluukiem reizeem ir veseliigi izmantot atsevishkju cieto disku vai partriiciju (leibelu), lai arii tas nav obligaati.

Saciit-jaasaka, ka iepriekshmineetajaas komandaas viss bij ljoti simpaatiski. Tikai tur ir rindinja, kuraa ir 'make world'. tas noziimee, ka uz sisteemas jaabuut sourceem (src-all kolekcijai). Un cerams, ka lielaakaa dalja lasiitaaju jau ir iepazinusies ar sisteemas buildoshanu. Ja nav, tad naaksies lasiit handbooku, saakt var teiten. Gadiijumaa, ja binaarie jau ir uzbuildoti (ar make buildworld vai make world ieprieksh), tad 'make world' vietaa ieteicams izmantot 'make installworld'. Vienkaarshi 'make installworld DESTDIR=/te/ir/jails'. Taa buus daudz aatraak.

Jaatceraas, ka jailos deemoni vairs neklausiisies (kas parasti notiek peec nokluseejuma) visas IP adreses, kas ir pieejamas uz sisteemas, bet tikai to, kura ir pieejama jailam (kuru mees noraadaam palaizhot jailu). Kaa ar jebkuru FreeBSD instalaaciju, arii tagad vaidzees pilniibaa nokonfigureet sisteemu (ar dazhiem iznjeemumiem). Varbuut kaadam liksies vienkaarshaak konfigureet sisteemu ar sysinstall paliidziibu. Prieksh tam ir tikai nepiecieshams nokopeet /stand/sysinstall failu ieksh jaila.

Taalaak mums buus nepiecieshams palaist jailu, lai pakonfigureetu to no iekshas. Prieksh tam palaizham shaadu komandu:

hostname# jail /te/ir/jails jailhostname 192.0.2.24 /bin/sh

Kaa rezultaataa, mums paraadiisies shells jau ieksh jaila. teiten mees noraadam, kur atrodas jails (/te/ir/jails), taa hostneimu (jailhostname), IP adresi (192.0.2.24) un komandu, kura ir jaapalaizh (/bin/sh).

Kad tas izdariits, dikti iesaku pameegjinaat komandas 'top', 'pwd', 'ps -aux' utt. Pirmajaa reizee dikti jauks iespaids - tik 1kaarshi un jauki :>

Tagad var palaist to pashu /stand/sysinstall un sakonfigureet sisteemu. Veel var pachikaat /etc/rc.conf un ielikt tur savas izmainjas.

Un ir veel diezgan daudzi siikumi, kurus ieteicams nokonfigureet, lai izvairiitos no probleemaam turpmaak. Saakumaa uztaisiisim tukshu /etc/fstab failu, lai bootoshanaas laikaa nebuutu pazinjojumu par to, ka truukst fstaba:

jailhostname# touch /etc/fstab

Vajag nokonfigureet taa, lai jailaa nemeklee tiikla interfeisus, jo tie jau ir sakonfigureeti. Tamdeelj liekam rindu network_interfaces="" ieksh /etc/rc.conf, daram sekojoshi:

jailhostname# echo network_interfaces=\"\" >> /etc/rc.conf

Taalaak pareizi jaanokonfiguree /etc/resolv.conf, jaauzliek roota parole (ljoti praatiigi buutu uzlikt atshkjiriigu no hosta paroles). Jaauzliek arii laika zona un kautkas jaanokonfiuree savaam vajadziibaam.


Starteeshana

Mees jau ieprieksh palaidaam jailu, kas kaa izraadiijaas nu pavisam nav sarezhgjiiti. Tomeer parasti jailus palaizhot izpildaas /etc/rc skripts, lai jails vareetu darboties pilniibaa un visi nepiecieshamie deemoni tanii grieztos ka prieks. Arii tas ir 1kaarshi:

hostname# jail /te/ir/jails jailhostname 192.0.2.24 /bin/sh /etc/rc

Kad mees palaidiisim sho komandu, paraadiisies paaris briidinaajumi, jo sisteemai (jailam) nebuus pietiekami tiesiibu, lai veiktu visas operaacijas, kuras tai liek skripts (paarsvaraa darbiibas ar sysctl), bet tos pazinjojumus droshi var ignoreet.


Aardiishanaas

Galvenais, ko vaidzeetu atcereeties ir tas, ka komandas halt, reboot un shutdown nevar palaist no jaila. Taapeec ir cits panjeemiens, kaa paartraukt jaila darbiibu (no jaila iekshienes). Shim noluukam ir jaanosit visi procesi jailaa, to var izdariit sekojoshi:

jailhostname# kill -TERM -1

vai arii:

jailhostname# kill -KILL -1

..atkariigs no taa, kas ir nepiecieshams.

Taalaak jaaatceraas, ka, ja ir nepiecieshams /proc (procfs), tas taa ir atsevishkji jaapiemontee uz pasha hosta (jailiem ir liegta iespeeja monteet). Bet es domaaju, ka biezhi vien bez taa var itin labi iztikt. Biezhi pat /proc netiek monteets uz parastaam sisteemaam, lai sleeptu peec iespeejas vairaak informaacijas par to. Un tomeer, ja rodaas veeleeshanaas piemonteet procfs, daraas tas vienkaarshi (pie nepiecieshamiibas ieliekas arii ieksh hosta fstaba):

hostname# mount -t procfs proc /te/ir/jails/proc

Un pats pats peedeejais, ko veel var izdariit lietas labaa, ir aizliegt mainiit hostneimus no jaila. No droshiibas viedoklja tas vareetu buut noderiigi, lai nevareetu manipuleet ar informaaciju ieksh /proc (uz hosta). Taapeec ir ieteicams izpildiit shaadu komandu (un ja ir nepiecieshams iekljaut ieksh /etc/sysctl.conf):

hostname# sysctl jail.set_hostname_allowed=0

Siikums, bet..

Viss jau buutu dikti jauki, bet ir viens bet.. (kaa vienmeer).. Pienjemsim shaadu situaaciju - lietotaajam ir parasts akkaunts (bez root tiesiibaam) uz baazes sisteemas un roots ieksh jaila. Kuul. Lietotaajs uztaisa suid binaaro ieksh jaila un palaizh to no baazes sisteemas ar parasta lietotaaja tiesiibaam.. (kaa rezultaataa binaarais fails palaizhaas ar root tiesiibaam (aarpus jaila)). Nav forshi, vai ne? Bet tam visam ir tikpat vienkaarshs risinaajums: pienjemsim, ka jails ir direktorijaa /usr/jail/j1, daram sekojoshi:

hostname# chmod 700 /usr/jail
hostname# chmod 755 /usr/jail/j1

Nu ir labaak.


Bonuss FreeBSD 5.x lietotaajiem

Es jau piemineeju, ka ieksh 5.x FreeBSD ir jailng. Ir jaunas fishkas paraadiijushaas. Ir paraadiijusies komanda 'jls', kura paraada, kaadi jaili uz sisteemas griezhaas. Tas izskataas apmeeram shaadi:

hostname# jls
JID IP Address Hostname Path
3 192.168.1.20 www /jail/www
2 192.168.1.10 dns /jail/dns
1 192.168.1.30 db /jail/db

Diemzheel jls komandai ir nelaaga iipashiiba. Seciiba, kaadaa tiek paraadiiti jaili ir diezgan murgaina. Iipashi, kad jaili tiek killoti un atkal laisti peec tam. Iipashi tad, kad jailu ir daudz. Bet pie taa naaksies pierast.

Bet tas nav viss. Veel ir modificeeta komanda killall. Tagad ar killall komandu var killot jailus (patiesiibaa, visus procesus, kas griezhas ieksh konkreeta jaila), nevis tikai procesus atsevishkji. Tas arii ir ljoti vienkaarshi. Piemeeram, ja man ljoti gribaas nosist www jailu no ieprieksheejaa parauga, man jaakillo 3. jails (JID ir 3). Laizham sho komandu un no www jaila vairs nav ne smakas:

hostname# killall -j 3

Fantastiski.. Kaa veel truukst? Nekaa, jo ir komanda 'jexec', ar kuras paliidziibu var palaist komandu eksiteejoshaa jailaa. Tas arii daraas ljoti forshi. Teiksim, lai paarstarteetu named procesu ieksh dns jaila (JID ir 2), man buutu jaaizpilda shaada komanda:

hostname# jexec 2 named restart

Pilniigi nekaa sarezhgjiita.


Veel es (un ne tikai) esmu sarakstiijis prieksh sevis (un ne tikai) dazhus jail skriptinjus, tos var atrast teiten te.

Shodienai tas arii viss. Papildus informaaciju par jailiem var palasiit jail(8) manuaalii.

/ petruha - http://petruha.bsd.lv/ /
comments
ruzhe:
gribas vēl piebilst par 5.X jailu fīčām.
http://www.devco.net/archives/2005/02/13/managing _jails_on_freebsd_5.php
petruha:
ruzhe, ak, bet raksta tapshanas briidii taadas shtelles veel nemaz ar veel nebija.
noisex:
jap...noderiga lieta...ari tiek izmantota :)
add comment*
author:
email:
piecpadsmit:
comment:


* ja iztiksi bez spama, offtopika un muljkjiibaam, iespeejams, ka tavs koments netiks izdzeests.
« back

valid xhtmlvalid css