Como limpar com segurança permissões para uma subárvore

1

Em nosso servidor, há vários usuários (atualmente dois, esperados três ou quatro) com permissão para implantar uma nova versão de nosso aplicativo. Esse processo consiste em baixar alguns arquivos de um repositório git de origem confiável e iniciar o aplicativo (um processo não privilegiado).

Tudo isso é feito usando um único script e leva alguns segundos. A menos que outro usuário tenha deixado arquivos ou diretórios com permissões ou grupos errados.

Então a implantação falha e nós executamos

sudo chgrp -R sudo      /our/root/directory
sudo chmod -R g=u,o-rwx /our/root/directory &&

Gostaria de permitir que façamos isso sem a necessidade de inserir uma senha.

Eu sei que setuid não funciona em um shell script (por um bom motivo). Pensei em usar um script setuid perl, mas não é mais suportado. Eu poderia escrever um wrapper C e um script, mas ter dois arquivos não parece confortável nem seguro. Eu poderia escrever todo o material em C usando as chamadas do sistema, mas levaria séculos.

Então, estou perguntando: Qual é a maneira mais simples e segura de conseguir isso? Escrever algum código em C curto é OK.

É o Ubuntu 16.04 caso seja importante.

(*) Estamos usando o grupo sudo e permissão rwxrwx--- ou rw-rw---- para a árvore inteira.

    
por maaartinus 13.08.2017 / 18:39

4 respostas

2

Escreva um script de shell e conceda as permissões de usuários aplicáveis para invocá-lo com o sudo. Use a diretiva NOPASSWD se você não quiser que os usuários tenham que digitar sua senha (note que a ordem é importante, veja Como executar um programa específico como root sem um prompt de senha? ).

Verifique se o sudo está configurado para remover todas as variáveis do ambiente, exceto algumas que são seguras (por exemplo, LC_* e LANG ). Este é o caso, por padrão, no Ubuntu, assim, no Ubuntu, você não precisa da linha Defaults , a menos que você tenha alterado a configuração env_reset .

Defaults!/usr/local/bin/fix-our-permissions env_reset
%our-app-maintainers ALL = NOPASSWD: /usr/local/bin/fix-our-permissions

Como alternativa, peça às pessoas que acessem a área de implantação por meio de um sistema de arquivos que imponha propriedade e permissões fixas, como bindfs . Consulte Alterar automaticamente a permissão do arquivo ao escrever para uma pasta e Todos os arquivos criados no diretório devem ser propriedade de bob

Mas, na verdade, ninguém deve estar implantando manualmente. A implantação deve ser acionada manualmente, mas deve ser executada por um serviço automatizado que é executado em uma conta de usuário do sistema, obtém uma versão do IC, faz o download e reinicia o daemon.

    
por 14.08.2017 / 01:52
1

Eu acho que você pode fazer um programa que monitore sua pasta e, se ele encontrar algum problema, ele altere a permissão da pasta ou do conteúdo, faça isso no Crontab (root) ou execute-o como um serviço (root). esta é uma alternativa.

    
por 13.08.2017 / 19:34
0

Você pode alterar umask para que os usuários usem o chmod exato que você deseja, assim todos os arquivos que eles inserem no sistema começam com esse conjunto definido de permissões

deixe o link aqui

    
por 13.08.2017 / 19:55
0

Você pode usar ACLs ( setfacl ); que pode impedir os problemas de premissas.

Uma alternativa é que você baixe os arquivos em uma nova pasta vazia e substitua o antigo depois. Isso pode ser feito atomicamente, sobrescrevendo um symlink para esta pasta ( ln -sf ).

    
por 13.08.2017 / 20:13