Como executar o script com os privilégios esperados do "usuário pretendido" geral do script?

4

Durante o desenvolvimento de um script, alguns bugs permanecem "latentes" até que o script seja executado por um usuário diferente. (Por exemplo, o script pode acessar um arquivo que somente a pessoa que está desenvolvendo o script tem acesso).

Existe uma maneira de executar o script com os mesmos privilégios que o "usuário pretendido" do script minimamente teria ?

(Por favor, note o texto da pergunta. Eu especificamente evitei escrever "usuário com privilégios mínimos", porque em alguns casos o "usuário pretendido" pode ser esperado para mais de "privilégios mínimos". O caso que mais prontamente vem à mente é aquele em que o "usuário pretendido" deve pertencer a um grupo específico.

Naturalmente, uma solução simples seria criar um usuário simulado com os privilégios desejados, mas essa solução requer privilégios de criação de usuário, o que nem sempre é o caso. Estou interessado em soluções que podem ser usadas mesmo quando criar um usuário simulado não é uma opção.

    
por kjo 19.03.2013 / 20:08

2 respostas

0

Naqueles dias de máquinas virtuais baratas, não ser capaz de criar usuários de teste não é comum.

Você pode executar o programa em um ambiente mínimo: um padrão razoável PATH (geralmente /usr/local/bin:/usr/bin:/bin ), HOME e o que o programa precisar. Defina HOME para um subdiretório do seu diretório pessoal ou para algum outro lugar (por exemplo, em /tmp ), preenchido apenas com os arquivos que o programa espera encontrar. Este já é um primeiro teste contra dependências acidentais do ambiente. Você pode querer restringir o caminho a um /tmp/for-testing/bin contendo apenas alguns programas supostamente suficientes para testar contra dependências acidentais em softwares de terceiros. Ainda assim, um teste em uma instalação padrão de alguma distribuição seria mais conclusivo.

Se o programa precisar acessar alguns arquivos locais, você poderá testar contra dependências inesperadas em outros arquivos, jogando com fakechroot . Crie um diretório contendo tudo o que o sistema pode precisar (até o linker e a biblioteca padrão), mais o programa e seus arquivos de dados, e crie fakechroot nele (um chroot real precisaria de permissões de root).

    
por 20.03.2013 / 00:36
-1

Meu entendimento dessa questão é que você deseja executar o script como um usuário específico, para que não seja desenvolvido especificando a conta do usuário dev. Isso é basicamente o que o sudo pretende fazer. Basta criar uma regra de usuário do sudo assim:

devUser    ALL=(targetUser)    NOPASSWD: /path/to/script

e depois "devUser" pode executar o script da seguinte forma:

$ sudo -u targetUser /path/to/script

Eu preferiria sudo sobre "su", pois o NOPASSWD tornaria o desenvolvimento um pouco mais fácil.

    
por 19.03.2013 / 21:08