actualizaciónchroot + + execvp fiesta
Lo tienes! Ver mi solución (quinta comentario)
Aquí está mi problema:
He creado un pequeño binario llamado "cárcel" y en/etc/password han convertido en la consola del sistema para un usuario de prueba.
Aquí es el - simplificado - código fuente:
#define HOME "/home/user"
#define SHELL "/bin/bash"
...
if(chdir(HOME) || chroot(HOME)) return -1;
...
char *shellargv[] = { SHELL, "-login", "-rcfile", "/bin/myscript", 0 };
execvp(SHELL, shellargv);
Bueno, no importa cuánto lo intente, parece que, cuando mis registros de usuario de prueba en, /bin/miscript nunca lo hará ser originario Del mismo modo, si dejo caer un archivo .bashrc
en el directorio de inicio del usuario, también se ignorará.
¿Por qué bash snob estos chicos?
-
Algunas precisiones, no necesariamente relevante, pero para aclarar algunos de los puntos planteados en los comentarios:
- El binario 'cárcel' es en realidad suid, lo que le permite chroot() exitosamente.
- He usado 'ln' para hacer que los binarios apropiados estén disponibles - mi celda de la cárcel está bien acolchada :)
- El problema no parece estar en el usuario ... algo más es negligente.
Ah, había asumido (falsamente) que tu chroot tenía todo en los mismos lugares que el sistema típico, o que arreglabas primero el entorno. La falta de setuid/gid back no debería romper esto (aunque eliminaría el beneficio de seguridad del chrooting). – ephemient