Tengo la correa de shell del navegador y estoy ejecutando comandos de shell en php y volviéndolos al navegador y acabo de descubrir el comando chroot y quiero ejecutar, por ejemplo, ls
en el directorio raíz en la raíz modificada, de hecho, necesito ejecutarlo bash -c "ls /"
. He intentado esto (lo he intentado sin sudo pero no funcionaba):
sudo chroot ~/projects/jcubic/leash ls
pero tengo error:
chroot: failed to run command ‘ls’: No such file or directory
¿uso este comando correctamente? ¿Es posible ejecutar ls en un directorio raíz diferente?
cuando trato de ejecutar chroot sin sudo, aparece este error:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
chroot
se supone que debe hacer?/
directorio a otro diferente. ¿Necesito tenerbin
en ese directorio para ejecutar comandos?chroot
cárcel de antemano con todos los archivos binarios que desea ejecutar, todas las bibliotecas que necesitan y el cargador dinámico (si su sistema operativo usa uno). Además, solo se puede ejecutar rootchroot
, como descubrió.Respuestas:
Para ejecutar cualquier comando dentro del chroot, debe tener este programa disponible en el chroot (ya que no puede usar el programa instalado en el
/
sistema de archivos).La forma más simple es copiar el
/usr/bin/ls
desde a/home/kuba/projects/jcubic/leash/usr/bin/
(también necesitará las bibliotecas compartidas dependientes:)ldd /usr/bin/ls
.fuente
chroot lucid /bin/bash -c "ls /"
ochroot /var/chroot /bin/bash -c "ls /"
chroot
es un buen lugar para comenzar cuando tenga dudas sobre la sintaxis. Lo mismo para otros comandos (bash
).Es posible ejecutar
ls
en una raíz diferente, pero ells
comando y todos los archivos de los que depende deben estar presentes dentro de esa raíz. No hay forma de iniciar ells
comando, y luego dentro de ese proceso cambiar la raíz:ls
no tiene esta característica.El objetivo de un chroot es limitar la visibilidad de los archivos a los de un determinado directorio. Cuando ejecuta
chroot ~/projects/jcubic/leash ls
, elchroot
comando cambia la raíz de su propio proceso (cambiar el directorio raíz solo afecta el proceso que lo hace y cualquier proceso que ejecute posteriormente), luego intenta ejecutar un archivo ejecutable llamadols
en un directorio en la ruta de búsqueda. Como la raíz está ahora~/projects/jcubic/leash
, el ejecutable debe estar presente en un directorio como~/projects/jcubic/leash/bin
.Si desea tener un sistema normal con los comandos habituales en el chroot, debe instalar uno. Pueden ayudar herramientas como debootstrap (para instalar un sistema Debian) o herramientas de aprovisionamiento como Docker (que configura un entorno que está fragmentado y confinado de otras maneras).
Si solo desea el
ls
comando, aún tendrá que copiar más dels
. Para ejecutarls
, deberá copiar ells
comando y todos los archivos de los que depende. Dado quels
es un programa vinculado dinámicamente, necesita su cargador dinámico, así como todas las bibliotecas dinámicas de las que depende. Ejecuteldd /bin/ls
para enumerar las bibliotecas dinámicas necesarias. Por ejemplo:Alternativamente, una forma más sencilla de explorar es obtener un binario estáticamente vinculado, por ejemplo, BusyBox (disponible en Debian y derivados como
busybox-static
paquete).fuente