Como eu deixo o usuário 'Y' escrever na pasta 'A' somente ao executar o script 'X'?

1

Como faço para que o usuário Y escreva na pasta A somente ao executar o script X ?

    
por khelll 17.02.2010 / 19:57

3 respostas

4

Acredito que isso exigirá que o programa X tenha permissões setuid e que pertença a um usuário UA que tenha privilégios de gravação na pasta A. Em seguida, quando X for chamado, ele será executado como UA, não importando o usuário para o qual foi chamado.

A maioria dos shells (talvez todos) não permite que os scripts tenham permissões setuid, eles simplesmente ignoram esse bit de permissão, a menos que X seja um binário. É claro que x poderia ser um invólucro binário que apenas executa algum script separado X.sh.

Você não deve setuid X como root se não for necessário. Você poderia tornar a pasta A gravável por um usuário UA com menos privilégios.

Como alternativa, você pode fazer com que a pasta A seja gravável por um grupo dedicado, e atribuir X a esse grupo, e usar setgid no X ao invés de setuid.

    
por 17.02.2010 / 21:10
2

Este problema é comumente enfrentado pelos jogos - o nethack, por exemplo, possui arquivos "bones" e uma tabela hiscore que deve ser gravada pelo jogo, mas não por nenhum usuário individual não-administrador. Isso é feito com o executável setgid.

link tem um resumo sobre esse sistema. A vantagem é que uma exploração do nethack só lhe dá privilégios de grupo de jogos, e não privilégios de root do usuário.

    
por 17.02.2010 / 23:01
0

Que tal ter o script x escrito em / usr / bin, mas como usuário z que é uma conta de usuário para essa finalidade específica?

Concedido, isso significa usar o sticky bit, que tem suas próprias preocupações de segurança, mas você pode bloquear o usuário z (sem logins, permissões muito restritas além de / usr / bin, etc.)

Eu não sou o melhor em segurança Linux, mas era a única coisa que eu poderia criar em curto prazo.

Muitos aplicativos executam a separação de privilégios - eles fazem tudo o que podem como um usuário não privilegiado e, em seguida, uma ou duas operações que exigem raiz são realmente feitas por um processo separado. (Como alternativa: inicie como root, faça as duas coisas que requerem privilégios root e drop.)

Sua outra opção, fora de minha mente, é sudo.

    
por 17.02.2010 / 20:05