Debe utilizar chroot
. El chroot
comando cambia el directorio raíz que ven todos los procesos secundarios. Daré un ejemplo para demostrar cómo funciona.
Esto fue escrito en el acto; En realidad no estoy frente a una máquina UNIX en este momento. En este ejemplo, hay un directorio llamado dir
con tres archivos: a
, b
, c
, y ls
. Los primeros tres son archivos regulares. ls
es un enlace directo al ls
binario real para que podamos enumerar archivos mientras estamos en el chroot.
Voy a chroot
dentro dir
. (Tenga en cuenta que probablemente estoy olvidando algunos directorios en el directorio raíz).
Aquí está la configuración, en forma de salida de shell:
$ pwd
/home/alex/test
$ l
dir
$ ls dir
a b c ls
$ ./ls dir # does the same thing
a b c ls
$ ls /
bin boot dev etc home mnt media proc sbin sys usr var
Ahora voy a chroot
entrar dir
. El /bin/bash
argumento elige qué proceso se debe ejecutar con el nuevo directorio raíz. Por defecto es /bin/sh
.
$ chroot /bin/bash dir
$ # this prompt is now from a subprocess running in the new root directory
$ PATH=/ ls
a b c ls
$ pwd
/
Ahora salimos de chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Espero que esto ilustra cómo funciona el chroot
comando. Básicamente, lo que tiene que hacer para resolver su problema es ejecutar un chroot
comando como ese usuario cada vez que inicie sesión. ¿Quizás ponerlo en un script de inicio?
Un enlace fijo a un archivo continuará funcionando dentro de un chroot
archivo, incluso si no se puede acceder a ese archivo por otros medios (esto funciona porque los enlaces directos apuntan a inodes, no a rutas). Entonces, para permitir que el usuario acceda, por ejemplo, al mysql
comando, debe ejecutar:
ln /usr/bin/mysql /path/to/chroot/target