2012-07-06 2 views
1

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?

+0

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

+0

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. –

Répondre

1

Vous avez probablement raison concernant les bibliothèques partagées inaccessibles. La mise en place d'une prison chroot implique généralement la copie de parties de /bin, /usr/bin, /lib et /usr/lib dans une structure de répertoire parallèle.

Une alternative plus simple consiste à utiliser uniquement des exécutables liés statiquement. Sur de nombreux systèmes Linux, il y aura un exécutable lié statiquement appelé busybox qui fournit la fonctionnalité de base de nombreuses commandes Unix, y compris ls. L'appeler comme busybox ls -l fournit une sortie similaire au programme normal ls sans avoir besoin d'accéder à des bibliothèques partagées supplémentaires en dehors de la prison chroot.

Questions connexes