Ви повинні використовувати 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