Restringir a execução do script do usuário

2

Eu tenho um motor de jogo rodando em um servidor Debian. O jogo envolve bots, que são codificados em Python pelos jogadores.

  1. Um jogador escreve um bot em Python
  2. Na validação, o código é enviado para o servidor
  3. Um script Python executa o código

O script do bot é um script normal do Python, então os jogadores podem fazer o que quiserem nele. Eu quero que o player seja capaz de importar módulos, mas não quebre o servidor (ou seja, varrendo o sistema de arquivos do servidor, excluindo arquivos, ou pior ).

Como posso garantir que o script não quebre o sistema, sabendo que:

  • O script deve poder se comunicar em TCP / IP com o mecanismo do jogo (localhost)
  • Eu quero permitir que os jogadores importem qualquer módulo padrão do Python
  • Mais tarde, o jogo suportará outras linguagens de script (Ruby, Perl, Lua, JS…)

Eu suspeito que seja uma maneira de brincar com usuários e grupos. Outra poderia ser algo semelhante aos jails do FreeBSD. Eu não estou familiarizado com nenhum desses métodos.

    
por Jim 07.08.2015 / 14:12

1 resposta

1

O que você quer pode ser feito com chroot ou talvez até mesmo lxc no debian.

EDIT:
Você pode querer usar overlayfs ou squashfs para tornar o que você está fazendo mais rápido (instantâneo). Para isso você precisa do debootstrap e do squashfs-tools.

Com essas ferramentas, você poderá fornecer a seus usuários diferentes versões ou arquiteturas de tempo de execução para escolher. Para isso, você precisa de qemu-user-static e ChrootDebootstrap .

    
por 07.08.2015 / 14:51