¿Cómo ejecutar el command "ls" en el chroot?

Tengo una correa de shell del browser y estoy ejecutando commands de shell en php y retirándolos al browser y acabo de descubrir el command chroot y quiero ejecutar, por ejemplo, ls en el directory raíz en root modificado. De hecho, necesito ejecutar bash -c "ls /" . Intenté esto (lo intenté sin sudo pero no funcionaba):

 sudo chroot ~/projects/jcubic/leash ls 

pero obtuve un error:

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

Cómo uso este command correctamente? ¿Es posible ejecutar ls en un directory raíz diferente?

cuando bash ejecutar chroot sin sudo tengo este error:

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

Solutions Collecting From Web of "¿Cómo ejecutar el command "ls" en el chroot?"

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

Para ejecutar cualquier command dentro del chroot, necesita tener este progtwig disponible en el chroot (ya que no puede usar el progtwig instalado en el / del sistema de files).

La forma más sencilla es copyr /usr/bin/ls a /home/kuba/projects/jcubic/leash/usr/bin/ (también necesitará las bibliotecas compartidas dependientes: ldd /usr/bin/ls ).

Es posible ejecutar ls en una raíz diferente, pero el command ls y todos los files de los que depende deben estar presentes dentro de esa raíz. No hay forma de iniciar el command ls , y luego dentro de ese process cambiar la raíz: ls no tiene esta function.

El objective de un chroot es limitar la visibilidad de los files a aquellos bajo un cierto directory. Cuando ejecuta chroot ~/projects/jcubic/leash ls , el command chroot cambia la raíz de su propio process (cambiar el directory raíz solo afecta el process que lo hace y cualquier process que se ejecute posteriormente), luego intenta ejecutar un ejecutable file llamado ls en un directory en la ruta de búsqueda. Como la raíz ahora es ~/projects/jcubic/leash , el ejecutable debe estar presente en un directory como ~/projects/jcubic/leash/bin .

Si desea tener un sistema normal con los commands habituales en el chroot, debe instalar uno. Herramientas como debootstrap (para instalar un sistema Debian) o herramientas de aprovisionamiento como Docker (que configura un entorno que está restringido y limitado de otras maneras) pueden ayudar.

Si solo quiere el command ls , igual tendrá que copyr más que ls . Para ejecutar ls , deberá copyr el command ls y todos los files de los que depende. Como ls es un progtwig vinculado dinámicamente, necesita su cargador dynamic y todas las bibliotecas dinámicas de las que depende. Ejecute ldd /bin/ls para listr las bibliotecas dinámicas requeridas. Por ejemplo:

 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 

Alternativamente, una forma más simple de explorar es get un binary estáticamente vinculado, por ejemplo de BusyBox (disponible en Debian y derivados como el package busybox-static ).

 cp /bin/busybox . chroot . ./busybox ls