Como o uso de uma senha do MySQL na linha de comando é inseguro?

12

Eu tenho algumas ferramentas BASH que usam a mysql -e "{command}"função. Inserir a senha toda vez que uso essas ferramentas seria uma dor, portanto, para evitar que a senha seja escrita em um arquivo de texto sem formatação com o código, eu a armazeno na memória (usando read -s) e o BASH a lê sempre que executa os comandos.

O Mysql ainda pensa que a senha está sendo enviada através da linha de comando (porque, de certa forma, é) e ainda me dá o erro "Usar uma senha na interface da linha de comando pode ser inseguro".

Para meus propósitos, não preciso suprimir esta mensagem. O que eu preciso saber é: o que poderia torná-lo inseguro? A senha nunca é fisicamente visível; portanto, a navegação no ombro não poderia fazê-lo, e mesmo alguém que adivinhou minha senha SSH não seria capaz de fazê-lo, pois ela é armazenada na memória e não nos próprios scripts. É possível um ataque man-in-the-middle ou algo semelhante?

Andrew
fonte
8
Coloque-o no ~/.my.cnf Exemplo Você pode especificar por host, fazendo [client<hostname>]por exemplo, [clientlocalhost]MySQL ferramentas irá usá-lo automaticamente assim que é mais fácil e seguro
AmazingDreams
Como você bashleu quando você executa o comando? Se você o fizer mysql -p"$pass", qualquer um poderá vê-lo ps.
Barmar 18/07/19

Respostas:

26

Qualquer pessoa que possa ver suas variáveis ​​de ambiente (incluindo os programas que você executa) pode ver a senha. E qualquer pessoa que possa visualizar seus processos pode ver a linha de comando usada para executá-los, incluindo os parâmetros.

Portanto, para uma caixa na qual você efetua login, o risco provavelmente é insignificante. Mas para um ataque direcionado a você pessoalmente, esse é um vetor de ataque trivial no grande esquema das coisas.

pescoço longo
fonte
22
Assim como alguém ver o seu ~/.history, etc
ivanivan
Sem mencionar o HTOP e utilitários similares similares antes que estes fossem mascarados. Muitos scripts também não usavam variáveis ​​ambientais $ PASS etc., com base no fato de o usuário ser apenas de leitura ou sem permissões. Em um único usuário independente, pode não parecer importante.
Mckenzm
1
Onde a pergunta diz algo sobre variáveis ​​de ambiente? As variáveis ​​do shell não são colocadas no ambiente, a menos que você as exporte.
Barmar 18/07/19