Gravar para um arquivo sem redirecionamento?

10

Estou escrevendo um aplicativo compilado regularmente que precisa criar um arquivo especial e escrever um cookie mágico nele. Não consigo escrever o arquivo diretamente do aplicativo, o modelo de segurança do sistema exige que eu inicie uma ferramenta de ajuda com privilégios elevados para fazer o truque. Eu posso fornecer qualquer número de argumentos para a ferramenta auxiliar. Agora eu gostaria de escolher um comando de sistema muito simples que serviria como ferramenta auxiliar e criaria o arquivo para mim. Algo parecido com isto:

/bin/sh -c "/bin/echo -n 'magic' > /some/where/file"

O simples touch não o corta, pois preciso gravar o cookie no arquivo, um simples echo sem o invólucro do shell não funciona, pois ele precisa de redirecionamento para gravar o arquivo. Não me sinto confortável em chamar o shell com privilégios de root para realizar uma tarefa tão trivial. Existe algum comando do sistema realmente simples e restrito que eu poderia chamar para escrever o arquivo para mim?

    
por zoul 22.02.2011 / 15:44

3 respostas

10

Que tal isso:

echo -n 'magic' | sudo tee /some/where/file > /dev/null

Claro que existem redirecionamentos, mas somente tee é executado como root e não como shell. Funciona com dd of=... também.

    
por 22.02.2011 / 16:56
7

Sem redirecionamento de saída, sem pipe, mas com "string aqui":

dd of=/some/where/file <<<'magic'
    
por 29.03.2016 / 15:43
5

Há outra consideração, que é que você não quer colocar o valor do cookie mágico em uma linha de comando, já que isso pode ser observado por outros usuários. Mesmo se o programa tiver vida curta (incluindo se o programa zerar a seqüência da linha de comando), há a oportunidade para o ataque. Então, um teórico:

writestringtofile 'magic' /some/where/file

é uma abordagem perigosa. Portanto, eu sugiro a sugestão do @stribika: escrever o valor em um arquivo temporário e copiá-lo no lugar. Certifique-se de usar uma função segura para criar o arquivo temporário ( mkstemp() ) para que também não haja uma condição de corrida.

    
por 22.02.2011 / 19:37