PDA

Visualizza versione completa : Chroot: come funziona e come si usa in parole semplici? Parliamone



Kirk78
27-02-15, 22: 32
Ciao a tutti pinguiniani di CT!

Stavo dando un occhiata al famoso chroot consigliato più volte dai miei amici di CT. Io parlerò per Ubuntu 14.04 (base Debian) che ho installato al momento.
Considerate tutto quello che scrivo con la premessa "se ho capito bene", e ovviamente correggete tutti i miei errori. :tnx

chroot significa "cambia root" (change root), ovvero un "programma" che crea una "finta" (diversa) root protetta che non rischia di danneggiare il sistema operativo principale.
Inoltre si può anche installare anche un'altra versione del sistema operativo senza dover fare il reboot. Insomma una cosa stupenda, sopratutto se si deve "provare" delle applicazioni non supportate da linux, fatte da terzi o provare un'altro sistema operativo (penso comunque della stessa "architettura", quindi per me Debian) come sottosistema operativo senza dover usare la virtualizzazione che potrebbe volere molta più ram!
Tra l'altro serve se il sistema operativo principale non parte.

Ora voglio provare a capire se ho capito come fare a mettere un sotto sistema operativo.
La prima cosa è creare una cartella che sarà la radice, la root, del sotto-sistema operativo. Non ho capito se è obbligatorio farla in / o anche in altra cartella (/mnt ?), quindi

Only registered members can view code.

RIFLESSIONI
Ho visto molti strumenti a supporto del chroot:
debootstrap: esegue il boostrap di un sistema Debian di base (in sh) scando i file .deb da un sito mirror che vengono spacchettati in una directory, esempio proprio quella sopra creata. Dopo si può fare il chroot da quella cartella.
cdebootstrap: simile a debootstrap (in C) ma la sceglie i pacchetti in base alla versione del sistema operativo scelto.
rootstrap: strumento per creare immagini di file system Linux completi.

Con un mirror locale e un unico comando si può creare un file system Debian nuovo in circa 3 minuti su hardware relativamente modesto
e
pbuilder (con debootstrap e consigliato anche devscripts): creatore di pacchetti personali per Debian
schroot: strumento per eseguire pacchetti Debian binari in chroot

Mi sembra interessante cdebootstrap perché posso scgliere la versione, ma mi sembra che anche debootstap lo faccia... quindi non ho ben capito la differenza.

Chroot, dchroot, chrootuid etc
chroot è in coreutils (Utilità GNU essenziali), supportato dalla distribuzione Ubuntu.

dchroot (non (supportato dalla distribuzione Ubuntu)): permette agli utenti di eseguire comandi o shell interattive in diversi chroot. Un'installazione tipica potrebbe fornire chroot "stabile",
"di test" e "instabile". Gli utenti si possono muovere tra i chroot a seconda delle necessità.

schroot (supportato dalla distribuzione Ubuntu): schroot allows users to execute commands or interactive shells in different chroots. Any number of named chroots may be created, and access permissions given to each, including root access for normal users, on a per-user or per-group basis. Additionally, schroot can switch to a different user in the chroot, using PAM for authentication and authorisation. All operations are logged for security.

Chrootuid (supportato dalla distribuzione Ubuntu): rende facile l'esecuzione di un servizio di rete con un livello basso di privilegi e con accesso ristretto al file system. I demoni hanno accesso solamente al proprio albero di directory e sono eseguiti con un userid con pochi privilegi.

Ho visto anche

Only registered members can view code.
ma questo non ho ben capito a cosa serva esattamente (penso se ci sono errori sul sistema base). Inoltre questo sembra abbastanza delicato visto che tutti i comandi dati saranno con accesso root!

Forse è meglio dchroot (che se non avete bisogna installarlo insieme a debootstrap) anche se non è supportato dalla distribuzione Ubuntu (il loghetto di Ubuntu su Synaptic... ma non saprei.

SI CONTINUA
Una volta creata la cartella aggiungere a /etc/dchroot.conf

Only registered members can view code.
Ora bisogna mettere il sistema operativo nella cartella. Per ora, volendo mettere l'utlima versione di Ubuntu, faccio

Only registered members can view code.
In realtà io vorrei installare Xubuntu ma non so cosa fare... Lo metto tra le domande.

Se voglio far partire il sottosistema all'avvio bisogna modificare anche /etc/fstab aggiungendo il filesystem virtuale dei processi

Only registered members can view code.
e lo monto

Only registered members can view code.
copio i file di host e la lista dei repo

Only registered members can view code.
e alla fine il famoso chroot (dchroot?)

Only registered members can view code.
Ora dovrò aggiungere un utente al sottosistema

Only registered members can view code.
Per uscire basta exit.

DOMANDE E DUBBI
- E ora? Suppongo che adesso mi ritrovo a fare tutto con i comandi da terminale (oppure no?): è possibile avere un menù grafico come se avessi un sistema "normale"? Vorrei metterci XFCE. Chiedo troppo senza installare un programma di virtualizzazione?
- Ma quanta ram viene usata utilizzando un sotto sistema con chroot?
- Se invece di Ubuntu volessi scaricare Xubuntu con debootstrap come devo fare?
- Le procedure scritte sono corrette? Oppure consigliate un'altra maniera?
- Differenze tra i vari *chroot*?
- Per "distruggere" quel sottosistema basta cancellare la cartella?

Attendo suggerimenti, correzioni e commenti se volete. Poi passerò alla prova vera e propria. :tnx

Spero che questa discussione sia utile a CT... altrimenti picchiatemi :ghgh

:bai

pierino_89
27-02-15, 23: 33
provare un'altro sistema operativo (penso comunque della stessa "architettura", quindi per me Debian) come sottosistema operativo

Puoi avviare qualsiasi distribuzione i cui binari non si offendano. Che per farla breve significa: non puoi usare una distro a 64bit se il sistema ospitante è a 32, e non puoi avviare una distro così vecchia da essere incompatibile con il kernel attuale.



Ora voglio provare a capire se ho capito come fare a mettere un sotto sistema operativo.
La prima cosa è creare una cartella che sarà la radice, la root, del sotto-sistema operativo. Non ho capito se è obbligatorio farla in / o anche in altra cartella (/mnt ?), quindi

Only registered members can view code.

Puoi farla dove ti pare, a patto che il filesystem supporti i permessi (quindi NO FAT32 e famiglia) e che sia montato con tutte le features del caso abilitate (perlomeno dev, suid, exec).



Mi sembra interessante cdebootstrap perché posso scgliere la versione, ma mi sembra che anche debootstap lo faccia... quindi non ho ben capito la differenza.

L'unica differenza è che cdebootstrap è scritto in C e quindi è molto più veloce ed usa meno ram. Ma probabilmente supporterà meno opzioni perché scrivere in C è più difficile.



Chroot, dchroot, chrootuid etc
"chroot" è il tool di base. "dchroot" e "schroot" sono dei manager per "ambienti chroot multipli". "chrootuid" penso sia equivalente a "chroot+su" in modo da entrare direttamente nell'ambiente chroot come utente non privilegiato.



Ho visto anche

Only registered members can view code.
ma questo non ho ben capito a cosa serva esattamente (penso se ci sono errori sul sistema base). Inoltre questo sembra abbastanza delicato visto che tutti i comandi dati saranno con accesso root!

Affatto. Serve a far funzionare l'ambiente chroot :ghgh
Il primo comando ti serve se hai l'ambiente in un disco diverso. Il secondo e il quarto permettono all'ambiente chroot di condividere le periferiche collegate (su qualsiasi bus). Il terzo serve per condividere lo spazio processi. L'ultimo ovviamente serve per entrare :tong2



Forse è meglio dchroot (che se non avete bisogna installarlo insieme a debootstrap) anche se non è supportato dalla distribuzione Ubuntu (il loghetto di Ubuntu su Synaptic... ma non saprei.
"schroot" e "dchroot" sono strumenti orientati a un uso meno consapevole, con pochi comandi tirano su un sistema da un template, montano il necessario e ti buttano dentro.



Per ora, volendo mettere l'utlima versione di Ubuntu, faccio

Only registered members can view code.
In realtà io vorrei installare Xubuntu ma non so cosa fare... Lo metto tra le domande.

Eh no, leggi meglio cosa fa il comando :tong2 non ti installa ubuntu, ti installa il minimo set possibile di ubuntu. Non ha né l'ambiente desktop, né il server grafico, né niente. Meno che la server nel set più minimale. Non può nemmeno fare il boot perché non c'è il kernel. Hai la shell, i coreutils, apt e poco altro.



DOMANDE E DUBBI
- E ora? Suppongo che adesso mi ritrovo a fare tutto con i comandi da terminale (oppure no?): è possibile avere un menù grafico come se avessi un sistema "normale"? Vorrei metterci XFCE. Chiedo troppo senza installare un programma di virtualizzazione?

Mi sa che hai ancora le idee un po' confuse. Chroot non simula un intero sistema, ti permette solo di eseguire determinati programmi tagliandoli fuori dal resto del filesystem. Per fare questo "presti" all'ambiente chroot tutta una serie di servizi (in primis il kernel) per poter eseguire i programmi. Non avrai mai due processi "init" in esecuzione, due "udev", due "acpid" e così via (anche perché se provi ad avviarli ti insulta malissimo).
Per lanciare un programma con interfaccia grafica non hai bisogno di installare il server X e un DE completo (a meno che non siano dipendenze) ed avviarli (anche perché ti insulta, vedi sopra), è sufficiente per esempio digitare "DISPLAY=:0 xterm" per lanciare xterm sul server X già attivo.

Dal punto di vista della sicurezza, dato che non stai usando un kernel con UML, ricordati che lo spazio dei processi è condiviso (se sei root in chroot puoi comunque killare processi al di fuori del chroot) e che /dev è condiviso quindi root in chroot può montare le unità disco (compresa la /).



- Ma quanta ram viene usata utilizzando un sotto sistema con chroot?

Usi esclusivamente la ram occupata da chroot+bash (perché una shell la stai usando) + i programmi che avvii.



- Se invece di Ubuntu volessi scaricare Xubuntu con debootstrap come devo fare?

Vedi sopra



- Per "distruggere" quel sottosistema basta cancellare la cartella?

Sì ma prima smonta /proc /dev e /sys sennò cancelli pure quelle (di questi tempi non è così grave ma un riavvio non te lo toglie nessuno :tong2).

Kirk78
04-03-15, 00: 09
Mi sa che hai ancora le idee un po' confuse. Chroot non simula un intero sistema, ti permette solo di eseguire determinati programmi tagliandoli fuori dal resto del filesystem. Per fare questo "presti" all'ambiente chroot tutta una serie di servizi (in primis il kernel) per poter eseguire i programmi
Ma va? :ghgh E' proprio perché non ho le idee chiarissime che ho scritto questa discussione quì su CT con "forse" e "per me", altrimenti facevo una guida con dogmi e non con richieste di aiuto.
Poi parecchi articoli trovati (però non su CT), dicono esattamente quello: con chroot si può "montare" un'altra distro anche diversa dal principale basta che abbia la stessa architettura, nel mio caso Debian. Esempi ci sono per "montare" Ubuntu su Debian e viceversa, basta semplicemente cambiare l'URL con quello del sistema scelto. E poi anche te hai appena detto

Puoi avviare qualsiasi distribuzione i cui binari non si offendano
Se "installa il minimo set possibile" e anche apt quindi si può anche installare Server X e un DE suo?
Inoltre se non c'è sicurezza allora chroot a che tapioca serve avviare un'applicazione da "provare" in quell'ambiente? :wall
Sono infatti queste le mie perplessità che accennavi. :wall

:bai

pierino_89
04-03-15, 01: 18
Se "installa il minimo set possibile" e anche apt quindi si può anche installare Server X e un DE suo?

Non è che non si può fare, è la quantità di tempo che perdi. Devi riconfigurare (e a volte riscrivere) i servizi affinché possano convivere. Tipo devi costringere il server X ad ascoltare su una porta diversa (perché la scheda di rete è la stessa), avviarlo su una tty diversa (perché sulla 7 c'è già il tuo) e tutta una serie di cose mortalmente noiose che solitamente non vale la pena fare (perché puoi agganciarti al server X preesistente).

Io per esempio uso schroot perché c'è il DEB di Adobe Air per Debian e installarlo su Gentoo è un suicidio, quindi lancio le applicazioni Adobe Air da lì sul server X che ho già.



Inoltre se non c'è sicurezza allora chroot a che tapioca serve avviare un'applicazione da "provare" in quell'ambiente? :wall
Sono infatti queste le mie perplessità che accennavi. :wall

:baiSe usi un utente non privilegiato è molto più sicuro. Se usi l'utente di root no :ghgh

Comunque penso che troveresti molto più interessante OpenVZ, se vuoi installare un ambiente intero. È "virtualizzazione su containers", sostanzialmente si basa su schroot ma ha delle estensioni (a livello kernel) per separare lo spazio dei processi e per gestire la condivisione della rete e delle periferiche. Guardati la distro Proxmox VE a tal proposito.