Posso executar um comando com privilégios específicos em determinados diretórios?

3

Eu gostaria de poder executar um comando, passando parâmetros para bash ou similar, de forma que este comando não tenha permissão para gravar em um determinado caminho, sobrescrevendo os outros privs do usuário.

Por exemplo:

root> /bin/bash -protect /folder/to/protect mycommand.sh

Neste exemplo, o usuário root pode obviamente fazer o que quiser, mas enquanto eu testo um novo script que estou escrevendo, gostaria de proteger uma pasta, como se a pasta fosse somente para esse usuário.

Existe uma maneira de fazer isso sem adicionar um novo usuário e ajustar os privs do usuário de acordo? Ele não precisa estar no bash, não me importo com a abordagem - desde que eu possa proteger pastas sem adicionar um novo usuário, não me importo!

(Sinto muito pelo título, não consigo pensar em como explicar meus requisitos em uma linha!)

    
por Rich 13.07.2011 / 17:09

2 respostas

1

A segurança do Unix é baseada em permissões para usuários e grupos. Se você quiser tornar um diretório somente leitura para um comando, será necessário executá-lo como um usuário que não tem permissão para gravar nesse diretório. Ou há uma abordagem mais pesada, que é executar o comando em uma máquina virtual.

Você pode encontrar bindfs úteis. O Bindfs é um sistema de arquivos empilhado, isto é, cria uma visão alternativa de uma parte da árvore de diretórios. Em particular, você pode criar uma visualização somente leitura ou uma visualização com permissões diferentes. O Bindfs não pode tornar /folder/to/protect somente leitura, mas pode criar uma visualização somente leitura desse diretório /read/only/view ; você precisa encontrar algum outro meio (como permissões) de impedir que o comando grave em '/ folder / to / protect.

bindfs --perms=a-w /folder/to/protect /read/only/view
    
por 14.07.2011 / 00:25
0

Você pode escrever uma biblioteca compartilhada que implementou um wrapper em torno de open , que executou as verificações de segurança adicionais desejadas. O programa que você escreve pode então usar o LD_PRELOAD para carregar sua biblioteca compartilhada ao invocar o programa e sobrescrever o open do sistema.

Talvez seja necessário substituir outras chamadas do sistema para garantir que não haja uma maneira alternativa de o programa alcançar o que está tentando fazer.

    
por 14.07.2011 / 15:52