{"id":33,"date":"2012-09-28T11:15:31","date_gmt":"2012-09-28T09:15:31","guid":{"rendered":"http:\/\/clark.tipistrani.it\/?p=33"},"modified":"2012-09-28T11:53:55","modified_gmt":"2012-09-28T09:53:55","slug":"chroot","status":"publish","type":"post","link":"http:\/\/clark.tipistrani.it\/?p=33","title":{"rendered":"Chroot"},"content":{"rendered":"<p><a href=\"http:\/\/http:\/\/it.wikipedia.org\/wiki\/Chroot\" target=\"_blank\">Chroot<\/a><br \/>\nchroot, contrazione di change root, \u00e8 un metodo di sicurezza usato per isolare i limiti operativi di una applicazione.<br \/>\nIl nome deriva dal termine informatico root che indica la directory principale del sistema operativo in cui sono contenute tutte le altre directory.<br \/>\nNormalmente un software pu\u00f2 accedere a tutti i dischi e le risorse del sistema operativo, compatibilmente con i permessi; l&#8217;operazione di chroot consiste nell&#8217;eseguire il programma bloccato dentro una sottodirectory, permettendogli di accedere solo alle risorse di cui ha strettamente bisogno. La sottodirectory in questione viene anchessa denominata chroot e deve contenere una copia (di solito un hard link) di tutti i file di sistema richiesti dal software. Nel caso di sistemi Unix \u00e8 necessaria anche un copia dei device file a cui il programma deve accedere.<br \/>\nNormalmente se un hacker riesce a prendere il controllo di una applicazione, avr\u00e0 tutti i privilegi associati all&#8217;applicazione e potrebbe essere in grado di compromettere la sicurezza dell&#8217;intero sistema, ad esempio installando un rootkit.<br \/>\nAl contrario se il programma compromesso si trova in un chroot non potr\u00e0 uscire dal perimetro; potr\u00e0 cambiare il contenuto di file del programma stesso, ma senza poter accedere ad altre risorse.<br \/>\nNormalmente le funzioni necessarie a mettere in pratica il chroot sono implementate direttamente nel kernel del sistema operativo.<\/p>\n<p>Con Debian un buon sistema di realizzare un ambiente chrooted \u00e8 usare debootstrap, debootstrap permette di installare debian in un sistema senza disco di installazione ma anche di creare in modo molto semplice degli ambienti chroot.<br \/>\nL&#8217;utilizzo di questi due programmi permette in modo relativamente semplice di mettere in produzione dei servizi sicuri limitando i danni in caso di intrusione.<br \/>\nQuesta realizzazione \u00e8 stata fatta usando una Squeeze (attualmente stable) in cui e&#8217; stata installata una squeeze, scelta che a prima vista puo&#8217; sembrare bizzarra ma e&#8217; dettata dalla necessita&#8217; di usare stable per la successiva configurazione dei servizi.<br \/>\nLa macchina su cui \u00e8 stata installata Squeeze e&#8217; un vecchio server Dell Poweredge T100 che in seguito \u00e8 stata usata per mettere in produzione un server <a href=\"http:\/\/it.wikipedia.org\/wiki\/File_Transfer_Protocol\">FTP<\/a>.<\/p>\n<p>Durante il setup della macchina che al solito ha il nome di una nave della flotta della Marina Italiana (Grecale) oltre alle consuete \u00e8 stato creata una partizione con\u00a0 mount point \/jail, e questo sar\u00e0 pi\u00f9 chiaro nella parte relativa al server FTP in \/etc\/fstab \/jail appare in questo modo:<br \/>\nUUID=ec765a5c-42c0-41d9-91cb-27405f7eed14 \/jail\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ext3\u00a0\u00a0\u00a0 defaults,acl\u00a0\u00a0\u00a0 0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2<br \/>\nin altre parole su questo filesystem imponiamo la condizione che le ACL Posix abbiano effetto.<br \/>\nUna volta finito il setup base che comprende anche un server ssh per poter raggiungere la macchina da remoto,una volta installato col solito apt-get install debootstrap per debootstrap, definiamo per comodita&#8217; una variabile che indichi la nostra directory<br \/>\nexport MY_CHROOT=\/jail<br \/>\nquindi con:<br \/>\ngrecale:\/#debootstrap\u00a0 &#8211;arch i386 squeeze $MY_CHROOT \\ http:\/\/ftp.it.debian.org\/debian<br \/>\nandiamo a installare un sistema minimale nella partizione\u00a0 assegnata.<br \/>\nDopo aver atteso che l&#8217;installazione abbia terminato,si modifica il file \/etc\/fstab con:<br \/>\necho &#8220;proc $MY_CHROOT\/proc proc defaults 0 0&#8221; &gt;&gt; \/etc\/fstab<br \/>\necho &#8220;sysfs $MY_CHROOT\/sys sysfs defaults 0 0&#8221; &gt;&gt; \/etc\/fstab<br \/>\ne montiamo con:<br \/>\nmount proc $MY_CHROOT\/proc -t proc<br \/>\nmount sysfs $MY_CHROOT\/sys -t sysfs<br \/>\nConfiguriamo un minimo di networking nel sistema chroot con un<br \/>\ngrecale:\/# cp \/etc\/hosts $MY_CHROOT\/etc\/hosts<br \/>\na questo punto si puo&#8217; attivare l&#8217;ambiente chroot con:<br \/>\nchroot $MY_CHROOT \/bin\/bash<br \/>\nIl comando ci trasferisce&#8217; nell&#8217;ambiente chrootato e possiamo ad esempio installare vim che serve sempre, N.B. al apt-get-install vim che si tirera&#8217; dietro tutte le necessarie dipendenze\u00a0 dira&#8217;\u00a0 che i pacchetti non possono essere autenticati dare y per continuare.<br \/>\nSeguendo questa procedura abbiamo un chroot di squeeze aggiornato e funzionante.<br \/>\nNota a margine<br \/>\novviamente con questo sistema al primo reboot della macchina il\/i servizi\/o che girano chrootati non saranno pi\u00f9 disponibili quindi bisogna mettere in avvio di macchina un &#8220;qualcosa&#8221; che li faccia partire nello specifico ho risolto con questo script chroot_start messo nella \/etc\/init.d superiore cio\u00e8 non chrootata che provvede a entrare nella chroot e a chiamare un altro script (jail) nell&#8217;ambiente chroot che a sua volta alza i\/il\u00a0 servizi\/o che serve<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chroot chroot, contrazione di change root, \u00e8 un metodo di sicurezza usato per isolare i limiti operativi di una applicazione. Il nome deriva dal termine informatico root che indica la directory principale del sistema operativo in cui sono contenute tutte le altre directory. Normalmente un software pu\u00f2 accedere a tutti i dischi e le risorse [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,7,6],"tags":[],"class_list":["post-33","post","type-post","status-publish","format-standard","hentry","category-linux","category-sistemi-operativi","category-work"],"_links":{"self":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/33","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=33"}],"version-history":[{"count":2,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":52,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=\/wp\/v2\/posts\/33\/revisions\/52"}],"wp:attachment":[{"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clark.tipistrani.it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}