J'ai une laisse de shell de navigateur et j'exécute des commandes shell en php et les conserve dans le navigateur et je viens de découvrir la commande chroot et je veux exécuter par exemple ls
sur le répertoire racine sur la racine modifiée, En fait, je dois exécuter bash -c "ls /"
. J'ai essayé ceci (j'ai essayé sans sudo mais cela ne fonctionnait pas):
sudo chroot ~/projects/jcubic/leash ls
mais erreur:
chroot: failed to run command ‘ls’: No such file or directory
utiliser cette commande correctement? Est-il possible d'exécuter ls sur un répertoire racine différent?
quand j'ai essayé d'exécuter chroot sans sudo j'ai cette erreur:
chroot: cannot change root directory to '/home/kuba/projects/jcubic/leash': Operation not permitted
chroot
est censé faire?/
répertoire en un autre. Dois-je avoirbin
dans ce répertoire pour exécuter des commandes?chroot
prison à l'avance avec tous les fichiers binaires que vous souhaitez exécuter, toutes les bibliothèques dont ils ont besoin et le chargeur dynamique (si votre système d'exploitation en utilise un). Seul root peut également fonctionnerchroot
, comme vous l'avez découvert.Réponses:
Pour exécuter une commande à l'intérieur du chroot, vous devez avoir ce programme disponible dans le chroot (car il ne peut pas utiliser le programme installé dans le
/
système de fichiers.Le moyen le plus simple est de copier le
/usr/bin/ls
de vers/home/kuba/projects/jcubic/leash/usr/bin/
(vous aurez également besoin des bibliothèques partagées dépendantes:)ldd /usr/bin/ls
.la source
chroot lucid /bin/bash -c "ls /"
ouchroot /var/chroot /bin/bash -c "ls /"
chroot
est un bon point de départ lorsque vous avez des doutes sur la syntaxe. La même chose pour les autres commandes (bash
).Il est possible de s'exécuter
ls
dans une racine différente, mais lals
commande et tous les fichiers dont elle dépend doivent être présents à l'intérieur de cette racine. Il n'y a aucun moyen de démarrer lals
commande, puis à l'intérieur de ce processus, changez la racine:ls
n'a pas cette fonctionnalité.L'intérêt d'un chroot est de limiter la visibilité des fichiers à ceux sous un certain répertoire. Lorsque vous exécutez
chroot ~/projects/jcubic/leash ls
, lachroot
commande modifie la racine de son propre processus (la modification du répertoire racine n'affecte que le processus qui le fait et tout processus qu'il exécute ensuite), puis tente d'exécuter un fichier exécutable appeléls
dans un répertoire sur le chemin de recherche. Puisque la racine est maintenant~/projects/jcubic/leash
, l'exécutable doit être présent dans un répertoire tel que~/projects/jcubic/leash/bin
.Si vous voulez avoir un système normal avec les commandes habituelles dans le chroot, vous devez en installer un. Des outils tels que debootstrap (pour installer un système Debian) ou des outils de provisioning tels que Docker (qui configure un environnement chrooté et confiné d'autres manières) peuvent vous aider.
Si vous voulez juste la
ls
commande, vous devrez toujours en copier plus quels
. Pour l'exécuterls
, vous devrez copier lals
commande ainsi que tous les fichiers dont elle dépend. Puisqu'ills
s'agit d'un programme lié dynamiquement, vous avez besoin de son chargeur dynamique ainsi que de toutes les bibliothèques dynamiques dont il dépend. Exécutezldd /bin/ls
pour répertorier les bibliothèques dynamiques requises. Par exemple:Alternativement, une façon plus simple d'explorer est d'obtenir un binaire lié statiquement, par exemple de BusyBox (disponible sur Debian et ses dérivés comme
busybox-static
paquet).la source