Mam hasło MySQL zapisane w pliku foo.php
, na przykład P455w0rd
, kiedy próbuję go użyć:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Obie opcje wciąż pytają o hasło, z jakiego jest prawidłowego sposobu wysłania hasła stdin
?
-p
hasłem a hasłem./proc
nich dostęp, może je w prosty sposób odczytać, dopóki program jest uruchomiony . Po to~/.my.cnf
jest a , właściwie chmod'ed do 0600Odpowiedzi:
Musisz być bardzo ostrożny w przekazywaniu haseł do linii poleceń, ponieważ jeśli nie będziesz ostrożny, pozostaniesz otwarty na wąchanie za pomocą narzędzi takich jak
ps
.Najbezpieczniejszym sposobem na to byłoby utworzenie nowego pliku konfiguracyjnego i przekazanie go za
mysql
pomocą opcji wiersza polecenia--defaults-file=
lub--defaults-extra-file=
.Różnica między nimi polega na tym, że ten drugi jest odczytywany jako dodatek do domyślnych plików konfiguracyjnych, podczas gdy w pierwszym przypadku tylko jeden plik jest przekazywany jako argument.
Twój dodatkowy plik konfiguracyjny powinien zawierać coś podobnego do:
Upewnij się, że zabezpieczasz ten plik.
Następnie uruchomić:
źródło
argv
aby zastąpić parametry podane dla-p
flagi. Przynajmniej tak się tutaj zawarto, wraz z innymi istotnymi informacjami: unix.stackexchange.com/questions/78757/…--login-path
tym, że jest obsługiwany. Nie jest to dużo lepsze niż to, ale jest nieco mniej zwykłego tekstu (nawet jeśli bariera w konwersji treści na zwykły tekst jest niska).export MYSQL_PWD=muhpassword
) i wykonaj polecenie bez-p
. Zobacz zmienne środowiskowe programu MySQL . Mimo ostrych ostrzeżeń zawartych w instrukcji jest to dość bezpieczne . Chyba że później uruchomisz dziwne towary w tej samej powłoce.MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
Narzędzie
mysql
klienta może przyjąć hasło w wierszu polecenia za pomocą opcji-p
lub--password=
.Jeśli używasz
-p
, po literze opcji nie może być spacji:Wolę długie opcje w skryptach, ponieważ są one samo dokumentujące:
źródło
/proc/$pid/cmdline
lub za pomocąps
polecenia. To prawda, że mysql zastępuje hasło w argv podczas uruchamiania, ale zawsze istnieje okno czasowe, w którym inny użytkownik może je zobaczyć. Ponadto w niektórych systemach nadpisywanie argv może nie działać.Jeśli chcesz zacząć
mysql
od hasła, pod warunkiem, że najpierw musisz pobrać hasło w zmiennej:Następnie możesz rozpocząć
mysql
polecenie za pomocą:źródło
MYSQL_PWD
zmienna środowiskowa, która jest odczytywana,mysql
jeśli jej nie określisz-p
. W Linuksie jest to bezpieczna metoda, ponieważ środowisko użytkownika nie może być odczytane przez innych nieuprzywilejowanych użytkowników - w przeciwieństwie do wektora argumentów.