Si dovrebbe usare chroot
. Il chroot
comando modifica la directory principale che viene visualizzata da tutti i processi figlio. Fornirò un esempio per dimostrare come funziona.
Questo è stato scritto sul posto; Al momento non sono di fronte a una macchina UNIX. In questo esempio, c'è una directory chiamata dir
con tre file: a
, b
, c
, e ls
. I primi tre sono file regolari. ls
è un collegamento reale al vero ls
binario in modo che possiamo elencare i file mentre ci troviamo nel chroot.
Ho intenzione di chroot
in dir
. (Nota che probabilmente sto dimenticando alcune directory nella directory principale.)
Ecco la configurazione, nel modulo di output della 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
Ora sarò chroot
in dir
. L' /bin/bash
argomento sceglie quale processo deve essere eseguito con la nuova directory principale. L'impostazione predefinita è /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
/
Ora usciamo da chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Spero che questo illustri come funziona il chroot
comando. Fondamentalmente quello che devi fare per risolvere il tuo problema è eseguire un chroot
comando come quell'utente ogni volta che effettuano il login. Forse metterlo in uno script di avvio?
Un hardlink a un file continuerà a funzionare all'interno di a chroot
, anche se quel file non è accessibile con altri mezzi (questo funziona perché i hardlink puntano a inode, non a percorsi). Pertanto, per consentire all'utente di accedere ad esempio al mysql
comando, è necessario eseguire:
ln /usr/bin/mysql /path/to/chroot/target