Come eseguire il comando "ls" nel chroot?


8

Ho il browser leash shell e sto eseguendo i comandi shell in php e li ritroverò nel browser e ho appena scoperto il comando chroot e voglio correre ad esempio lssulla directory root su root modificato, infatti devo eseguire bash -c "ls /". Ho provato questo (ho provato senza sudo ma non funzionava):

sudo chroot ~/projects/jcubic/leash ls

ma ho ricevuto un errore:

chroot: failed to run command ‘ls’: No such file or directory

posso usare questo comando correttamente? È possibile eseguire ls su directory root diverse?

quando provo ad eseguire chroot senza sudo ho questo errore:

chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted

3
Capisci cosa chrootdovrebbe fare?
Satō Katsura,

1
@SatoKatsura Se ho capito bene cambio /directory a un'altra. Devo avere binin quella directory per eseguire i comandi?
jcubic,

8
Sì: è necessario popolare chrootpreventivamente il jail con tutti i file binari che si desidera eseguire, tutte le librerie di cui hanno bisogno e il caricatore dinamico (se il sistema operativo ne utilizza uno). Inoltre, è possibile eseguire solo root chroot, come hai scoperto.
Satō Katsura,

Risposte:


12
chroot: failed to run command ‘ls’: No such file or directory

Per eseguire qualsiasi comando all'interno del chroot, è necessario che questo programma sia disponibile nel chroot (poiché non è possibile utilizzare il programma installato nel /file system.

Il modo più semplice è copiare il /usr/bin/lsda a /home/kuba/projects/jcubic/leash/usr/bin/(avrai anche bisogno delle librerie condivise dipendenti:) ldd /usr/bin/ls.


Ho trovato questo articolo su help.ubuntu.com, come dovrei eseguire chroot, perché non riesco a trovare quelle informazioni. Dovrei correre chroot lucid /bin/bash -c "ls /"ochroot /var/chroot /bin/bash -c "ls /"
jcubic il

@jcubic dipende molto da ciò che vuoi ottenere. La pagina di manuale per chrootè un buon punto di partenza quando si hanno dubbi sulla sintassi. La stessa cosa per altri comandi ( bash).
Jakuje,

5

È possibile eseguire lsin una radice diversa, ma il lscomando e tutti i file da cui dipende devono essere presenti all'interno di quella radice. Non c'è modo di avviare il lscomando, quindi all'interno di quel processo cambia il root: lsnon ha questa funzione.

Il punto centrale di un chroot è limitare la visibilità dei file a quelli in una determinata directory. Quando si esegue chroot ~/projects/jcubic/leash ls, il chrootcomando modifica la radice del proprio processo (la modifica della directory principale influisce solo sul processo che esegue e su qualsiasi processo che viene successivamente eseguito), quindi tenta di eseguire un file eseguibile chiamato lsin una directory sul percorso di ricerca. Poiché il root è ora ~/projects/jcubic/leash, l'eseguibile deve essere presente in una directory come ~/projects/jcubic/leash/bin.

Se vuoi avere un sistema normale con i soliti comandi nel chroot, devi installarne uno. Strumenti come debootstrap (per installare un sistema Debian) o strumenti di provisioning come Docker (che imposta un ambiente chroot e che è confinato in altri modi) possono aiutare.

Se vuoi solo il lscomando, dovrai comunque copiarne più di ls. Per eseguire ls, dovrai copiare il lscomando e tutti i file da cui dipende. Poiché lsè un programma collegato dinamicamente, è necessario il suo caricatore dinamico e tutte le librerie dinamiche da cui dipende. Esegui ldd /bin/lsper elencare le librerie dinamiche richieste. Per esempio:

mkdir -p bin lib/x86_64-linux-gnu
rsync -a /bin/ls bin/
rsync -a /lib/x86_64-linux-gnu/ lib/x86_64-linux-gnu/
chroot . ls

In alternativa, un modo più semplice per esplorare è quello di ottenere un binario collegato staticamente, ad esempio BusyBox (disponibile su Debian e derivati ​​come busybox-staticpacchetto).

cp /bin/busybox .
chroot . ./busybox ls
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.