Como desabilitar determinadas chamadas do sistema para um determinado usuário?

4

Estou criando um aplicativo da web semelhante ao codepad e, para cada execução, meu aplicativo copia um diretório ( /home/radeks/voidptr/private/chroot-root ) para /tmp/voidptr/[random-id]/chroot-root . Este diretório chroot possui um usuário que compila e executa o código digitado pelo usuário do aplicativo da web. O problema é que não quero que o usuário desligue a máquina ou use soquetes, por exemplo.

Preciso escrever um supervisor ou posso simplesmente definir essas permissões por usuário?

    
por rightfold 27.02.2011 / 13:35

1 resposta

6

O Chroot apenas restringe o acesso ao sistema de arquivos. Se você tem permissões de root, um chroot é apenas uma inconveniência, não um confinamento seguro. Usuários comuns podem usar soquetes, mas não desligam a máquina.

Existem maneiras de restringir o que os usuários podem fazer: capacidades, AppArmor, SELinux,… Mas, de longe, a maneira mais fácil é limitar o usuário da webapp a uma máquina virtual. Você poderá restringir facilmente coisas como conectividade de rede e uso de recursos. Para o seu caso de uso, uma tecnologia de vm Linux-on-Linux leve parece ser melhor: algo como OpenVZ , user-mode Linux ou Vserver .

    
por 27.02.2011 / 14:00