Às vezes eu faço echo "secret" | mysql -u root -p ...
. Agora, concerteza sobre segurança aqui: alguém que pode listar todos os processos pode ver a senha?
Para verificar eu tentei com echo "test" | sleep 1000
e o comando echo com o segredo não era visível na saída de "ps aux". Portanto, presumo que seja seguro - mas um especialista em segurança pode confirmá-lo, por favor? :)
.history
).Respostas:
A resposta para isso depende de qual shell você está usando. Muitos shells possuem
echo
um comando interno, o que significa que ele não gera um processo separado e, portanto, não será exibido em uma lista de processos. No entanto, se você digitar/bin/echo
ou./echo
desabilitar os recursos internos com oenable -n echo
comando, o shell não usará seu comando interno e, em vez disso, usará a versão binária. Isso será exibido em uma lista de processos.Se você estiver usando o binário e não o shell interno, o comando echo será exibido pelo tempo necessário para mover os dados para o buffer STDIN do outro processo. Esse buffer possui um tamanho finito; portanto, se houver mais dados que caberão no buffer, o comando echo terá que permanecer por um tempo até que o outro processo possa ler alguns dados do buffer. Para a maioria dos casos (como os dois exemplos que você deu acima), esse período será de microssegundos. Se você estiver colando um dump de SQL de 20 MB no MySQL usando echo, isso poderá ser mais longo. Não importa quão curto seja o tempo, se você estiver usando o binário em vez do shell embutido e alguém acertar o tempo, eles poderão ver o processo na lista de processos.
Você pode evitar isso colocando os dados secretos em um arquivo (com permissões apropriadas) e usando o arquivo como STDIN assim:
fonte
Para o caso mysql, ~ / .my.cnf pode ser usado para armazenar segredos, ie
fonte
Apenas use
e aperte enter. A senha será solicitada e ela não será visível na lista de processos nem nos arquivos de histórico.
fonte