Isolamento completo no sandbox do Linux

2

Os aplicativos no iOS (e talvez os que estão em área restrita no OS X) são limitados a um sistema de arquivos raiz virtual que possui apenas os arquivos e diretórios específicos do aplicativo. A raiz vista por um aplicativo iOS se parece com:

/
    Application.app/
    Documents/
    Library/
    tmp/

Como você pode ver, nenhum executável do sistema ou biblioteca compartilhada é exposta na raiz do sandbox, ao contrário do chroot, onde isso seria necessário para o aplicativo funcionar; Eu acho que esse também é o caso do Tizen, bada e de muitos sistemas operacionais J2ME. O Linux recebeu novas tecnologias que podem ser usadas para sandbox, como namespaces, cgroups, seccomp-bpf, que agora são usados em softwares como LXC, Docker e Chrome OS. Alguma dessas tecnologias pode ser usada para criar raízes para aplicativos que podem ser semelhantes:

/
    app/
    data/
    resources/
    app.xml

em uma plataforma embarcada ou em um dispositivo eletrônico de consumo, onde alguém pode não querer expor o restante do sistema de arquivos do dispositivo a aplicativos? Acredito que os aplicativos para iOS podem fazer chamadas para bibliotecas e estruturas da Apple sem que eles apareçam em suas prisões, então as novas tecnologias do Linux podem permitir o mesmo?

    
por Melab 01.09.2016 / 21:56

1 resposta

-1

Você não precisa de bibliotecas do sistema ou binários dentro de um chroot para que um aplicativo seja executado.

Por exemplo:

$ ls chroot_test 
hello*
$ sudo chroot chroot_test /hello
Hello, World

Por que isso funciona? Porque o programa hello está vinculado estaticamente e não tem dependências:

$ file chroot_test/hello 
chroot_test/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

Basicamente, não importa qual seja a tecnologia, os arquivos que precisam entrarem na "sandbox" são o mínimo necessário para executar o aplicativo. Portanto, um programa vinculado dinamicamente pode precisar de libc.so e ld.so e assim por diante.

Um ambiente simples de bash pode precisar de mais alguns arquivos:

$ find chroot-bash -type f
chroot-bash/lib64/libdl.so.2
chroot-bash/lib64/ld-linux-x86-64.so.2
chroot-bash/lib64/libc.so.6
chroot-bash/lib64/libtinfo.so.5
chroot-bash/bin/bash

Não podemos fazer muito (por exemplo, não há ls command, mas é um bash shell em execução.

$ sudo chroot chroot-bash /bin/bash
bash-4.2# pwd
/
bash-4.2# ls
bash: ls: command not found
bash-4.2# echo *
bin lib64

Note que estes arquivos são cópias dos originais; eles não são os originais (bem, você poderia ligar-los). O sistema operacional não está exposto.

Você precisaria ter o mesmo conjunto de arquivos neles, se você usa chroot ou docker ou lxc ...

Um exemplo de um pequeno contêiner docker

Agora observe que isso é também verdadeiro para o próprio sistema operacional. Quando você yum install or apt-get install a package pode trazer algumas dependências, incluindo bibliotecas! Seu sistema operacional não tem tudo! Ele só tem um conjunto maior de coisas padrão para facilitar o uso das pessoas.

    
por 02.09.2016 / 01:12