Debe utilizar chroot. El chrootcomando 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 dircon tres archivos: a, b, c, y ls. Los primeros tres son archivos regulares. lses un enlace directo al lsbinario real para que podamos enumerar archivos mientras estamos en el chroot.
Voy a chrootdentro 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 chrootentrar dir. El /bin/bashargumento 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 chrootcomando. Básicamente, lo que tiene que hacer para resolver su problema es ejecutar un chrootcomando 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 chrootarchivo, 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 mysqlcomando, debe ejecutar:
ln /usr/bin/mysql /path/to/chroot/target