Powinieneś użyć chroot
. chroot
Polecenie zmienia katalog główny, że wszystkie procesy potomne widzieć. Podam przykład, aby pokazać, jak to działa.
Zostało to napisane na miejscu; Tak naprawdę nie jestem teraz przed komputerem z systemem UNIX. W tym przykładzie jest to katalog o nazwie dir
z trzech plików: a
, b
, c
, i ls
. Pierwsze trzy to zwykłe pliki. ls
jest dowiązaniem twardym do prawdziwego ls
pliku binarnego, dzięki czemu możemy wyświetlać listę plików w chroot.
Idę chroot
do dir
. (Zauważ, że prawdopodobnie zapominam o niektórych katalogach w katalogu głównym).
Oto konfiguracja w postaci danych wyjściowych powłoki:
$ 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
Teraz wejdę chroot
w dir
. W /bin/bash
Wybiera argumentów co proces ten powinien być prowadzony z nowego katalogu. Domyślnie jest to /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
/
Teraz wychodzimy z chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Mam nadzieję, że to ilustruje działanie chroot
polecenia. Zasadniczo, co musisz zrobić, aby rozwiązać problem, to uruchomić chroot
polecenie jako ten użytkownik za każdym razem, gdy się loguje. Być może umieścić go w skrypcie startowym?
Hardlink do pliku będzie nadal działał wewnątrz chroot
, nawet jeśli do tego pliku nie można uzyskać dostępu innymi sposobami (działa to, ponieważ hardlinks wskazują na i-węzły, a nie ścieżki). Aby umożliwić użytkownikowi dostęp np. Do mysql
polecenia, należy wykonać:
ln /usr/bin/mysql /path/to/chroot/target