как я могу ограничить терминал в каталоге как в chroot?

Я хочу установить конкретный каталог как главный каталог временно. Скажем, я открываю терминал в /home/me/mychroot как я могу установить mychroot каталог как главный каталог для того терминала?

1
задан 31 March 2018 в 17:27

2 ответа

Самым близким решением моего вопроса является proot, но это не работает, как предназначено. Например, когда я выполняю его как

proot -w  ~/mychroot

и когда я изменяюсь на родительский каталог

cd .. 

и выполненный

ls

это действительно изменяется на родительский каталог, это, должно быть, ограничило в ~/mychroot каталог

Так или иначе я нашел сценарий на одном из форумов и изменил его к моим потребностям. В исходном сценарии это не работает с /usr/sbin/chroot Я заменил его fakechroot fakeroot chroot и добавил несколько новых строк.

 #!/bin/bash

 if [ $# -ne 1 ]; then
     echo "Usage: $0 <enter_name_of_your_chroot_directory>"
 else    
     #remove trail slash
     DESTINATION_PATH=$PWD/${1%/}
     mkdir -p $DESTINATION_PATH
     if [ ! -d "$DESTINATION_PATH" ]; then 
         echo "Invalid destination path ${DESTINATION_PATH} it does not exists"
         exit
     fi

     if [ ! -d "${DESTINATION_PATH}/dev" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/dev"
         mkdir -p ${DESTINATION_PATH}"/"dev
     fi

     if ! grep -qs ${DESTINATION_PATH}"/"dev /proc/mounts; then
           mount --bind /dev ${DESTINATION_PATH}"/"dev
           if [ $? -eq 0 ]; then
                echo "Mount success ${DESTINATION_PATH}"/"dev"
           else
                echo "Something went wrong with the mount ${DESTINATION_PATH}"/"dev"
           fi
     fi

     if [ ! -d "${DESTINATION_PATH}/proc" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/proc"
         mkdir -p ${DESTINATION_PATH}"/"proc
     fi

     if ! grep -qs ${DESTINATION_PATH}"/"proc /proc/mounts; then
           mount --bind /proc ${DESTINATION_PATH}"/"proc
           if [ $? -eq 0 ]; then
                echo "Mount success ${DESTINATION_PATH}"/"proc"
           else
                echo "Something went wrong with the mount ${DESTINATION_PATH}"/"proc"
           fi
     fi

     if [ ! -d "${DESTINATION_PATH}/sys" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/sys"
         mkdir -p ${DESTINATION_PATH}"/"sys
     fi

     if ! grep -qs ${DESTINATION_PATH}"/"sys /proc/mounts; then
           mount --bind /sys ${DESTINATION_PATH}"/"sys
           if [ $? -eq 0 ]; then
                echo "Mount success ${DESTINATION_PATH}"/"sys"
           else
                echo "Something went wrong with the mount ${DESTINATION_PATH}"/"sys"
           fi
     fi

     if [ ! -d "${DESTINATION_PATH}/dev/pts" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/dev/pts"
         mkdir -p ${DESTINATION_PATH}"/"dev/pts
     fi

     if ! grep -qs ${DESTINATION_PATH}"/"dev/pts /proc/mounts; then
           mount --bind /dev/pts ${DESTINATION_PATH}"/"dev/pts
           if [ $? -eq 0 ]; then
                echo "Mount success ${DESTINATION_PATH}"/"dev/pts"
           else
                echo "Something went wrong with the mount ${DESTINATION_PATH}"/"dev/pts"
           fi
     fi

     if [ ! -d "${DESTINATION_PATH}/etc" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/etc"
         mkdir -p ${DESTINATION_PATH}"/"etc
         cp /etc/resolv.conf ${DESTINATION_PATH}"/"etc/resolv.conf
     fi

     for i in $( ldd /bin/bash | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
       do
             cp --parents $i ${DESTINATION_PATH}
       done

     # ARCH amd64
     if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
            cp --parents /lib64/ld-linux-x86-64.so.2 /${DESTINATION_PATH}
     fi

     # ARCH i386
     if [ -f  /lib/ld-linux.so.2 ]; then
            cp --parents /lib/ld-linux.so.2 /${DESTINATION_PATH}
     fi

     echo "Chroot jail is ready: ${DESTINATION_PATH}"

     if [ ! -d "${DESTINATION_PATH}/bin" ]; then 
         echo "Create dir path ${DESTINATION_PATH}/bin"
         mkdir -p ${DESTINATION_PATH}"/"bin
         cp /bin/{cat,echo,rm,bash,sh,ls,mkdir} ${DESTINATION_PATH}"/bin/"
     fi

     fakechroot fakeroot chroot ${DESTINATION_PATH}
 fi    
0
ответ дан 4 August 2019 в 09:00

Для изменения рабочего каталога попытайтесь использовать следующую команду

gnome-terminal --working-directory=/path/to/dir

, которую можно проверить, взяли ли изменения plac использование эти pwd команда.

, С другой стороны, открывают "~/.bashrc", прокручивают к нижней части и добавляют команду каталога изменения -

cd ~/mychroot

0
ответ дан 4 August 2019 в 09:00

Другие вопросы по тегам:

Похожие вопросы: