Não é possível criar uma cadeia raiz

0

Eu apenas tentei brincar com o comando chroot apenas para fins de teste, a fim de criar uma cadeia raiz temporária, mas não consegui. A plataforma é o CentOS 6.4. e eu fiz isso inúmeras vezes até agora, exceto por agora. Eu segui o procedimento nessa ordem:

  1. Crie os diretórios bin , etc , home , lib e var .
  2. ldd /bin/bash
  3. Copie todas as bibliotecas no diretório lib acima mencionado mais /bin/bash binário em bin .
  4. Em seguida, executei chroot /path/to/the/jail e o seguinte apareceu:

    chroot: failed to run command '/bin/bash': No such file or directory
    

Por favor avise, desde que eu não sou capaz de estabelecer de onde este erro vem e também eu nunca tive tal problema. O mesmo procedimento funciona bem no servidor Ubuntu. O problema ocorre apenas neste servidor específico.

Por comentários abaixo, aqui estão alguns resultados dos comandos de depuração:

[root@localhost chroot]# find -printf '%M %p\n'
 drwxr-xr-x .
 drwxr-xr-x ./bin
 -rwxr-xr-x ./bin/bash
 drwxr-xr-x ./var
 drwxr-xr-x ./var/var
 drwxr-xr-x ./home
 drwxr-xr-x ./lib
 -rwxr-xr-x ./lib/libdl.so.2
 -rwxr-xr-x ./lib/libc.so.6
 -rwxr-xr-x ./lib/libtinfo.so.5
 -rwxr-xr-x ./lib/ld-linux-x86-64.so.2
 drwxr-xr-x ./etc
[root@localhost bin]# ldd /mnt/proba1/chroot/bin/bash
 linux-vdso.so.1 => (0x00007fff6fe00000)
 libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f12cdd40000)
 libdl.so.2 => /lib64/libdl.so.2 (0x00007f12cdb38000)
 libc.so.6 => /lib64/libc.so.6 (0x00007f12cd7a0000)
 /lib64/ld-linux-x86-64.so.2 (0x00007f12cdf70000)
    
por VVelev 23.10.2013 / 20:40

2 respostas

2

A saída ldd mostra que bash está esperando encontrar suas bibliotecas em /lib64 , não /lib . Além disso, isso significa que você precisa copiá-los de /lib64 para o diretório correspondente dentro da cadeia. Os mesmos arquivos encontrados em /lib não funcionam.

    
por 23.10.2013 / 21:33
0

O que eu faço é usar "mount --bind" para isso. Você também pode torná-lo somente leitura. por exemplo:

mkdir test
cd test
mkdir bin sbin usr etc
mount --bind -o ro /bin bin
mount --bind -o ro /sbin sbin
mount --bind -o ro /usr usr
mount --bind -o ro /etc etc
chroot .

Isso não é completamente, mas você entende. Isso pode ficar muito legal se você usar "aufs" também. Ele permite que você camada uma camada gravável em cima de uma camada legível. Dessa forma, você não terá que copiar, vincular-montar somente leitura, mas ainda torná-lo gravável, enquanto todas as gravações são mantidas em um espaço reservado em algum lugar. Outra coisa a tentar é usar o 'cp -l' link-copying. E então "vaca", que significa copiar-em-escrever. O que isso faz é primeiro fazer uma cópia, mas todas as entradas de diretório apontando para os mesmos nós no disco. Parece uma cópia, mas todas estão ligadas. Não está ligado simbolicamente, mas está ligado de forma rígida. Cow faz com que, no momento em que você tenta gravar no arquivo, o conteúdo real desse arquivo seja copiado e depois modificado.

    
por 24.10.2013 / 06:37