Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: chroot skript << pouze pro zvidave  (Přečteno 6903 krát)

nettezzaumana

  • Host
chroot skript << pouze pro zvidave
« kdy: 11 Července 2008, 02:15:10 »
fujtajbl vespolek >>

vcera jsem trocha badal (s kancem aka diwoczaakem) a vysledek je toto *dite v plenkach* (viz skript nize) ..

skript vytvori a nakonfiguruje adresar s chrootem, nakopiruje tam z beziciho systemu /bin /sbin a /usr/sbin, doplni do lib knihovny, pripoji /proc do chrootu a chrootne se do nej. Ve chrootu lze potom bezpecne provozovat pokusy aka rm -frv / :D, hackovat kamarady a vubec delat ruzna zversta.

po ukonceni chrootu prikazem exit skript odmountne proc a uklidi po sobe smazanim chrootu, takze nezanechava po sobe zadne stopy ..

vyhody ::
1) idealni prostredi na vytvareni napr. vlastniho LFS
2) idealni prostredi na pokusy a ruzna zverstva
3) aplikace spustene z chrootu jsou zdaleka to nejbezpecnejsi co lze mit
4) skript je nekolikrat odzkouseny a v mem prostredi bezi bezvadne, uklizi po sobe, takze po jeho skonceni je system netknuty

omezeni ::
1) chroot neni bohuzel uplne nakonfigurovan (diky pozdni nocni dobe) jak ma, takze tam treba nechodi napr. DNS resolution (ale sit ano)
2) chroot obsahuje pozouze zakladni prostredi CLI
3) skript nutno spoustet jako root (ale potom to bezi ve chrootu, takze by nemelo hrozit zadne nebezpeci)

plans for future ::
1) skript ma byt v budoucnosti generator bootovatelneho fallback .iso image beziciho systemu .. toto je zatim takove demo..
2) 1000+1 rozsireni v v dohledu .. moznosti jsou nekonecne

ad.x) skript napsan "pracovne" a po jeho proletnuti muze byt pokrocilejsimu uzivateli naprosto zrejme, jak si do nej implementovat dalsi aplikace ze systemu, pripadne jak ho jednoduse upravit tak, aby po sobe neuklizel a jenom generoval "base" chrootu. S takovymto zakladem lze dale cvicit, tunit ho a rozsirovat ..

skript je zde ::
Kód: (mkchroot.sh) [Vybrat]
#!/bin/bash

if [ "$UID" -ne '0' ]; then
        echo "sorry. you must run this as root..";
        exit 1;
fi

if [ -z "$1" ] || [ -d "$1" ]; then
        echo "gimme chroot dir to create..";
        exit 1;
fi

CHROOT_DIR="$1";

mkdir $CHROOT_DIR;

for x in bin sbin lib etc proc usr usr/sbin; do
        mkdir $CHROOT_DIR/$x;
done

for x in bin sbin usr/sbin; do
        cp -rv /$x/* $CHROOT_DIR/$x;
done

for x in $(find "$CHROOT_DIR/bin" "$CHROOT_DIR/sbin" "$CHROOT_DIR/usr/sbin"); do
        ldd $x 2>&1;
done | sed '/\s\//!d;s/^[^\/]*//;s/\s.*$//;/:$/d' | sort | uniq >$CHROOT_DIR/libs.final

while read line; do
        cp -v $line $CHROOT_DIR/lib/;
done <$CHROOT_DIR/libs.final

echo -e '/lib\n' >$CHROOT_DIR/etc/ld.so.conf;
ldconfig -r $CHROOT_DIR;

echo -e 'proc\t/proc\tproc\tdefaults\t0 0' >$CHROOT_DIR/etc/fstab;

echo "chrootdir created as $CHROOT_DIR & looks like prepared";

# mountneme /proc a chrootneme se
chroot $CHROOT_DIR mount -a;
chroot $CHROOT_DIR /bin/bash;

# uklid a mazani $CHROOT_DIR
chroot $CHROOT_DIR umount /proc;
rm -rv $CHROOT_DIR;

exit 0;

ukazka, jak to funguje ::
Kód: [Vybrat]
# ./mkchroot.sh /tmp/chroot
... // redakcne vystrizeny debugovaci vypisy, neb jsou dlouhe
chrootdir created as /tmp/chroot & looks like prepared
bash-3.2# ping 10.0.0.138 ## ping na muj router.. sit nam bezi
PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data.
64 bytes from 10.0.0.138: icmp_seq=2 ttl=254 time=1.75 ms
64 bytes from 10.0.0.138: icmp_seq=3 ttl=254 time=1.48 ms
64 bytes from 10.0.0.138: icmp_seq=4 ttl=254 time=1.92 ms
^C
--- 10.0.0.138 ping statistics ---
4 packets transmitted, 3 received, 25% packet loss, time 3020ms
rtt min/avg/max/mdev = 1.481/1.720/1.928/0.190 ms
bash-3.2# ping 77.75.76.3 ## ping na seznam.cz
PING 77.75.76.3 (77.75.76.3) 56(84) bytes of data.
64 bytes from 77.75.76.3: icmp_seq=1 ttl=57 time=24.5 ms
64 bytes from 77.75.76.3: icmp_seq=2 ttl=57 time=24.1 ms
^C
--- 77.75.76.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 24.195/24.354/24.514/0.223 ms
bash-3.2#  ping seznam.cz ## dle Domeny uz to nejde
ping: unknown host seznam.cz
bash-3.2# nmap -vv 127.0.0.1 ## huh, nemame tu nmap
bash: nmap: command not found
bash-3.2# exit
.. // o5 redakcne zkraceno
removed directory: `/tmp/chroot'

predtim jsem si udelal nasledujici prikaz ::
nettezzaumana@kokina:~> du -h /tmp/chroot/ 2>&1 | tail -n 1
116M    /tmp/chroot/

// ze ktereho je patrne, ze pri teto konfiguraci ma chroot pouhych 116M .. bez /usr/sbin jsem spolehlive fungoval ve 30ti ..

doufam, ze se Vam tato vec libi a budete do ni prispivat a rozsirovat ji, neb je to pro zvidavou dusi skutecne bezvadny zaklad (treba k tomu, udelat si vlastni minimalistickej system o velikosti 20MB)

enjoy by ntz ;)
« Poslední změna: 11 Července 2008, 02:45:17 od nettezzaumana »

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #1 kdy: 11 Července 2008, 02:38:11 »
ad.1) dopredu odpovim na nevyslovenou otazku ::
alfa/omega celeho kouzla je v tomto cyklu ::

for x in $(find "$CHROOT_DIR/bin" "$CHROOT_DIR/sbin" "$CHROOT_DIR/usr/sbin"); do
        ldd $x 2>&1;
done | sed '/\s\//!d;s/^[^\/]*//;s/\s.*$//;/:$/d' | sort | uniq >$CHROOT_DIR/libs.final

ten nam vytvori soubor $CHROOT_DIR/libs.final, ktery obsahuje seznam vsech potrebnych knihoven, ktere se linkuji k obsahu nasi chrootovane $PATH .. pokud si teda rucne vytvorite strukturu $PATH vase *custom_chrootu* a pouzijete tento cyklus, tak ten prilinkuje pouze ty knihovny, ktere jsou potreba (resp je zapise do seznamu) .. takze napriklad pokud rucne vlozite so $CHROOT_DIR/bin napriklad nmap jako binarku, tak nepujde pouzit, dokud se k ni v novem chrootu nenakonfiguruji jeji knohovny ..

Takto si lze trebas vytvorit minimalisticky system (treba i x xkama do 100MB), ktery obsahuje pouze to, co skutecne chceme .. nic vic..

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #2 kdy: 11 Července 2008, 15:38:21 »
ad.x) funguje bez zasahu na BSD i Solarisu .. wow
ad.y) Jsou s nim problemy na gentoo .. njn. Tam kde to nejni EMO tak alespon strasi ..

Kazekage

  • Člen
  • **
  • Příspěvků: 256
  • Stand or Die
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #3 kdy: 11 Července 2008, 15:46:59 »
hehe ty vzdy prekvapis nejakym obludnym scriptom


done | sed '/\s\//!d;s/^[^\/]*//;s/\s.*$//;/:$/d' | sort | uniq >$CHROOT_DIR/libs.final

ale inac RESPECT  :)
Asus_F3KA_Ubuntu_8.04_32bit
Desk:A8n32_sli_deluxe, 3700+ Amd_OC, 2GB_ram, 1950xt_ati_radeon: Ferdora_9, Win_XP_pro
Xbox_360_Premium :) flash Nokia_E61_Symbian_S60_3rd_edition Ghost_In_The_Shell Star_Wars_fan  HTC_HD_user

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #4 kdy: 14 Července 2008, 19:15:08 »
Dobra prace, ale nejak mi to konci chybou... a vubec ji teda nerozumim...
Kód: [Vybrat]
chroot: cannot run command `mount': No such file or directory
chroot: cannot run command `/bin/bash': No such file or directory
chroot: cannot run command `umount': No such file or directory

wam]Spider007

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #5 kdy: 14 Července 2008, 19:20:27 »
for x in $(find "$CHROOT_DIR/bin" "$CHROOT_DIR/sbin" "$CHROOT_DIR/usr/sbin"); do
        ldd $x 2>&1;
done | sed '/\s\//!d;s/^[^\/]*//;s/\s.*$//;/:$/d' | sort | uniq >$CHROOT_DIR/libs.final
na com ficis? :D

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #6 kdy: 14 Července 2008, 19:30:19 »

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #7 kdy: 14 Července 2008, 19:33:39 »
Dobra prace, ale nejak mi to konci chybou... a vubec ji teda nerozumim...
Kód: [Vybrat]
chroot: cannot run command `mount': No such file or directory
chroot: cannot run command `/bin/bash': No such file or directory
chroot: cannot run command `umount': No such file or directory
<< hmm. zvlastni

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #8 kdy: 15 Července 2008, 00:32:30 »
<< hmm. zvlastni

No tak mam dalsi zjisteni, pokud to spustim "./mkchroot.sh /tmp/chroot", tak je vystup takovy jako jsem psal vyse.
Pokud spustim "sh mkchroot.sh /tmp/chroot", tak je vystup obohacen na prvnim radku o tohle:
Kód: [Vybrat]
[: 6: Illegal number:Nemely by tyhle dva zpusoby spousteni byt ekvivalentni?
Jinak co sem tak zbezne prohlizel to co to vypisuje, tak to vsechno spravne nakopiruje a take uspesne smaze...akorat k tomu namountnuti nedojde... Nejak tomu nerozumim...

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #9 kdy: 15 Července 2008, 09:33:03 »
Pokud spustim "sh mkchroot.sh /tmp/chroot", tak je vystup obohacen na prvnim radku o tohle:
Kód: [Vybrat]
[: 6: Illegal number:Nemely by tyhle dva zpusoby spousteni byt ekvivalentni?
Nesouvisi to s timto tematem, tak snad nedostanu od ntz vynadano. :-D Kdyztak ten svuj prispevek smaz a ja smazu i ten muj. Tyto dva zpusoby ekvivalentni nejsou. Zatimco ./mkchroot.sh spusti skript v programu, jez je uveden na prvnim radku (/bin/bash), v druhem pripade jej spoustis explicitne pomoci sh, coz je myslim v ubuntu momentalne symlink na /bin/dash. Toz odtud tedy nejspis bude onen rozdil.

Pokud jde o tu chybu, mozna by pomohlo, kdyby jsi uvedl log cely (i to, co tomu predchazi), aby bylo videt, jestli se ti vsechny programy v poradku nakopirovaly.
« Poslední změna: 15 Července 2008, 09:38:55 od kkaarreell »

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #10 kdy: 15 Července 2008, 10:15:36 »
Nesouvisi to s timto tematem, tak snad nedostanu od ntz vynadano. :-D Kdyztak ten svuj prispevek smaz a ja smazu i ten muj..
<< ja uz vim, ktera bije .. ty jsi zenska karliku ..!

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #11 kdy: 15 Července 2008, 10:24:01 »
Aha... Diky za vysvetleni.
Log je ponekud dlouhy na postnuti sem, tak jsem ho nahral na leteckou postu...

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #12 kdy: 15 Července 2008, 10:59:58 »
Aha... Diky za vysvetleni.
Log je ponekud dlouhy na postnuti sem, tak jsem ho nahral na leteckou postu...
<< ale ja v tom logu zadne chyby nevidim .. vypada to v poradku .. zkus sem dat ten log, ale ze skriptu odmaz ten parametr '-v' (verbose) u prikazu cp .. je tam na dvou mistech .. jednou je tam .. cp -rv (zmen na cp -r) a podruhe jenom cp -v ..

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #13 kdy: 15 Července 2008, 12:19:01 »
Jeste jsem zrusil verbose mode u toho uklidu, pokud je to ok...
Vystup je potom takovyhle:
Kód: [Vybrat]
root@Zelvuska:/tmp# ./mkchroot.sh chroot
chrootdir created as chroot & looks like prepared
chroot: cannot run command `mount': No such file or directory
chroot: cannot run command `/bin/bash': No such file or directory
chroot: cannot run command `umount': No such file or directory
root@Zelvuska:/tmp#

Nemuze mi chybet nejaky balik? Na cem vsem to muze zaviset?

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #14 kdy: 15 Července 2008, 13:13:04 »
<< ja uz vim, ktera bije .. ty jsi zenska karliku ..!
Ale prosimte...

Dovolil bych si jednu navrhnout "kosmetickou upravu". Pri praci v "chudem" shellu to muze pridat na prehlednosti.
Kód: [Vybrat]
echo -e 'PS1="(chroot) $PS1"' > $CHROOT_DIR/etc/profile
chroot $CHROOT_DIR /bin/bash --init-file /etc/profile;

Zelvuska: Jsi si jisty, ze jsi ten skript dobre zkopiroval? Mozna se ti nejakej ten dlouhej radek zalomil.

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #15 kdy: 15 Července 2008, 13:56:32 »
..
<< spis si zkus pane experte misto urazeni lamat hlavu s nasledujicim TODO listem ::

1) sitovani .. nejde tam zatim DNS.
2) podpora ramdisku .. chroot by byl idealni do ramdisku

.. ja se o wk chystam na nasledujici veci ::

1) fetchnuti bootu a initu (spis napsani noveho)
2) provazani s mkisofs, takze s prepinacem to vytvori bootovatelne .iso z beziciho systemu ..
3) idealni stav povazuju vytvoreni .iso, vytvoreni bootrecordu na usb disk instalace grubu (na usb disk) a diky tomu dostupny boot celeho pocitace do '/' v ramdisku ..

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #16 kdy: 15 Července 2008, 21:18:15 »
Zelvuska: Jsi si jisty, ze jsi ten skript dobre zkopiroval? Mozna se ti nejakej ten dlouhej radek zalomil.

Jojo kontroloval sem to nekolikrat...

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #17 kdy: 15 Července 2008, 22:52:48 »
Tak s pomoci kkaarreella vyreseno. Navedl me na hledani knihoven potrebnych pro mount a prisli jsme na to, ze ten skript jaksi nepocita s 64-bit systemem, takze sem si ho upravil nasledovne (vlozene kopirovani lib64) a krasne to funguje:

Kód: [Vybrat]
#!/bin/bash

if [ "$UID" -ne '0' ]; then
        echo "sorry. you must run this as root..";
        exit 1;
fi

if [ -z "$1" ] || [ -d "$1" ]; then
        echo "gimme chroot dir to create..";
        exit 1;
fi

CHROOT_DIR="$1";

mkdir $CHROOT_DIR;

for x in bin sbin lib lib64 etc proc usr usr/sbin; do
        mkdir $CHROOT_DIR/$x;
done

for x in bin sbin usr/sbin; do
        cp -r /$x/* $CHROOT_DIR/$x;
done

for x in $(find "$CHROOT_DIR/bin" "$CHROOT_DIR/sbin" "$CHROOT_DIR/usr/sbin"); do
        ldd $x 2>&1;
done | sed '/\s\//!d;s/^[^\/]*//;s/\s.*$//;/:$/d' | sort | uniq >$CHROOT_DIR/libs.final

while read line; do
        cp $line $CHROOT_DIR/lib/;
        cp $line $CHROOT_DIR/lib64/;
done <$CHROOT_DIR/libs.final

echo -e '/lib\n' >$CHROOT_DIR/etc/ld.so.conf;
ldconfig -r $CHROOT_DIR;

echo -e 'proc\t/proc\tproc\tdefaults\t0 0' >$CHROOT_DIR/etc/fstab;

echo "chrootdir created as $CHROOT_DIR & looks like prepared";

# mountneme /proc a chrootneme se
chroot $CHROOT_DIR mount -a;
chroot $CHROOT_DIR /bin/bash;

# uklid a mazani $CHROOT_DIR
chroot $CHROOT_DIR umount /proc;
rm -r $CHROOT_DIR;

exit 0;

Mam tedy navrh na upravu...slo by na zacatek skriptu hodit nejake zjisteni verze systemu? Aby mohl byt jeden skript pro 32 i 64-bit?

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #18 kdy: 15 Července 2008, 22:59:33 »
no, ale to dvoji kopirovani je dost osklivy workaround (plytvani mistem).. jestli neusnu, tak to zkusim vyresit nejak "systemoveji"

ikdyz, nestacilo by to "dvoji" kopirovani jen nahradit timto?
Kód: [Vybrat]
if grep -q "/lib64" $line; then cp $line $CHROOT_DIR/lib64/; else cp $line $CHROOT_DIR/lib/; fi nemam 64 bit, tak to nedovedu overit... a vubec, jdu spat.
« Poslední změna: 15 Července 2008, 23:15:13 od kkaarreell »

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #19 kdy: 15 Července 2008, 23:02:33 »
no, ale to dvoji kopirovani je dost osklivy workaround.. jestli neusnu, tak to zkusim vyresit nejak "systemoveji"

Jak dvoji? jsou to preci dva adresare s knihovnama... Ale pokud prijdes na elegantnejsi reseni, tak klidne  ;)

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #20 kdy: 15 Července 2008, 23:05:16 »
Navedl me na hledani knihoven potrebnych pro mount a prisli jsme na to, ze ten skript jaksi nepocita s 64-bit systemem, takze sem si ho upravil nasledovne (vlozene kopirovani lib64) a krasne to funguje:
<< to je pravda .. ja jsem 64bitovej system nikdy ani nezkousel ..

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #21 kdy: 15 Července 2008, 23:17:24 »
Jak dvoji? jsou to preci dva adresare s knihovnama... Ale pokud prijdes na elegantnejsi reseni, tak klidne  ;)
no, je to dvoji, jelikoz kazdou tu knihovnu ve skriptu zkopirujes jak do lib, tak do lib64... ten predchozi prispevek jsem updatoval. knihovny se roztridi podle toho, jestli je z lib64 nebo ne... ikdyz nevim, jestli to bude stacit, s 64bit platformou nemam zkusenost.
« Poslední změna: 15 Července 2008, 23:20:00 od kkaarreell »

nettezzaumana

  • Host
Re: chroot skript << pouze pro zvidave
« Odpověď #22 kdy: 15 Července 2008, 23:19:32 »
Jak dvoji? jsou to preci dva adresare s knihovnama... Ale pokud prijdes na elegantnejsi reseni, tak klidne  ;)
no, je to dvoji, jelikoz kazdou tu knihovnu zkopirujes jak do lib, tak do lib64... ten predchozi prispevek jsem updatoval. knihovny se roztridi podle toho, jestli je z lib64 nebo ne... ikdyz nevim, jestli to bude stacit, s 64bit platformou nemam zkusenost.
ad.1) takze knihovny se zdvojuji?? nesel by teda udelat spis nejaky generator, kterej by vy{sym}linkoval strukturu /lib64 z /lib ??

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #23 kdy: 15 Července 2008, 23:28:54 »
mozna by i stacilo nechat vsechno v lib, jak to bylo, a jen vytvorit symlink lib64 na lib.. pokud teda v knihovnach neni nejaky konflikt nazvu, to netusim.. asi by to chtelo ty moznosti vyzkouset.. a pak si mezi funkcnimi hodit minci. :-)

Zelvuska

  • Návštěvník
  • *
  • Příspěvků: 85
    • Zobrazit profil
Re: chroot skript << pouze pro zvidave
« Odpověď #24 kdy: 16 Července 2008, 00:01:17 »
Hadam tedy, ze ani jeden nemate 64-bit? Tak postujte skripty, budu zkouset ;)

Edit: tak jak sem si to ted prohlizel by mozna stacily symlinky...

Edit2: Tak se smylinkama to funguje, akorat se mi to nedari dat do nejakeho rozumneho cyklu...
« Poslední změna: 16 Července 2008, 12:19:35 od Zelvuska »

 


Provoz zaštiťuje spolek OpenAlt.