piping uma senha e segurança

11

Eu às vezes faço echo "secret" | mysql -u root -p ... . Agora estou preocupado com a segurança aqui: alguém listando todos os processos vê a senha?

Para verificar, tentei com echo "test" | sleep 1000 e o comando echo com o segredo não ficou visível na saída de "ps aux". Então, eu assumo que é seguro - mas um especialista em segurança pode confirmar isso, por favor? :)

    
por gucki 22.12.2011 / 19:25

3 respostas

13

A resposta para isso depende de qual shell você está usando. Muitos shells têm echo como um comando incorporado , o que significa que ele não desova um processo separado e, portanto, não será exibido em uma listagem de processos. No entanto, se você digitar /bin/echo ou ./echo ou se desativar os arquivos incorporados com o comando enable -n echo , o shell não usará o comando interno e usará a versão binária. Isso será exibido em uma listagem de processos.

Se você estiver usando o binário em vez do shell embutido, o comando echo aparecerá durante o tempo necessário para mover os dados para o buffer STDIN do outro processo. Este buffer tem um tamanho finito, portanto, se houver mais dados do que os que cabem no buffer, o comando echo terá que ficar por algum tempo até que o outro processo possa ler alguns dos dados do buffer. Para a maioria dos casos (como os dois exemplos que você deu acima), esse período de tempo será de microssegundos. Se você estiver colando um despejo SQL de 20 MB no MySQL usando o eco, isso pode 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 conseguir 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 as permissões apropriadas) e usando o arquivo como STDIN assim:

mysql -u root -p < file_with_secret.sql
    
por 22.12.2011 / 20:04
3

Para o caso mysql ~ / .my.cnf pode ser usado para armazenar segredos, ou seja,

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME
    
por 22.12.2011 / 20:19
1

Apenas use

mysql -uroot -p

e aperte enter. Você será solicitado a fornecer a senha e ela não será visível na lista de processos nem nos arquivos de histórico.

    
por 22.12.2011 / 20:22