Создаем и используем chroot-окружения

chroot

chroot — операция изменения корневого каталога в Unix-подобных операционных системах. Программа, запущенная с изменённым корневым каталогом, будет иметь доступ только к файлам, содержащимся в данном каталоге. Поэтому, если нужно обеспечить программе доступ к другим каталогам или файловым системам (например, /proc), нужно заранее примонтировать в целевом каталоге необходимые каталоги или устройства.

(c) http://ru.wikipedia.org/wiki/Chroot

Папки будем создавать внутри «$HOME/jail»

$J=$HOME/jail
$mkdir -p $J
$mkdir -p $J/{bin,lib64,lib}
$cd $J
$cp -v /bin/{bash,ls} $J/bin

[git@sigma jail]$ cp -v /bin/{bash,ls} $J/bin
`/bin/bash' -> `/home/git/jail/bin/bash'
`/bin/ls' -> `/home/git/jail/bin/ls'

Для копирования необходимых библиотек в $J, используем команду ldd, чтобы определить основные зависимости библиотек:

$ldd /bin/bash
[git@sigma jail]$ ldd /bin/bash
linux-vdso.so.1 => (0x00007fffb13ff000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003608200000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003310600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003605a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003605600000)

$cp -v /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 $J/lib64/

[git@sigma jail]$ cp -v /lib64/libtinfo.so.5 /lib64/libdl.so.2 /lib64/libc.so.6 /lib64/ld-linux-x86-64.so.2 $J/lib64/
`/lib64/libtinfo.so.5' -> `/home/git/jail/lib64/libtinfo.so.5'
`/lib64/libdl.so.2' -> `/home/git/jail/lib64/libdl.so.2'
`/lib64/libc.so.6' -> `/home/git/jail/lib64/libc.so.6'
`/lib64/ld-linux-x86-64.so.2' -> `/home/git/jail/lib64/ld-linux-x86-64.so.2'

$ldd /bin/ls
[git@sigma jail]$ ldd /bin/ls
linux-vdso.so.1 => (0x00007fff21cc7000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003fbe000000)
librt.so.1 => /lib64/librt.so.1 (0x0000003606a00000)
libcap.so.2 => /lib64/libcap.so.2 (0x0000003608600000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003609200000)
libc.so.6 => /lib64/libc.so.6 (0x0000003605a00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003310600000)
/lib64/ld-linux-x86-64.so.2 (0x0000003605600000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003606200000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003608a00000)

Можно производить копирование руками, а можно отдать предпочтение скрипту:

$list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
for i in $list; do cp -v "$i" "${J}${i}"; done

[git@sigma jail]$ for i in $list; do cp -v "$i" "${J}${i}"; done
`/lib64/libselinux.so.1' -> `/home/git/jail/lib64/libselinux.so.1'
`/lib64/librt.so.1' -> `/home/git/jail/lib64/librt.so.1'
`/lib64/libcap.so.2' -> `/home/git/jail/lib64/libcap.so.2'
`/lib64/libacl.so.1' -> `/home/git/jail/lib64/libacl.so.1'
`/lib64/libc.so.6' -> `/home/git/jail/lib64/libc.so.6'
`/lib64/libdl.so.2' -> `/home/git/jail/lib64/libdl.so.2'
`/lib64/ld-linux-x86-64.so.2' -> `/home/git/jail/lib64/ld-linux-x86-64.so.2'
`/lib64/libpthread.so.0' -> `/home/git/jail/lib64/libpthread.so.0'
`/lib64/libattr.so.1' -> `/home/git/jail/lib64/libattr.so.1'

images (1)

Перемещаемся в chroot окружение и пробуем выполнить команду ls. Как видно из листинга, доступно только заданное нами дерево каталогов.

$sudo chroot $J /bin/bash
[git@sigma git]# sudo chroot $J /bin/bash
bash-4.1#

$ls /

bash-4.1# ls -l /
total 12
drwxrwxr-x 2 500 500 4096 May 20 08:05 bin
drwxrwxr-x 2 500 500 4096 May 20 08:05 lib
drwxrwxr-x 2 500 500 4096 May 20 08:06 lib64
Вы можете оставить комментарий ниже.