W odniesieniu do twojej aktualizacji:
Po uruchomieniu procesu ma on dedykowany obszar pamięci, w którym przechowywane są argumenty, oraz liczbę całkowitą, która podaje liczbę argumentów, które zostały przekazane.
MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
MySQL sprawdza, czy hasło zostało przekazane w wierszu poleceń -p
, a jeśli zostało skopiowane do nowej, niewidocznej zmiennej, następnie nadpisuje ten obszar pamięci x
znakami „es”.
W prostych słowach np .:
argc 2
argv[1] -p
argv[2] p4ssw0rd
new_var = copy(argv[2]);
argv[2] = "xxxxx";
Można go znaleźć np. W client/mysqladmin.cc
kodzie źródłowym:
case 'p':
...
opt_password=my_strdup(argument,MYF(MY_FAE));
while (*argument)
*argument++= 'x'; /* Destroy argument */
Po ps
uruchomieniu odczytuje region pamięci argumentów ( argv[N]
) i tak jest xxxx
.
Przez bardzo krótki czas hasło jest widoczne, ale tylko przez kilka cykli procesora.
Możesz zaktualizować hasło MySQL za pomocą specjalnej --init-file
opcji i procedury. C.5.4.1.2. Resetowanie hasła roota: systemy uniksowe
mysqld_safe --init-file=/home/me/mysql-init &
Edytować:
Jak @Gilles powiedzieć można echo
,printf
lub użycie here
dokument ze skryptu.
Możesz również dodać to do .my.cnf
swojego katalogu domowego lub w ( tymczasowym ) pliku i użyć --defaults-extra-file
opcji. (Uwierz, że musisz dodać tę opcję wcześnie w wierszu poleceń.) Opcjonalnie możesz także dołączyć użytkownika. Zwróć także uwagę na dodatkowe w nazwie opcji, chyba że chcesz użyć tylko tego pliku jako konfiguracji:
[client]
user=foo
password='password!'
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...
Opcjonalnie [client]
grupowanie powoduje mysqld
pominięcie konfiguracji.
Można również użyć MYSQL_PWD
zmiennej środowiskowej, ale nigdy nie należy jej używać, ponieważ można wyświetlić listę środowiska, w wielu ps
implementacjach przez ps -e
, w /proc/<PID>/environ
pliku w systemie Linux itp.
tr '\0' '\n' < /proc/<PID>/environ
Więcej na ten temat tutaj .
Możesz także zajrzeć do narzędzia konfiguracyjnego MySQL, które umożliwia przechowywanie hasła w zaszyfrowanym pliku w katalogu domowym - .mylogin.cnf
.