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.
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?
Sem redirecionamento de saída, sem pipe, mas com "string aqui":
dd of=/some/where/file <<<'magic'
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.
Tags sudo root security shell io-redirection