cria usuário com apenas permissões para executar programas em C

1

Estou tentando criar um editor de código on-line. Meu cenário: Através do servidor web, um pedido é recebido para um programa 'C' - o usuário root cria o arquivo, compila o arquivo e obtém sucesso para o usuário.

Estamos usando nodejs em nosso back-end. Agora é a hora de executar o programa - nodejs nos fornece uma opção para gerar esse código de usuário com um uid (um usuário diferente de root).

Como faço para criar um usuário que não tenha poderes como ls, px - mas simplesmente execute o executável compilado nas etapas acima.

uma das soluções que tentei: alterar a permissão de /usr/bin , /bin , /usr/sbin/ , /sbin , /usr/local/bin , /usr/local/sbin para 700, para que apenas o usuário raiz possa execute todos esses comandos e este usuário apenas executa programas simples "C". Mas ainda assim este usuário tem a opção de visualizar os diretórios /etc - então basicamente eu preciso de um usuário onde todos os diretórios estão com 700. É uma boa ideia?

Outra opção é aparentar. Ainda não tentei este.

A terceira opção sugerida por um amigo é chroot, mas as pessoas dizem que não é por medidas de segurança.

Alguém pode me orientar sobre como lidar com esse problema?

    
por j10 24.05.2016 / 13:47

1 resposta

2

O Chroot é a maneira mais tradicional de fazer isso, e você pode fazê-lo funcionar, mas como você faz isso por meio de uma interface web, fica um pouco complicado: você deve evitar condições de corrida (vários usuários usam o mesmo ambiente chroot), você deve construir dinamicamente uma estrutura de diretórios para cada solicitação e, provavelmente, algumas outras coisas que não consigo pensar em cima da minha cabeça.

Se você estiver usando o Linux, desejará ver os contêineres ( lxc ) ou o link do projeto do Docker. A plataforma Docker, em particular, permitirá que você faça o que deseja aqui: crie sistemas virtuais leves e de vida curta que possam ser usados para executar processos totalmente presos sem afetar os recursos externos (ou seja, o servidor da Web). Você pode baixar uma imagem docker básica do ambiente específico do sistema operacional que você quer que o programa rode (digamos, Fedora 12), dizer ao docker para rodar esse ambiente enquanto importa a fonte do programa do usuário para esse ambiente e dizer ao docker para executar o compilador e arquivo resultante dentro desse ambiente. Então você diz ao estivador para destruir o ambiente efêmero. Nada fica para trás, (quase) nenhum risco de segurança.

    
por 24.05.2016 / 15:00