Evitar que os usuários corrompam e usem um script

1

É possível negar o direito de copiar arquivos?

Eu tenho um script que deve ser executável por outros. Eles também podem ler o arquivo (embora não seja um problema proibir a leitura). Mas eu não quero que o script seja alterado e executado.

Não é um problema definir essas permissões, mas é fácil copiar, alterar e executar o script. Isso pode ser evitado?

O SO é a versão 6.2 (Santiago) do Red Hat Enterprise Linux Workstation.

    
por EverythingRightPlace 21.08.2014 / 17:33

3 respostas

2

Você pode usar o sudo para isso.

Você pode permitir que seus usuários sudo seu script e apenas esse script.

Passo a passo:

  1. Crie uma conta "executor_account" do sistema (você pode usar qualquer nome) e conceda permissões ao seu script. Não use conta root para isso.

  2. Configure o sudo.

    Você tem que aprender como usar o sudo e permitir que seus usuários façam "sudo executor_account myscript.sh" e nada mais. É possível permitir que executem arquivos que eles não conseguem. Eu não sou especialista em Linux, não vou explicar isso, mas você pode encontrar muitos tutoriais sobre o sudo em todos os lugares.

Acho que é a única maneira de permitir que o usuário execute o arquivo que ele não consegue ler.

O script será executado a partir de outra conta de usuário, portanto, os "produtos" eventuais do script (registros, etc.) serão de propriedade dessa conta especial criada por você. Você tem que lidar com isso de alguma forma, se o script ou programa executado pelo script está produzindo alguns arquivos.

    
por 21.08.2014 / 20:27
1

Não, não é possível com permissões de arquivo do Linux. Os usuários devem poder ler o script de shell para executá-lo - e isso significa que eles podem fazer uma cópia, modificá-lo e executá-lo.

    
por 21.08.2014 / 18:35
1

Isso é um pouco desajeitado, mas - escreva um programa em C que se pareça com isto:

#include <stdio.h>
#include <stdlib.h>

    ︙

        FILE    *sh;

        sh = popen("/bin/sh", "w");            // Use "/bin/bash" if you need to.
        if (sh == (FILE *)NULL) {
                perror("popen");
                exit(1);
        }
                                        <-------- Insert magic here.
        fclose(sh);

No ponto “ Inserir mágica aqui. ”, insira o código para escrever o script em sh ; por exemplo,

        fprintf(sh, "for x in red blue green\n");
        fprintf(sh, "do\n");
        fprintf(sh, "        echo x = \"$x\"\n");
        fprintf(sh, "done\n");

Se forem mais do que apenas algumas linhas, pode ser mais fácil armazená-lo como uma matriz de strings. Em seguida, compile este programa e torne o binário apenas para execução (por exemplo, modo 710 ou 711).

Nenhuma solução será infalível porque os usuários poderão ver quais comandos estão sendo executados usando ps em outra janela, mas isso lhes daria apenas vislumbres fragmentados no roteiro.

Claro, se a lógica do seu script é realmente sensível, a resposta real é traduzi-lo em uma linguagem compilável.

    
por 21.08.2014 / 22:23