Docker | Perguntas de prisão Chroot | Node.js tipo de hospedagem

0

Ok, estou usando o Docker e ainda não estou familiarizado com o Chroot Jail.

Eu tenho uma imagem do Docker com o Debian / Node.js. Mas eu quero que cada usuário Debian possa executar seu próprio aplicativo Node.js sem acesso root no Docker.

Exemplo:

  1. usuário: jimmy
  2. home: / home / jimmy
  3. shell: / bin / bash

Então o jimmy agora pode executar o aplicativo Node.js porque ele tem o shell / bin / bash . Mas ele também pode modificar todo o sistema (ele pode fazer por exemplo "rm -R / etc"). Estou certo?

Então eu posso, por exemplo, modificar o shell do jimmy : / usr / sbin / nologin e dar a opção de apenas iniciar / parar o Node. js instance from WEB UI ... mas no Node.js usando o módulo "fs" ele pode modificar todo o sistema. Estou certo?

Então, agora, se eu estivesse certo, tenho duas opções

  1. Acho que posso criar "chroot jail" para jimmy . Então / home / jimmy será uma prisão chroot. Ele pode executar seu aplicativo Node.js e não pode modificar o sistema inteiro. Node.js "fs" será restrito apenas para / home / jimmy. Estou certo?
  2. Não importa e apenas inicie o novo contêiner do Docker para jimmy ... Isso é ótimas opções, mas eu acho = novo contêiner = novo sistema = mais dados [MBs]

Ok e se alguém de vocês disse primeira opção é o que eu preciso. Como então posso ligar portas Se o jimmy executar o servidor da Web Node.js com a porta 8080 e outro usuário usar a mesma porta? Com o Docker, posso lidar com isso, acho, antes do início do container.

    
por Altaula 18.04.2018 / 18:18

1 resposta

0

Você parece ter alguns equívocos sobre os logins de usuários.

Com /bin/bash ou acesso direto ao Nodejs, um usuário pode modificar apenas arquivos que eles têm permissão para modificar. A maioria de /etc provavelmente não pode ser gravada por jimmy , portanto, eles não devem poder rm do diretório inteiro.

Você está correto em usar /usr/sbin/nologin , o usuário não conseguirá efetuar login no sistema. Executando uma interface do usuário da web para acesso Nodejs neste cenário, você ainda precisa ter certeza de que a interface do usuário da web não permite acessar arquivos que você não deseja ou que os usuários tenham acesso.

Independentemente da solução escolhida, não é possível executar vários serviços no mesmo endereço IP e porta. Você pode vincular o serviço à mesma porta em um endereço IP diferente ou usar uma porta diferente. Uma solução pode ser que cada usuário seja executado em sua porta e, em seguida, crie um servidor da Web para servir como um proxy para cada um desses serviços.

Você fala sobre o uso do Docker, então não tenho certeza de por que você não fica com isso, embora eu não saiba sobre as possíveis restrições de usuário com as quais você está trabalhando. É mais parecido com um chroot com isolamento adicional e gerenciamento de rede. O Docker é projetado principalmente para executar um único serviço, de modo que cada usuário que tenha seu próprio contêiner executando uma instância do Nodejs soe exatamente como um caso de uso.

Se o Docker não for uma opção, recomendo usar o chroot se você tiver certeza de que pode fazê-lo corretamente. Caso contrário, parece que seus requisitos podem ser atendidos com um único sistema que oferece logins para vários usuários com permissões adequadas em todos os lugares.

    
por 18.04.2018 / 19:12