Powinieneś użyć chroot. chrootPolecenie 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 dirz trzech plików: a, b, c, i ls. Pierwsze trzy to zwykłe pliki. lsjest dowiązaniem twardym do prawdziwego lspliku binarnego, dzięki czemu możemy wyświetlać listę plików w chroot.
Idę chrootdo 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ę chrootw dir. W /bin/bashWybiera 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 chrootpolecenia. Zasadniczo, co musisz zrobić, aby rozwiązać problem, to uruchomić chrootpolecenie 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 mysqlpolecenia, należy wykonać:
ln /usr/bin/mysql /path/to/chroot/target