Codice: Seleziona tutto
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
int main()
{
if (geteuid() == 0) // verifica che si abbiano i privilegi per eseguire la chroot
{
chroot("/bin");
chdir("/");
execl("/ls", "ls", "-l", (char *) NULL);
perror(strerror(errno));
}
else
printf("Permission denied\n");
return 0;
}
Quello che non capisco è: quando scrivo execl("/ls", ...), /ls viene o meno "risolto" in /bin/ls ?
In alternativa, usando la execlp("ls", ...) il problema rimane.
In questo caso "ls" viene cercato in $PATH, ma avendo chrootato temo che i vari path in $PATH non vengano correttamente risolti.
Qualche idea? Ho come l'impressione che mi sto perdendo in un bicchiere d'acqua, forse c'è qualcosa di abnorme che mi sfugge alla radice.