Eu posso responder à pergunta "como eles conseguem ler a senha?"
Existe um arquivo de dispositivo chamado /dev/tty
. Os kernels Linux (e mais modernos) organizam para que /dev/tty
seja diferente para cada processo que possui um TTY de controle. Isso é tudo dos processos interativos, você teria que sair do seu caminho para escrever um programa que não tem um controle TTY. A coluna "TTY" de ps -l -p $$
mostrará qual é o TTY do seu shell. A coluna ps -el
"TTY" mostrará o controle do TTY de todos os processos.
Você pode pensar em /dev/tty
como uma maneira de obter o que normalmente seria stdin, mas do teclado associado ao TTY de controle. Você pode tentar isso com o comando cat < /dev/tty > spork
em uma janela do Xterm. Tudo o que você digitar, até o controle de encerramento-D, acabará no arquivo "spork".
Muitos clientes de FTP e SSH usam /dev/tty
para entrada de senha, para evitar que uma senha seja mostrada no ambiente ou em outras fendas. Os clientes interativos podem fazer open("/dev/tty", O_RDWR)
independentemente do TTY de controle real e obter um descritor de arquivo que, em essência, esteja conectado ao teclado. Várias chamadas do sistema podem ser usadas para desativar o eco. Você pode testar isso usando um Xterm de shell bash e executando stty -echo
. Você terá que digitar cego, mas comandos como ls
, ps
, etc. claramente chegam ao shell e funcionam. Você pode ativar o TTY ecoando novamente via stty echo
.
Aparece ( conforme Rahul Patil acima ), que você pode definir um senha em um arquivo, .my.cnf
. Esse arquivo pode incluir estas linhas:
[client]
password="my_password"
ou talvez algo como:
[mysql]
password="my_password"
user=root
O arquivo .my.cnf
parece ser extremamente flexível na especificação de parâmetros e valores comuns a muitos clientes do MySQL.