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 /
, 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 ::
#!/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 ::
# ./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