Anda harus menggunakan chroot
. The chroot
perintah mengubah direktori root bahwa semua proses anak melihat. Saya akan memberikan contoh untuk menunjukkan cara kerjanya.
Ini ditulis di tempat; Saya sebenarnya tidak di depan mesin UNIX sekarang. Dalam contoh ini, ada sebuah direktori yang disebut dir
dengan tiga file: a
, b
, c
, dan ls
. Tiga yang pertama adalah file biasa. ls
adalah hardlink ke ls
biner nyata sehingga kita dapat membuat daftar file saat di chroot.
Saya akan chroot
ke dir
. (Perhatikan bahwa saya mungkin lupa beberapa direktori di direktori root.)
Inilah pengaturannya, dalam bentuk keluaran 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
Sekarang saya akan chroot
masuk dir
. The /bin/bash
lagi memilih argumen apa yang memproses harus dijalankan dengan direktori root yang baru. Standarnya adalah /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
/
Sekarang kita keluar dari chroot
:
$ exit
$ # this prompt is now from the original bash process, from before the chroot
$ pwd
/home/alex/test
Saya harap ini menggambarkan bagaimana chroot
perintah itu bekerja. Pada dasarnya apa yang harus Anda lakukan untuk menyelesaikan masalah Anda adalah menjalankan chroot
perintah sebagai pengguna itu setiap kali mereka masuk. Mungkin memasukkannya ke dalam skrip startup?
Hardlink ke file akan terus bekerja di dalam chroot
, bahkan jika file itu tidak dapat diakses dengan cara lain (ini berfungsi karena hardlink menunjuk ke inode, bukan path). Jadi, untuk memungkinkan pengguna mengakses mis mysql
perintah, Anda akan menjalankan:
ln /usr/bin/mysql /path/to/chroot/target