Como acessar somente arquivos legíveis no mundo na sandbox do SElinux

3

Eu quero rodar programas feitos como alocações de alunos em um sandbox do SELinux (para checar a saída e o comportamento como uma primeira parte da classificação das tarefas sem precisar verificar muito de perto se alguns alunos estão tentando fazer algo "divertido" primeiro).

A maioria das tarefas só deve ler sua entrada e produzir saída. Alguns podem ler arquivos no sistema. Então eu só quero que seja capaz de ler arquivos legíveis no mundo.

Apenas sandbox assignment.py funciona bem em alguns aspectos, onde o sandbox é de policycoreutils-python no SELinux Sandbox no CentOS 7. Em seguida, assignment.py não pode gravar arquivos, acessar a rede e outras coisas ruins. Mas ainda pode ler meus arquivos.

Na verdade, ele pode ler arquivos locais, mas não arquivos montados pelo NFS. Com sandbox -t sandbox_min_t eu também posso acessar arquivos montados no NFS (o que eu quero), mas o problema é que o programa testado tem acesso a todos os meus arquivos. Como posso dizer que só tem acesso a arquivos legíveis pelo mundo ou a arquivos que só podem ser lidos por um usuário nomeado?

(Estou aberto a usar outro sandbox disponível no CentOS, se for mais fácil conseguir isso em alguma outra sandbox.)

(Prefiro não ter que criar uma nova conta de usuário apenas para testar programas. Prefiro não, em parte porque isso pode ser necessário para vários professores / assistentes e quero que as contas sejam pessoais, e não o nome de usuário espaço sendo confuso com muitos destes.)

    
por pst 09.05.2017 / 15:23

1 resposta

1

Um sandbox relativamente simples para permitir a leitura e a gravação de descritores de arquivos já abertos pode ser implementado usando seccomp . Um programa python inicializa o sandbox e, em seguida, executa o script não confiável. Ligações em Python adicionadas para o libseccomp 2.2.0 (LWN) tem um exemplo genérico de como usar a API libseccomp2 do Python.

O SELinux sandbox pode fornecer uma caixa de proteção mais genérica para executar qualquer aplicativo não confiável. O comando sandbox tem algumas opções úteis que podem ser suficientes para impedir o acesso aos seus arquivos . Com a opção -M , os diretórios inicial e temporário serão mascarados com uma montagem tmpfs, impedindo que o sandbox acesse os arquivos subjacentes. Juntamente com a opção -i , você pode copiar os arquivos necessários para o diretório temporário. Se os seus arquivos não forem grandes, pode ser mais simples copiar o arquivo na sandbox. Idealmente, seria melhor escrever um domínio de sandbox personalizado para o seu caso de uso.

Os contêineres LXC fornecem outra opção. No entanto, a configuração de tudo é uma quantidade um tanto grande de trabalho, mas o contêiner resultante fornece muita flexibilidade. O contêiner pode ter um sistema de arquivos somente leitura e usar uma montagem de ligação para o diretório de aplicativo gravável. As opções de configuração podem ser usadas para impedir que o aplicativo obtenha novos privilégios .

    
por 08.10.2018 / 20:02