J'ai un problème avec l'exécution des commandes shell à l'intérieur d'une prison chroot. Voici un exemple:Comment exécuter une commande shell à l'intérieur d'une prison chroot
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
int main()
{
if (geteuid() == 0) // check root privileges
{
chroot("/bin");
chdir("/");
execl("/ls", "ls", "-l", (char *) NULL); // "/ls" should be equivalent to "/bin/ls"
perror(strerror(errno));
}
else
printf("Permission denied\n");
return 0;
}
Le problème est l'exec: d'après errno, l'erreur est "No such file or directory". La même erreur apparaît si j'utilise exec ("/ bin/ls", ...)
Je pense que "ls" ne peut pas utiliser les bibliothèques partagées dont il a besoin, à cause de la prison chroot.
Une suggestion pour résoudre ce problème?
Fonctionne bien pour moi sur l'ordinateur portable OpenBSD Je tape ceci, pour ce que ça vaut, où l'exécution "ldd/bin/ls" me dit que c'est un exécutable statique. Si vous trouvez qu'il y a des bibliothèques nécessaires, vous devrez trouver un moyen de les trouver sous le chroot. – tbert
Cela peut être aussi simple qu'un 'ls' qui réside dans/usr/bin et n'a qu'un lien symbolique vers/bin. Et comme ataylor dit ci-dessous, chroot veut un environnement racine réel avec quelques bibliothèques dans son propre/lib,/usr/lib et quelques fichiers dans/dev. –