Ви повинні використовувати chroot. chrootКоманда змінює кореневий каталог, всі дочірні процеси см. Наведу приклад, щоб продемонструвати, як це працює.
Це було написано на місці; Зараз я фактично не перед машиною UNIX. У цьому прикладі є директорія dirз трьома файлами: a, b, c, і ls. Перші три - це звичайні файли. lsє твердим посиланням на справжній lsбінарний файл, щоб ми могли перелічити файли, перебуваючи в chroot.
Я збираюся chrootв dir. (Зауважте, що я, мабуть, забуваю деякі каталоги в кореневій директорії.)
Ось налаштування у формі виводу оболонки:
$ 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
Тепер я буду chrootв dir. В /bin/bashвибирає аргумент , що процес повинен бути запущений з новою кореневої директорії. Це за замовчуванням до /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
/
Тепер ми виходимо з chroot:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Сподіваюся, це ілюструє, як chrootпрацює команда. В основному, що вам потрібно зробити, щоб вирішити вашу проблему, це запустити chrootкоманду як цей користувач кожного разу, коли він увійде в систему. Можливо, помістіть її в сценарій запуску?
Жорстке посилання на файл буде продовжувати працювати всередині chroot, навіть якщо цей файл не може бути доступний іншими способами (це працює, тому що жорсткі посилання вказують на входи, а не на шляхи). Отже, щоб дозволити користувачеві отримати доступ, наприклад, до mysqlкоманди, слід виконати:
ln /usr/bin/mysql /path/to/chroot/target