Ocultando o trabalho em conta com vários usuários

4

Atualmente, estou trabalhando em uma tarefa em uma classe de programação em cluster. A classe recebeu uma conta no cluster, para que possamos fazer o nosso trabalho. O problema é que a única conta é compartilhada entre todos na classe. Cada aluno cria seu próprio diretório e trabalha nele.

Obviamente, um problema é que os alunos podem simplesmente olhar para o trabalho uns dos outros e plagiar. Não quero que as pessoas vejam meu trabalho até que as tarefas tenham sido enviadas.

Não há sistemas de controle de versão no cluster, portanto, não posso simplesmente puxar um repositório de minha própria máquina e trabalhar na tarefa, em seguida, pressioná-lo e remover o que está no cluster toda vez que eu trabalho.

Qual é a melhor maneira de impedir que outras pessoas vejam meu trabalho? Normalmente, eu apenas trabalho em minha própria máquina e, em seguida, faço o upload para o servidor quando é devido. Mas como não tenho meu próprio cluster, todos nós precisamos realmente usar a única conta.

Sim, acredite ou não, este é realmente um problema do mundo real que estou enfrentando - e não um hipotético.

    
por oadams 25.04.2011 / 06:31

5 respostas

5

A solução real para esse problema é conversar com seu instrutor para fornecer contas separadas ou para alterar as atribuições para serem atribuições de grupo. Se ele não puder ou não fizer isso, eu simplesmente ignoraria qualquer tentativa de plágio de outros alunos. Você não perde nada quando copia seu trabalho, eles perdem.

Dito isto, aqui está uma maneira de manter seu código-fonte virtualmente inacessível para qualquer outra pessoa.

you@local$ ssh shared@cluster "gcc -x c -o yourdir/secret -" < source.c

Observe o traço no final do comando gcc. Isso significa que o gcc irá ler a fonte do stdin. Isso irá compilar source.c de sua máquina local para yourdir/secret no cluster. O código fonte secreto nunca existirá como um arquivo "real" no cluster. Ele só existirá como um fluxo em algum buffer (no processo sshd, eu assumo).

Se o seu código não estiver escrito em C, você terá que alterar a c na opção -x c . Consulte aqui para obter mais informações sobre isso.

Outros alunos ainda podem pegar seu arquivo compilado e descompilar isso. Para minimizar até mesmo esse risco, você pode excluir o arquivo logo após compilar e executar.

you@local$ ssh shared@cluster "gcc -x c -o yourdir/secret - && yourdir/secret ; rm yourdir/secret" < source.c

Se você é realmente paranóico, certifique-se de estar executando o gcc real. Outros alunos podem escrever um wrapper em torno do gcc, que salva o código-fonte antes de compilá-lo e colocar esse wrapper em seu caminho. Você também deve executar o real rm.

you@local$ ssh shared@cluster "/usr/bin/gcc -x c -o yourdir/secret - && yourdir/secret ; /bin/rm yourdir/secret" < source.c
    
por 25.04.2011 / 10:02
2

Afaik não há como efetivamente esconder algo para si mesmo. Você poderia esconder seu código em uma cadeia profunda de pastas de pontos, mas contanto que você possa ver, seus colegas também verão, porque eles você está . E se você quiser trabalhar com seu código, precisa ver.

O que você pode fazer é configurar um sistema semelhante, por exemplo instale o mesmo sistema operacional em um VirtualBox ou em uma máquina separada (cuide da arquitetura), escreva seu código apenas neste sistema, compile-o e copie apenas os binários para o cluster para enviá-los para a fila.
Seus oponentes ainda têm acesso ao bytecode, mas é muito mais difícil entender bits e bytes do que fontes C.;)

    
por 25.04.2011 / 10:03
1

A resposta perfeita seria a criptografia, mas presumivelmente se você não puder extrair dados de / para seu próprio computador, provavelmente não será possível instalar nenhum software de criptografia de disco, volume ou arquivo.

Dito isto, os professores devem saber o que estão fazendo e se escolherem que todos usem um espaço comum, deve haver uma razão por trás disso. Talvez seja para aprender sobre confiança e colaboração? Por que não perguntar a eles?

EDIT: como você pode extrair dados de e para o servidor, por que não usar rsync ?

    
por 25.04.2011 / 07:06
1

Você não pode ocultar nada que acontece no cluster dos outros alunos. Como eles não estão fazendo nada diferente no estágio de autenticação, do ponto de vista do sistema, tudo é feito pelo mesmo usuário que pode observar seus próprios processos, depurá-los e assim por diante.

Você pode impedir que outros alunos vejam seu código-fonte compilando-o em sua máquina e carregando apenas seus binários e iniciando scripts. Se o servidor não estiver executando a mesma arquitetura de processador do seu PC, instale um compilador cruzado . Gcc é fácil de compilar como um compilador cruzado, existem instruções bastante claras junto com o código-fonte. Você também precisará ter os pacotes de desenvolvimento para as bibliotecas com as quais seus programas estão vinculados.

Depois de ter compilado os binários na sua máquina, carregue-os no servidor e execute-os. Outros alunos poderão pegar seus binários, mas descompilá-los seria mais trabalhoso do que fazer a tarefa, então esse não é um grande problema.

Aqui estão exemplos de trechos do Makefile que podem ser úteis:

CC = /usr/local/bin/powerpc-linux-eabi-gcc

test: myprogram
        <myprogram ssh cluster 'cat >oadams; chmod +x oadams; trap "rm ./oadams" EXIT HUP INT TERM QUIT; time ./oadams'
    
por 25.04.2011 / 23:36
0

No tópico da criptografia, se você estiver usando o vi ou o vim para editar seu código, poderá usar a criptografia integrada do vim: vim -x myfile.c para novos arquivos.

Antes do vim 7.3 é muito facilmente quebrável, mas vai parar de navegar pelo menos.

    
por 28.04.2011 / 02:18

Tags