Ubuntu chroot “Nenhum arquivo ou diretório”

3

Eu tenho um aplicativo da web onde eu crio algumas pastas no meu servidor e coloco executáveis lá. Então eu tento executá-los com o chroot, mas recebo uma mensagem de que o acesso é negado lá.
Eu tentei chmod -R 777 blah blah.... e, em seguida, recebo uma mensagem que a pasta ou o arquivo que eu chamo (sudo chroot mydirectory myfile_inside_Mydirectory) não existe. Isso acontece somente quando eu chamo o chroot em pastas criadas pelo servidor web. Minha aplicação web está em php e eu uso:

shell_exec("cp -R /var/www/comp/prison/bin $dir");

shell_exec("cp -R /var/www/comp/prison/lib $dir");

shell_exec("cp /var/www/janitor.out $dir/janitor.out");

shell_exec("sudo chmod -R 777 $dir");

$process = proc_open("sudo chroot $dir janitor.out", $descriptorspec, $pipes);

sudo não precisa de senha.

    
por Paris 28.01.2011 / 13:27

2 respostas

2

Bem, eu finalmente descobri que copiei as bibliotecas necessárias na pasta errada, porque quando eu testei o chroot pela primeira vez eu estava em um Ubuntu Machine de 32 bits, enquanto o meu servidor era de 64 bits. Então, eu copiei as bibliotecas necessárias e bin / sh nas pastas apropriadas em meu diretório que eu gostaria de prender e funcionou muito bem. : D Obrigado a todos vocês!

    
por Paris 29.01.2011 / 13:16
0

Que tipo de arquivo é o janitor.out? Se estiver vinculado dinamicamente, você também precisará das bibliotecas vinculadas, que, por sua vez, também precisarão de outras bibliotecas. Você pode usar o programa ldd para verificar quais bibliotecas compartilhadas são necessárias. Por exemplo, a saída de ldd /bin/ls :

    linux-vdso.so.1 =>  (0x00007fffac983000)
    libselinux.so.1 => /lib/libselinux.so.1 (0x00007f8adda8f000)
    librt.so.1 => /lib/librt.so.1 (0x00007f8add887000)
    libacl.so.1 => /lib/libacl.so.1 (0x00007f8add67e000)
    libc.so.6 => /lib/libc.so.6 (0x00007f8add2fb000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f8add0f7000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f8addccc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f8adced9000)
    libattr.so.1 => /lib/libattr.so.1 (0x00007f8adccd4000)

e ldd /lib/libacl.so.1 :         linux-vdso.so.1 = > (0x00007fffd462f000)         libattr.so.1 = > /lib/libattr.so.1 (0x00007f4e348aa000)         libc.so.6 = > /lib/libc.so.6 (0x00007f4e34527000)         /lib64/ld-linux-x86-64.so.2 (0x00007f4e34cd6000) Se uma dessas bibliotecas não estiver satisfeita, o programa informará "Nenhum arquivo ou diretório", mesmo que o programa exista.

Editar: o seguinte é mais provável que o problema neste caso. Estou mantendo a resposta acima porque pode ser útil para alguém com a mesma mensagem de erro.

Você está executando:

sudo chroot $dir janitor.out

Isso fará com que o chroot pesquise janitor.out em $PATH (/ bin, / sbin, ...). Você precisa prefixar janitor.out com uma barra para executar janitor.out , localizado na raiz do seu chroot:

sudo chroot $dir /janitor.out
    
por Lekensteyn 28.01.2011 / 15:03