Po zrozumieniu problemu z użyciem hasła w wierszu poleceń muszę znaleźć sposób, aby podać hasło programu bez problemu (bez zapisania hasła gdzieś).
Mam skrypt bash, który automatycznie instaluje cały serwer LAMP ze źródła: Apache, FastCGI, PHP i MySQL. Te instalacje wymagają hasła, zwłaszcza MySQL.
Jak mogę w pełni zautomatyzować skrypt bez ujawniania hasła?
Edycja (9 czerwca, 3:55 UTC):
Wzywam mysql z hasłem w wierszu poleceń, poprzez root:
root@dor-desktop:/home/dor# PASS=`cat /home/dor/tmpf/pass`
root@dor-desktop:/home/dor# mysql -u root -p"$PASS"
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
(PASS = "p4ssw0rd" w naszym przypadku)
I wykonuję ps aux | grep mysql
przez mojego zwykłego użytkownika (dor), który nie pokazuje mi hasła !
(Niektóre z) ps
dane wyjściowe to:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3562 0.0 0.0 34156 2864 pts/0 S+ 05:53 0:00 mysql -u root -px xxxxxx
Jak to możliwe?
Odpowiedzi:
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.
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ęcix
znakami „es”.W prostych słowach np .:
Można go znaleźć np. W
client/mysqladmin.cc
kodzie źródłowym:Po
ps
uruchomieniu odczytuje region pamięci argumentów (argv[N]
) i tak jestxxxx
.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 uniksoweEdytować:
Jak @Gilles powiedzieć można
echo
,printf
lub użyciehere
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:Opcjonalnie
[client]
grupowanie powodujemysqld
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 wielups
implementacjach przezps -e
, w/proc/<PID>/environ
pliku w systemie Linux itp.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
.źródło
mysql-init
pliku za pomocą hasła przechowywanego w zmiennej bash? (bez ujawnienia)echo 'password=p4ssw0rd' >>mysql.cnf
jest bezpieczne, ponieważecho
jest wbudowane, więc hasło nie pojawia się w wierszu poleceń żadnego procesu. Dokument tutaj jest również bezpieczny.Typowym rozwiązaniem jest odczytanie hasła z pliku lub ze standardowego wejścia (lub z innego deskryptora pliku, który musiałby zostać przekazany jako parametr).
źródło
Niektóre programy (
ftp
na przykład wiersz poleceń ) odczytują hasła/dev/tty
, specjalny plik na proces reprezentujący kontrolujący TTY proces. Pozwala to programowi nie wyświetlać hasła z powrotem na ekranie i mieć nieco większą pewność co do tego, skąd ono pochodzi.źródło