comando bash puro com sudo

1

Eu escrevi um script e estou usando uma construção como esta dentro dele FILES=($S_DIR/$OPTIONS) , onde eu basicamente crio uma matriz de arquivos. Assim: FILES=(/tmp/*/workspace/*zip) .

Isso funciona bem para mim, até que o script seja executado em um arquivo / pasta 700. Existe uma maneira de chamar essa linha em particular com sudo ? É claro que posso usar find ou ls para obter a lista de arquivos. Mas eu gostaria de descobrir se esse caminho também é possível também. Obrigado!

EDITAR:

Estou escrevendo uma verificação para o Nagios e quero verificar todos os arquivos do tipo especificado dentro da pasta. Todos os arquivos que eu quero verificar têm 700 direitos sobre eles, então o usuário nagios não pode lê-los. E array FILES não está vinculado no final. E eu não posso verificar as propriedades de arquivo desejadas. Então, estou procurando uma maneira de preencher FILES=($S_DIR/$OPTIONS) sem o utilitário externo, como find ou ls . Meu script funciona em arquivos / pastas que o usuário tem direitos. Resumindo: preciso elevar os direitos para apenas esta linha no meu script: FILES=(/tmp/*/workspace/*zip)

    
por 0xbadc0de 10.09.2016 / 11:06

1 resposta

3

Primeiro, não, você não pode enviar uma atribuição como FILES=blah para outro processo, já que as variáveis são internas ao shell e, enquanto as variáveis exportadas se propagam para baixo para os filhos, não há nenhum método para propagá-las para cima para os pais e antepassados de um processo.

Você pode, no entanto, executar um comando externo e selecionar sua saída em uma matriz. Embora não seja tão seguro quanto a caracteres especiais em nomes de arquivos como o shell glob, uma vez que o bash não parece gostar de 'stat' como um separador. Se você não tiver arquivos com novas linhas, isso deve funcionar:

IFS=$'\n'   # only split on newlines
FILES=( $(find ...) )  # or
FILES=( $(sudo find ...) )  

No entanto, se você produziu a lista de arquivos com privilégios elevados, talvez não seja possível acessar os arquivos na lista depois disso. Por exemplo, se eles estivessem em um diretório ao qual o usuário não tem acesso, mesmo um sudo neles não funcionaria.

E, em qualquer caso, para fazer isso com segurança, você precisa ter um conjunto limitado muito de comandos permitidos em sudo find (para o usuário que está executando o script). Caso contrário, não há nada que impeça alguém de alterar o sudo find -delete para %code% ou pior.

    
por 10.09.2016 / 13:20

Tags